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):
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"); TuplaBasilisko ämmä = new TuplaBasilisko("Kaija"); TuplaBasilisko pentu1 = äijä.pariudu(ämmä); TuplaBasilisko pentu2 = ämmä.pariudu(äijä); System.out.println(äijä); // tulostus: (4): Kalle System.out.println(ämmä); // tulostus: (5): Kaija System.out.println(pentu1); // tulostus: (6): KalleKaija System.out.println(pentu2); // tulostus: (7): KaijaKalle TuplaBasilisko miniäTaiVävy = new TuplaBasilisko("Abcde"); TuplaBasilisko uusi = pentu1.pariudu(miniäTaiVävy); System.out.println(uusi); // tulostus: (9): KalleKaijaAbcde
(16 pistettä)
Entä miten L1:n ilmentymä tehdään, jos T1 on rajapintaluokka (interface)? Mihin ihmeeseen rajapintaluokkaa käytetään?
(20 pistettä)
public String lueRivi()Tiedoston loppuminen ilmaistaan null-arvolla.
Käytössäsi on myös tekstitiedostojen kirjoittamisen väline, luokka Tulostiedosto. Luokalla on konstruktori Tulostiedosto(String nimi). Parametrina annetaan tiedoston nimi. Rivejä kirjoitetaan ilmentymämetodilla
public void kirjoitaRivi(String rivi)
Poikkeuksiin on varauduttu näissä luokissa: Virheen sattuessa saadaan ilmoitus ja ohjelman suoritus keskeytyy.
Laadi ohjelma PoistaTyhjätRivit. Ohjelmalle annetaan komentoriviparametreina kaksi tiedoston nimeä. Ohjelma tekee ensimmäisestä tiedostosta sellaisen kopion, josta on poistettu kaikki tyhjät rivit. Tyhjiksi riveiksi tulkitaan nollan merkin mittaiset rivit ja pelkkiä välilyöntejä sisältävät rivit. Toinen komentoriviparametri on luotavan kopiotiedoston nimi.
Ohjelman ei siis tarvitse itse käsitellä poikkeuksia, tiedostonkäsittelyluokat pitävät niistä huolen.
(16 pistettä)