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

581325-0 Java-ohjelmointi, koe 18.12.2001/AW

Kirjoita jokaisen vastauspaperisi alkuun kurssin nimi ja kokeen päivämäärä sekä nimesi, henkilötunnuksesi ja allekirjoituksesi. Kirjoita jokainen vastaus omalle konseptiarkilleen!

  1. "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ä)
    

  2. 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) ...

    1. Mallinna basilisko luokkana Basilisko, jossa kaikki kentät ovat luonnollisesti private, ja jossa on julkiset välineet (konstruktori ja aksessorit):
      • public Basilisko(String perimä)
      • public String mikäOnPerimä()
      • public Basilisko pariudu(Basilisko toinen)
      • public String toString(), tulostusasu on muotoa: (yksilöllisyys): perimä, ks. esim.

    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.

    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
    
        TuplaBasilisko äijä  = new TuplaBasilisko("Kalle"); // numero 4
        TuplaBasilisko ämmä  = new TuplaBasilisko("Kaija"); // numero 5
        TuplaBasilisko pentu = ämmä.pariudu(äijä);
        System.out.println(pentu); // tulostus: (6): KaijaKalle
                                                                (14 pistettä)
    

  3. Erään luokan konstruktorin otsake on: public Otus(Sisuskalu parametri) .
    Miten saat luotua ilmentymän luokasta Otus, kun Sisuskalu on
      a)  public abstract class Sisuskalu {
            public void teeSitäsunTätä();
          }
      b)  public interface Sisuskalu {
            public void teeSitäsunTätä();
          }
                                                                (10 pistettä)
    

  4. Käytössäsi on tekstitiedostojen lukemiseen luokka Syottotiedosto. Luokalla on konstruktori Syottotiedosto(String nimi). Parametrina annetaan tiedoston nimi. Rivejä luetaan ilmentymämetodilla public String lueRivi(). Kun tiedosto on loppunut, metodi palauttaa null-arvon. Poikkeuksiin ei ole varauduttu tässä luokassa! Konstruktorin ja aksessorin kutsuja joutuu siis itse käsittelemään poikkeukset.

    Huom: Luokka Syottotiedosto siis on käytettävissä, älä ihmeessä sitä enää ohjelmoi!

                                                                (14 pistettä)
    
Onnea kokeeseen & Hauskaa Joulua!