Helsingin yliopisto / Tietojenkäsittelytieteen laitos / Java-ohjelmointi / Copyright © 2006 Arto Wikla.

581325-0 Java-ohjelmointi, koe 11.12.2006/AW

Kirjoita jokaisen vastauspaperisi alkuun kurssin nimi ja kokeen päivämäärä sekä nimesi, henkilötunnuksesi ja allekirjoituksesi. Kirjoita jokainen vastaus omalle konseptiarkilleen! Tässä kokeessa saa poikkeuksellisesti käyttää "lunttilappua". Sen koko saa olla enintään A4.

  1. Basilisko on yksinkertainen, mutta silti hyvin yksilöllinen olento. Jokaisella basiliskolla on yksikäsitteinen, syntymässä saatu järjestysnumero, ns. yksilöllisyys, joka ei koskaan voi muuttua, eikä kukaan muu koskaan voi saada samaa yksilöllisyyttä.

    Basiliskon perimä on String-olio. Basiliskot lisääntyvät vain pariutumalla. Lapsi saa jomman kumman vanhempansa perimän sellaisenaan. Todennäköisyys molemmille on yhtä suuri. Perimän arvonnan voi suorittaa lauseella if (Math.random()<0.5) ...

    Mallinna basilisko luokkana Basilisko, jossa kaikki kentät ovat luonnollisesti private, ja jossa on julkiset välineet (konstruktori ja aksessorit):

    Esimerkki: (juuri näin pitää tulostaa: olion järjestysnumerokin kuuluu siis tulostusasuun, kolmas tulostus voi tietenkin olla joko "(3): Maija" tai "(3): Matti")

        Basilisko isä   = new Basilisko("Matti");
        Basilisko äiti  = new Basilisko("Maija");
        Basilisko lapsi = isä.pariudu(äiti);
        System.out.println(isä);    // tulostus: (1): Matti
        System.out.println(äiti);   // tulostus: (2): Maija
        System.out.println(lapsi);  // tulostus: (3): Maija
    
                                                                                  (12 pistettä)
    

  2. TuplaBasilisko on basiliskon sukulainen. Se eroaa basiliskosta vain pariudu-metodin osalta: TuplaBasiliskon lapsi saa perimäkseen vanhempiensa perimämerkkijonojen katenaation, so. perimää esittävät merkkijonot liitetään yhteen. Toteuta TuplaBasilisko luokan Basilisko aliluokkana. Ohjelmoi uudelleen vain tarvittavat osat - esimerkiksi uusia kenttiä ei tarvita. Tämän tehtävän voi toki tehdä, vaikka ei edellistä tehtävää tekisikään!

    Esimerkki: (juuri näin pitää tulostaa: olion järjestysnumerokin kuuluu siis tulostusasuun)

        TuplaBasilisko äijä  = new TuplaBasilisko("Kalle"); // numero 1
        TuplaBasilisko ämmä  = new TuplaBasilisko("Kaija"); // numero 2
        TuplaBasilisko pentu = ämmä.pariudu(äijä);
        System.out.println(pentu); // tulostus: (3): KaijaKalle
    
    
                                                                                  (12 pistettä)
    

  3. "Mä en kestä noita sun puheitasi 'abstrakteista tietotyypeistä', ja 'kapseloinnista'!" Näin parahti ystäväsi kuunneltuaan intoiluasi hyvästä ohjelmointityylistä. Ystäväsi osaa kyllä ohjelmoida - algoritmeja syntyy, metodeita kutsutaan (tosin vain niitä "pääohjelman pikku apulaisia"), parametrivälityskin sujuu - mutta olio-ohjelmoinnin yksi keskeinen idea herättää hänessä vain asiantuntematonta ärtymystä. Auta ystävääsi ymmärtämään, mistä oikein on kysymys. Laadi siis asiasta kirjallinen selitys, joka sisältää valaisevia ohjelmaesimerkkejä (enimmäispituus 1 konseptiarkki). Vastauksen arvioinnissa otetaan huomioon selostuksen ajateltu lukija. Älä siis kirjoita tarkastajalle, joka jo tuntee asian, kirjoita tuolle ystävälle!
    
                                                                                  (15 pistettä)
    

  4. Tee ohjelma, joka tarjoaa seuraavan kielenkäänöspalvelun: Ensin ohjelma lukee tekstitiedoston, jossa rivillä 1 olevan alkukielisen sanan käännös on rivillä 2, rivillä 3 olevan alkukielisen sanan käännös on rivillä 4, jne. Siis jokaisen parittoman rivin alkukielisen sanan käännös on seuraavalla parillisella rivillä. Jos tiedostossa on pariton määrä rivejä, viimeisen rivin sana jätetään ottamatta huomioon. Saat olettaa, että kullakin rivillä on täsmälleen yksi sana. Tekstitiedoston nimi annetaan komentoriviparametrina. Jos alkukielinen sana ei ole yksikäsitteinen, viimeisin käännös jää voimaan. Koko tiedoston puuttumiseen ja muihin virhetilanteisiin on kuitenkin varauduttava.

    Muodostettuaan yllä kuvatulla tavalla itselleen sanakirjan ohjelma tarjoaa käännöspalvelun: Kun käyttäjä kirjoittaa sanan alkukielellä, ohjelma joko kertoo sanan käännöksen tai ilmoittaa, että kysytty alkukielinen sana oli tuntematon. Suunnittele ja toteuta itse ohjelman loppuminen.

    Jos haluat, voit käyttää (mutta ei ole pakko!) luokan Hashtable<K,V> ilmentymää tietorakenteena. Jos et käytä Hashtable<K,V>-oliota, voit olettaa, ettei tiedostossa ole enempää kuin 10000 sanaa. Jos käytät Hashtable<K,V>-rakennetta, seuraavasta API-kuvauksen osasta voi olla hyötyä:

                                                                                 (14 pistettä)
    

Onnea kokeeseen & Hauskaa Joulua!