Harjoitustyö 1
Harjoitustyö Tehtävä: ohjelmoi Java-kielellä keskustelualuetta simuloiva olioperustainen ohjelma (Simple Oope Board, S.O.B). Linkitetystä listasta perittyä omaa listaa käytetään muun muassa viestiin liittyvien vastausten säilömiseen. Työ tehdään pääosin itse. Ideoita voi vaihtaa koodia ei. Henkilökohtaista ohjausta mikroluokissa. Ohjaajilta voi kysyä sähköpostilla. Palautus WETO-järjestelmään noin kahden kuukauden kuluttua. Testaus automaattisesti julkisilla ja salaisilla testeillä. Palautustakaraja on perjantai 27.4. Olio-ohjelmoinnin perusteet Kevät 2018 Jorma Laurikkala 2
Harjoitustyö Keskiviikkona 11.4. on välipalautuspiste, johon mennessä täytyy palauttaa WETOon osa harjoitustyön koodista (ainakin luokkahierarkia, oma lista ja luokka viesteille). WETO auttaa opettajaa tarkistamalla koodia automaattisesti. Tarkka tehtävänanto julki tällä viikolla. Varaa työlle aikaa, aloita ajoissa, tee työtä säännöllisesti ja käy ohjauksissa jo niiden alkuvaiheessa, jos tarvitset enemmän apua. Olio-ohjelmoinnin perusteet Kevät 2018 Jorma Laurikkala 3
Keskustelualue Vaikka harjoitustyön keskustelualueella voi puhua vain itsensä kanssa, muistuttaa harjoitustyö jossain määrin oikeaa keskustelualuetta. Alueella on keskusteluketjuja (lankoja), jotka koostuvat viesteistä. Ketjun viesti voi olla uusi kommentti tai vastaus aikaisempaan viestiin. Viestiin voi liittää kuva- tai videotiedoston. Tiedostokaan eivät ole oikeita, vaan kuvien ja videoiden keskeisiä tietoja sisältäviä tekstitiedostoja. Keskustelijat ovat nimettömiä. Ohjelmalla on kankea tekstipohjainen käyttöliittymä viestit ja keskustelut yksilöidään juoksevan tunnisteluvun avulla ja ohjelmaa ohjataan komennoin. Olio-ohjelmoinnin perusteet Kevät 2018 Jorma Laurikkala 4
Keskustelualue Welcome to S.O.B. >add What is the best chemical element? And why it is gold? >new Nothing compares to gold. &au.gif >catalog #1 What is the best chemical element? And why it is gold? (1 messages) >reply 1 Gold is for pleps. >reply 1 Platinum is the best element! &platinum.jpg >tree = == #1 What is the best chemical element? And why it is gold? (3 messages) === #1 Nothing compares to gold. (au.gif 307200 B 640x480) #2 Gold is for pleps. #3 Platinum is the best element! (platinum.jpg 73136 B 1000x800) >new Hydrogen is the number one. Olio-ohjelmoinnin perusteet Kevät 2018 Jorma Laurikkala 5
Ohjelman rakenne Viestit organisoidaan Viesti-luokan olioiden ketjuiksi siten, että kukin viesti, joka ei ole vastaus toiseen viestiin muodostaa oksan, johon kaikki kyseisen viestin vastaukset liitetään. Yksittäisestä viestistä x on a) viite viestin vastaamaan viestiin (null, jos ei vastattu), b) viitteet kaikkiin viestiin x tulleisiin vastauksiin ja c) viite tiedostoon (null, jos ei tiedostoa). Vastausten viitteet säilötään omalle listalle, joka on tyhjä (ei null), jos viestiin ei ole vastauksia. Oksat ovat viestiketjun omistamalla omalla listalla tunnuksen määräämässä nousevassa järjestyksessä. Viestiketjut ovat puolestaan keskustelualueen omistamalla omalla listalla tunnuksensa mukaisessa järjestyksessä. Olio-ohjelmoinnin perusteet Kevät 2018 Jorma Laurikkala 6
Ohjelman rakenne Viestialueen lista säilöö viestiketjuihin liittyvät viitteet. #2 For testing purposes only Ensimmäinen ketju, jonka listalta on viitteet ketjun oksaviesteihin. Toisen ketjun lista on tyhjä, koska ketjussa ei ole vielä viestejä. #1 What is the best chemical element? null #4 Hydrogen is the number one. #2 Gold is for pleps. Oksaviestiin #1 on kaksi vastausta. Vastausviestit #2 ja #3 viittaavat oksaviestiin ja oksaviestin listalta on puolestaan viitteet vastauksiin. Oksaviesti ei vastaa mihinkään viestiin. null null #1 Nothing compares to gold. #3 Platinum is the best element! au.gif 307200 B 640x480 Viestit #1 ja #3 liittyvät viitteen kautta tiedostoolioihinsa. Viesteihin #2 ja #4 ei ole liitetty tiedostoja. Oksaviestin #4 lista on tyhjä, koska siihen ei ole vastauksia. Oksaviesti ei vastaa mihinkään viestiin. null platinum.jpg 73136 B 1000x800 Olio-ohjelmoinnin perusteet Kevät 2018 Jorma Laurikkala 7
Ohjelman rakenne Viesti-luokassa on Viesti-, OmaLista- ja Tiedosto-tyyppisten tyyppisten attribuuttien lisäksi attribuutit viestin tunnisteelle (int, >0) ja tekstille (String, vähintään yksi merkki). Kapseloi Viesti-luokka ja tee sille ainakin neliparametrinen rakentaja, jolle annetaan parametreina viestin tunniste (int), teksti (String), viite vastattuun viestiin (Viesti) ja viite tiedostoolioon (Tiedosto). Tiedosto- ja Viesti-viitteille sallitaan null-arvo. Vastauksiin liittyvät viitteet säilövä OmaLista-olio luodaan Viesti-luokan rakentajassa. Luokan on toteutettava opettajan antama rajapinta. Olio-ohjelmoinnin perusteet Kevät 2018 Jorma Laurikkala 8
Ohjelman rakenne Tiedostoja mallinnetaan abstraktilla yliluokalla Tiedosto- ja konkreettisilla Kuva- ja Video-aliluokilla. Tiedostoille yhteisiä tietoja ovat nimi (String) ja koko tavuina (int, > 0). Kuvan omat tiedot ovat leveys ja korkeus (int, > 0). Videon oma tieto on sen pituus sekunteina (double, > 0). Tee luokille parametrilliset rakentajat, aksessorit ja korvaa tostring-metodi ketjuttaen. Sijoita luokkahierarkia tiedostot-nimiseen pakkaukseen. Tiedoston tiedot ovat yhdellä riviltä tekstitiedostossa. Esimerkiksi au.gif-tiedoston sisältö on merkkijono "Kuva 307200 640 480". Olio-ohjelmoinnin perusteet Kevät 2018 Jorma Laurikkala 9
Ohjelman rakenne Peri LinkitettyLista-luokasta OmaLista-luokka. Listaan on kirjoitettava ainakin opettajan antamassa rajapinnassa määritellyt uudet listaoperaatiot, joita on käytettävä ohjelmassa. Operaatioiden on oltava puhtaita : niissä ei saa esiintyä esimerkiksi Viesti-tyyppiä. OmaLista-luokkaa käytetään Viesti-luokassa ja muissa luokissa, joissa tarvitaan säiliö viitteille. Tee oma luokka käyttöliittymälle ja tee erillinen main-metodin sisältävä ajoluokka. Kaikki käyttäjän antamat tiedot luetaan käyttöliittymässä. Pääsilmukan luonteva paikka on käyttöliittymän luokka. Sijoita mahdollisimman vähän ohjelman logiikasta vastaavaa koodia käyttöliittymään. Esimerkiksi ketjun hallinnoinnin on oltava muualla. Olio-ohjelmoinnin perusteet Kevät 2018 Jorma Laurikkala 10
Tulkin komennot add: lisää alueelle uuden viestiketjun. catalog: listaa alueen viestiketjut. select: asettaa tunnisteella yksilöidyn viestiketjun aktiiviseksi. new: tekee uuden viesti, joka ei ole vastaus mihinkään aikaisempaan viestiin. Valinnaisena tietona on viestiin liitettävän tiedoston nimi. reply: vastaa tunnisteella yksilöityyn viestiin. Valinnaisena tietona on viestiin liitettävän tiedoston nimi. tree: tulostaa ketjun viestit puuna. list: tulostaa ketjun viestit listana tunnuksen mukaan nousevaan järjestetykseen järjestettynä listana. head: tulostaa parametrina annetun määrä vanhimpia viestejä tunnuksen mukaan järjestettynä listana. Olio-ohjelmoinnin perusteet Kevät 2018 Jorma Laurikkala 11
Tulkin komennot tail: tulostaa parametrina annetun määrä uusimpia viestejä tunnuksen mukaan järjestettynä listana. empty: tyhjentää tunnisteella yksilöidyn viestin. find: hakee annettua merkkijonoa kaikista ketjun viesteistä ja tulostaa löydetyt viestit tunnuksen mukaan järjestettynä listana. exit: lopettaa ohjelman. Muuta: Pienet ja isot kirjaimet katsotaan eri merkeiksi. Tiedostojen nimissä sallitaan vain tietyt merkit. Kaikkiin virheisiin reagoidaan tulostamalla merkkijono Error! Olio-ohjelmoinnin perusteet Kevät 2018 Jorma Laurikkala 12
Esimerkkiajo Welcome to S.O.B. >add What is the best chemical element? And why it is gold? >new Nothing compares to gold. &au.gif >catalog #1 What is the best chemical element? And why it is gold? (1 messages) >reply 1 Gold is for pleps. >reply 1 Platinum is the best element! &platinum.jpg >tree = == #1 What is the best chemical element? And why it is gold? (3 messages) === #1 Nothing compares to gold. (au.gif 307200 B 640x480) #2 Gold is for pleps. #3 Platinum is the best element! (platinum.jpg 73136 B 1000x800) >new Hydrogen is the number one. Olio-ohjelmoinnin perusteet Kevät 2018 Jorma Laurikkala 13
Esimerkkiajo >reply 2 You mispelled plebs. &picard_facepalm.webm >tree = == #1 What is the best chemical element? And why it is gold? (5 messages) === #1 Nothing compares to gold. (au.gif 307200 B 640x480) #2 Gold is for pleps. #5 You mispelled plebs. (picard_facepalm.webm 1048576 B 10.5 s) #3 Platinum is the best element! (platinum.jpg 73136 B 1000x800) #4 Hydrogen is the number one. >empty 2 >list = == #1 What is the best chemical element? And why it is gold? (5 messages) === #1 Nothing compares to gold. (au.gif 307200 B 640x480) #2 ---------- #3 Platinum is the best element! (platinum.jpg 73136 B 1000x800) #4 Hydrogen is the number one. #5 You mispelled plebs. (picard_facepalm.webm 1048576 B 10.5 s) Olio-ohjelmoinnin perusteet Kevät 2018 Jorma Laurikkala 14
Esimerkkiajo >head 1 #1 Nothing compares to gold. (au.gif 307200 B 640x480) >tail 1 #5 You mispelled plebs. (picard_facepalm.webm 1048576 B 10.5 s) >find gif #1 Nothing compares to gold. (au.gif 307200 B 640x480) >add For testing purposes only >catalog #1 What is the best chemical element? And why it is gold? (5 messages) #2 For testing purposes only (0 messages) >select 2 >new testing, testing, 1, 2, 3 >new icicles >tree = == #2 For testing purposes only (2 messages) === #6 testing, testing, 1, 2, 3 #7 icicles Olio-ohjelmoinnin perusteet Kevät 2018 Jorma Laurikkala 15
Esimerkkiajo >select 1 >reply 5 you misspelled mispelled >tree = == #1 What is the best chemical element? And why it is gold? (6 messages) === #1 Nothing compares to gold. (au.gif 307200 B 640x480) #2 ---------- #5 You mispelled plebs. (picard_facepalm.webm 1048576 B 10.5 s) #8 you mispelled misspelled #3 Platinum is the best element! (platinum.jpg 73136 B 1000x800) #4 Hydrogen is the number one. >exit Bye! See you soon. Olio-ohjelmoinnin perusteet Kevät 2018 Jorma Laurikkala 16