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

581325-0 Java-ohjelmointi, koe 17.12.2003/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. Selitä lyhyesti mutta täsmällisesti (koko vastauksen pitää mahtua yhdelle konseptipaperiarkille):

    1. rekursio
    2. abstrakti luokka
    3. rajapintaluokka
    4. polymorfismi
                                                               (12 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 viisialkioinen int-taulukko. Basiliskot lisääntyvät vain pariutumalla. Lapsen perimä määräytyy vanhempien perimästä kaavalla: lapsenPerimä[i] = (isänPerimä[i] + äidinPerimä[i])%17, kun i = 0, 1, 2, 3, 4.

    1. Mallinna basilisko luokkana Basilisko, jossa kaikki kentät ovat luonnollisesti private, ja jossa on julkiset välineet (konstruktori ja aksessorit):
      • public Basilisko(int[] perimä), jos taulukko on väärän kokoinen, perimäksi asetetaan talukko, jonka alkiot ovat kaikki arvoltaan 13.
      • public int[] mikäOnPerimä()
      • public Basilisko pariudu(Basilisko toinen)
      • public String toString(), tulostusasussa pitää näkyä yksilöllisyys ja perimä

    2. Flunssabasilisko on basiliskon erikoistapaus. Sillä on basiliskon ominaisuuksien lisäksi ominaisuudet flunssan nimi (String-arvo) ja tarttuvuus (double-arvo) Kun kaksi Flunssabasilisko-oliota pariutuu, niiden jälkeläinen saa nimekseen vahempien nimien katenaation (so. merkkijonot liitettynä toisiinsa). Lapsen tarttuvuudeksi tulee vanhempien tarttuvuuksien keskiarvo kerrottuna luvulla 17. Toteuta Flunssabasilisko Basiliskon aliluokkana. Suunnittele luokkaan järkevät konstruktorit ja aksessorit.
                                                                (15 pistettä)
    

  3. "Miksi ihmeessä tavallisen ohjelmoijan tarvitsisi tietää mitään luokkien lataamisesta ja olioiden luomisesta?", parahtaa ystäväsi kuunnellessaan tarinoitasi Java-ohjelmointi -kurssilta. Ystäväsi on suorittanut Ohjelmoinnin perusteet -kurssin ja hän on jopa moneen kertaan kirjoittanut ohjelmaansa sanan static, tosin syytä tajuamatta. Auta ystävääsi ymmärtämään, mitä kaikki tämä tarkoittaa ja miksi se on syytä ymmärtää. Laadi siis asiasta kirjallinen selitys (maksimipituus on 1 konseptiarkki). Muista että esimerkit auttavat oppimisessa. Vastauksen arvioinnissa otetaan huomioon selostuksen ajateltu lukija. Älä siis kirjoita tarkastajalle, joka jo tuntee asian, kirjoita tuolle ystävälle! Älä viittaa vastauksessasi muihin vastauksiin, koska kaikilla vastauksilla on eri tarkastaja.
                                                               (14 pistettä)
    
    
    

  4. Käytössäsi on tekstitiedostojen lukemiseen luokka Syottotiedosto. Luokalla on konstruktori Syottotiedosto(String nimi). Parametrina annetaan tiedoston nimi. Rivejä luetaan aksessorilla
      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 aksessorilla

      public void kirjoitaRivi(String rivi)
    

    Sekä molempien tiedostojen luonti että luku- ja kirjoitusoperaatiot voivat aiheuttaa poikkeuksen Exception.

    Laadi keskusteleva ohjelma KopioiJoulurivit, joka kysyy ensin kaksi tiedoston nimeä, syöttötiedoston ja tulostustiedoston. Sitten ohjelma tekee syöttötiedostosta kopion, jonne kopioidaan vain kaikki ne syöttötiedoston rivit, joilla esiintyi yksi tai useampi sanoista "joulu", "kuusi", "pukki" tai "puuro". Toinen kysytty nimi, tulostustiedosto, on siis luotavan kopiotiedoston nimi.

    Ohjelman KopioiJoulurivit pitää itse käsitellä järkevällä ja käyttäjäystävällisellä tavalla tiedostojen luomisen ja käytön mahdollisesti aiheuttamat Exception-poikkeukset.

                                                         (12 pistettä)
    
Onnea kokeeseen & Hauskaa Joulua!