Tehtävät julkaistaan: | |
---|---|
Tiistaina 13.11.2007 | |
Palautus viimeistään: | |
20.11.2007 klo 18 | |
100% tehtävistä tarkoittaa: | |
6 kpl tehty |
Tämä on nyt sitten viimeinen demo. Kerrataan jälleen vanhaa, ja ihan vähän ennakoidaan tulevia haasteita kuten omien olioluokkien tekemistä ja "edistyneempiä koodauskäytänteitä" eli sitten kun osaa tehdä koodin jollain tavoin, ja tietää että se toimii, niin siitä voi tehdä muutamalla peruskikalla lyhyempää ja selkeämpää.
Paperikopioita on saatavilla perinteisestä paikasta.
Tehtävä 1:
"Capstone" -tehtävä, eli kokonaisen ohjelman tekeminen. Kahden tehtävän laajuinen. Jos omassa harkassa on kovasti tekemistä, tee mieluummin sitä ja lyhytjänteisempiä tehtäviä. Tehdään palautus kahden tasoisena:
Level 1: Palauta pelkästään tehtävä 1: Riittää että ohjelma toimii kovakoodatulla sanakirjalla. Tässäkin joutuu kivasti miettimään, mutta pärjää alkeellisemmilla tietorakenteilla ym.
Level 2: Palauta sama(t) tiedosto(t) tehtävään 1 ja myös 2: Täytyy toimia tiedostosta ladatulla sanakirjalla. Tässä ei paljon toiminnallista eroa ykköseen: pitää jälleen katsoa jostakin mallia tiedoston lataamiseen, ja joutuu käyttämään esim. ArrayListiä tai muuta Javan valmista tietorakenneluokkaa.
Harjoitustyö on se, jossa hiotaan kaikki seikat kuntoon. Demossa sallitaan pieniä oikomisia esim. kommentoinnin ja syötteiden käsittelyn suhteen. Tärkeää on jotakuinkin toimivan tuotoksen tekeminen käytettävissä olevassa ajassa.
Tehtäväkuvaus: Halutaan tulkkiohjelma, joka lukee sanakirjan seuraavanlaisesta tiedostosta (ekalla rivillä kielten nimet, sitten sanastoa miten tahansa paljon):
suomi | englanti aikavyöhyke | time zone apina | monkey haarukka | fork käytettävyystutkimus | usability research käyttöjärjestelmä | operating system ohjelmointi | programming operaatiotutkimus | operations research
Sanaston pituus tiedostossa voi olla mikä tahansa, joten tietorakenteeksi kannattanee valita joku Javan valmis dynaaminen kokoelmaluokka. Tässä joudut jo todella suunnittelemaan tarvittavia tietorakenteita ja aliohjelmia. Jotenkin on hallittava sanojen yksi-yhteen vastaavuus kummasta tahansa kielestä toiseen.
Paljon tarvittavia osia voi olla valmiina Javassa, jos osaa etsiä esim. Internetistä vinkkejä, mutta jos ei löydy, niin periaatteessa näkisin, että itsekin voi tehdä sen mikä puuttuu. Pitää vaan miettiä, mitä tarvitaan, ja toteuttaa.
Käyttöliittymä olisi seuraavanlainen:
Kielenkäännöstranslaattori -------------------------- Mikä sanakirjatiedosto ladataan> suomienglanti.txt Sanakirja ladattu OK. Kummasta kielestä käännetään (suomi/englanti)>suomi -- Tyhjä rivi lopettaa ohjelman -- Anna sana kielellä "suomi">haarukka Sana "haarukka" on käännettynä: fork -- Tyhjä rivi lopettaa ohjelman -- Anna sana kielellä "suomi">nieminen Sanalle "nieminen" ei löydy käännöstä! -- Tyhjä rivi lopettaa ohjelman -- Anna sana kielellä "suomi"> jne
Ohjelma ei ole valmis ennen kuin se toimii siten kuin sen pitää (ks. suoritusesim. edellä ja määritelmät Level 1 ja level 2 -tasoisille toteutuksille).
Tehtävä 2: (sama kuin ykköstehtävä)
Jos saat tehtyä level 2:n, palauta tähän sama(t) tiedosto(t) kuin ykköseen, niin automaatti osaa laskea kaksi demopistettä!
Tehtävä 3: Matriiseja vielä
Kertaillaan vähän matriisin sielunelämää. Aiemmin on tehty satunnaisen liukulukumatriisin (2-ulotteinen taulukko) generointi. Tee ja testaile aliohjelmat, joilla voi laskea minkä tahansa kokoiselle matriisille:
- kaikkien alkioiden keskiarvon.
- kunkin rivin alkioiden keskiarvot (paluuarvona uusi 1-ulotteinen taulukko)
Tehtävä 4: Koodauskäytänteet loppuun asti
Korjaa seuraavat koodit Java Code Conventions -lehdykän luvun "10.5 Miscellaneous Practices" mukaisiksi:
public static boolean onAamupaiva(int kloTunnit){ if (kloTunnit < 12){ return true; } else { return false; } } public static double minimiKahdestaLuvusta(double a, double b){ if (a<b) { return a; } return b; } // Seuraavaa ei ole code conventions -lehdykässä, mutta korjaa silti. // Idea on sama, ja ns. hyvässä koodissa vain yksi aliohjelmarivi! // Vaikeasti luettava ja pitkä toteutus on siis ongelma: public static boolean onVirastoaika(int kloTunnit){ boolean tulos = false; if (kloTunnit >= 8){ if (kloTunnit <= 16){ tulos = true; } } return tulos; } // Vielä yksi helppo tapaus: public static double summa(double a, double b, double c){ double summa = 0; summa += a; summa += b; summa += c; return summa; }
Tehtävä 5:
Ennakoidaan tulevaa. Vasta ohjelmointi kakkosella vapaudutaan mallintamaan maailmaa kunnolla olioluokkien hierarkiana. Nyt voi jo kokeilla yksittäisen luokan tekemistä. Oppikirjan luku 5 kertoo tästä ja antaa esimerkkejä.
Määrittele, toteuta ja dokumentoi javadocilla "perinteinen ensimmäinen olio": Elukka eli eräänlaisen elävän olennon tietokonemalli. Elukan ominaisuudet eli attribuutit ovat:
- kesäkarvan väri (merkkijono)
- tieto siitä, onko tällä hetkellä talviturkki (talviturkki on aina valkoinen, mutta palaa taas keväällä elukan syntymäkarvan väriseksi).
Attribuutit oltava privaatteja ja niihin pääsee käsiksi vain olion rajapinnan eli julkisten metodien kautta!
Elukalle pitää olla vähintään kaksi konstruktoria: Parametriton konstruktori luo mustakarvaisen elukan. Merkkijonolla parametroidulla konstruktorilla voi luoda minkä tahansa värisen elukan. Käytä elukkaa eri käännösyksiköstä, esim. ElukkaTestisovellus.java. Käyttö pitää onnistua seuraavasti:
public class ElukkaTestisovellus{ public static void main(String[] args){ Elukka ellu = new Elukka(); Elukka nellu = new Elukka("täplikäs seepranvihreä"); // Pitäisi tulostua "musta" ja "täplikäs seepranvihreä": System.out.println("Ellun karva on " + ellu.getKarvanVari()); System.out.println("Nellun karva on " + nellu.getKarvanVari()); ellu.talviturkki(); // Olion sisäinen tila muuttuu! nellu.talviturkki(); // Olion sisäinen tila muuttuu! // Pitäisi tulostua "valkoinen" ja "valkoinen": System.out.println("Ellun karva on " + ellu.getKarvanVari()); System.out.println("Nellun karva on " + nellu.getKarvanVari()); ellu.kesaturkki(); // Olion sisäinen tila muuttuu taas! nellu.kesaturkki(); // Olion sisäinen tila muuttuu taas! // Pitäisi tulostua jälleen "musta" ja "täplikäs seepranvihreä": System.out.println("Ellun karva on " + ellu.getKarvanVari()); System.out.println("Nellun karva on " + nellu.getKarvanVari()); } }
Tehtävä 6: Oma harjoitustyö loppuun tai "loppuun"
Palauta omasta harjoitustyöstä versio, joka on mielestäsi valmis ja vaatimusten mukainen. Tämä on triviaalia niille, jotka ovat jo saaneet hyväksymismerkinnän; palauta demossa sama harkkatiedosto. Muille laitetaan tässä vähän pientä painetta pönttöön: Nyt voi kuitata demopisteen tekemällä harkkaa kunnon askeleen eteenpäin! Varsinainen hyväksyntä kuitenkin henkilökohtaisella palautuksella (varaa aika Korpista normaalisti). Apuja saa tukiopetussessioissa sekä varattavissa ohjauksissa.
Tätä ei käsitellä demotilaisuudessa.
Tehtävä 7: Vapaamuotoinen kurssipalaute
Kirjoita tekstitiedosto, jossa kerrot kurssista kokemuksiasi ja parannusehdotuksia. Myöhemmin tulee virallinen anonyymi kurssikysely, mutta siihen ei pysty kovin monisanaisesti kuvailemaan asioita.
Tätä ei käsitellä demotilaisuudessa.