581326-3 Java-ohjelmointi, koe 25.6.2003/AW (Avoin yliopisto)

Kirjoita jokaisen vastauspaperisi alkuun kurssin nimi ja kokeen päivämäärä sekä nimesi, henkilötunnuksesi ja allekirjoituksesi. Jokainen vastaus omalle arkilleen! Kokeessa saa käyttää A4-kokoista muistilappua, "lunttilappua".

  1. Kansanruno muodostuu yhdestä tai useammasta String-tekstirivistä. Jokaisella kansanrunolla on yksikäsitteinen koodinumero, joka ei koskaan voi muuttua, eikä millään muulla kansanrunolla voi koskaan olla samaa koodia. Kerran luodun kansanrunon sisältöä ei myöskään voi muuttaa.

    1. Ohjelmoi kansanrunon toteutukseksi luokka Kansanruno, jossa kaikki tietorakenteet ovat luonnollisestikin private, ja jossa on julkiset välineet (konstruktori ja aksessorit):
      • public Kansanruno(String[] rivit) luo Kansanruno-olion ja sen yksikäsitteisen koodinumeron
      • public int mikäOnKansanrunonKoodi()
      • public int mikäOnKansanrunonPituus(), so. rivien lukumäärä
      • public String mikäOnKansanrunonRivi(int i) palauttaa arvonaan kansanrunon rivin, jonka numero on i
      • public void tulostaKansanruno() tulostaa koko kansanrunon rivinumeroilla varustettuna

    2. KommentoituKansanruno on kuin Kansanruno, mutta tavallisesta kansanrunosta poiketen kommentoidun kansanrunon mihin tahansa tekstiriviin voi liittyä tekstikommentti. Jokaiseen riviin ei toki tarvitse liittyä kommenttia. Eikä välttämättä yhteenkään! Toteuta KommentoituKansanruno luokan Kansanruno aliluokkana. Ohjelmoi uudelleen vain tarvittavat osat:
      • public KommentoituKansanruno(String[] rivit) luo KommentoituKansanruno-olion, jossa mitään riviä ei vielä ole kommentoitu, parametrina annetaan runon teksti
      • public void liitäKommentti(String kommentti, int rivi) liittää annetun kommentin Kansanrunon annettuun riviin, mahdollinen vanha kommentti korvataan tällä uudella
      • public String mikäOnKommentti(int rivi) palauttaa arvonaan Kansanrunon i:nnen rivin kommentin (tai arvon null, jos riviin ei liity kommenttia)
      • public void tulostaKommentit() tulostaa rivinumeroin kaikki ei-tyhjät kommentit, so. kommenttiluettelon

    Huom: Muista varautua myös mahdollisiin virhetilanteisiin.

                                                         (18 pistettä)
    

  2. Eräs Java-ohjelmointia opiskeleva ystäväsi ei ole ihan täydellisesti ymmärtänyt, mitä tarkoitetaan aliluokalla, yliluokalla, abstraktilla luokalla ja rajapintaluokalla, eikä edes sitä, miksi niiden ymmärtäminen voisi olla tärkeää. Auta ystävääsi ja laadi hänelle asiasta kirjallinen selitys. Muista että esimerkit auttavat oppimisessa. Vastauksen arvioinnissa otetaan huomioon selostuksen ajateltu lukija. Älä siis kirjoita tarkastajalle, joka jo osaa asian, kirjoita tuolle ystävälle!
                                                         (17 pistettä)
    

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

    Syottotiedosto-olion luonti ja lueRivi()-metodin kutsu voivat aiheuttaa poikkeuksen Exception. Sen sijaan luokassa Tulostiedosto poikkeuksiin on varauduttu: Virheen sattuessa saadaan asianmukainen ilmoitus ja ohjelman suoritus keskeytyy.

    Laadi ohjelma PoistaTyhjatRivit. 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 PoistaTyhjatRivit pitää siis itse käsitellä syöttötiedoston mahdollisesti aiheuttamat poikkeukset. Tulostiedostoa voi käyttää huolettomammin: se pitää itse huolen poikkeuksista.

                                                         (17 pistettä)
    

Onnea kokeeseen ja hauskaa kesää!