(logo puuttuu) (logo:(c) Minna Majuri)
(c) Arto Wikla 1997, Helsingin yliopisto/ Tietojenkäsittelytieteen laitos

581253-6 Java(TM)-ohjelmointi loppukoe 15.8.1997

Kirjoita jokaisen vastauspaperisi alkuun kurssin nimi ja kokeen päivämäärä sekä nimesi, henkilötunnuksesi ja allekirjoituksesi. Jokainen tehtävä on 10 pisteen arvoinen.

  1. Selitä täsmällisen tiiviisti:
     
        staattinen alustuslohko (static initialization block)
        käännösyksikkö (compilation unit)
    

  2. Vertaile tiiviin täsmällisesti:
        olion luonti - luokan lataaminen
        rajapintaluokka (interface) - abstrakti luokka                
    

  3. Käytössäsi on luokka SyottoRiviTiedosto, jolla on konstruktori:
       SyottoRiviTiedosto(String tdsto)
    
    Konstruktori saa parametrina tiedostonimen. Luokka pitää huolen tilanteesta, jossa tiedostoa ei löydy (kaataa ohjelman!). Luokan käyttäjän ei siis tarvitse tähän varautua.

    SyottoRiviTiedosto-luokassa on metodi:

       public String  rivi() // syöttötiedoston seuraava rivi
    
    Metodi palauttaa arvon null, jos tiedosto on loppu.

    a) Laadi luokalle SyottoRiviTiedosto aliluokka Abc, joka täydentää yliluokkaansa ainakin metodein

    
        int joLuettu()     // jo luettujen rivien lukumäärä
    
        String viimeRivi() // viimeksi luettu rivi
    
        void siivoaRivi()  // korvaa kaikki viimeksi luetun rivin    
                           // kiroilumerkit '#', '@', '%', '&' 
                           // sensuurimerkillä '*'
    
      
    b) Ohjelmoi sovellus Sensuroi, joka luokkaa Abc käyttäen sensuroi tiedoston kaunokirja.txt. Sensuroitu versio tulostetaan standarditulostusvirtaan. Tekstin jälkeen tulostetaan myös ns. paheellisuusindeksi, joka on muutettujen rivien prosenttiosuus kaikista riveistä.

  4. Linkitetty lista on määritelty luokkana
        public class Lista {
          int tieto;
          Lista linkki;
        }
    
    Käytä tätä määrittelyä seuraavissa tehtävissä:

    a) Ohjelmoi metodi, joka luo linkitetyn listan n:stä peräkkäisestä kokonaisluvusta (ykkösestä alkaen). Metodi palauttaa arvonaan listan.

    b) Ohjelmoi metodi, joka palauttaa arvonaan parametrina saamansa listan pituuden.

  5. Luokassa L käytetään luokkaa X. Tuo X-niminen luokka voi olla pakkauksessa java.lang tarjolla oleva valmis työkalu, se voi olla L:n omassa pakkauksessa määritelty luokka ja se voi olla myös vieraassa pakkauksessa strange määritelty luokka.

    Miten luokkaa L muuttamatta X saadaan tarkoittamaan kutakin tapausta (3kpl)? Voidaanko L:ää muuttaen viitata jotenkin kaikkiin kolmeen tapaukseen?

    Pohdi asiaa import-ilmauksen käytön ja näkyvyydensäätelyn kannalta.

  6. Luokassa OyAb on metodit:
         int[] metodiA(int a)   {return new int[a];}
         String metodiB(char b) {return "**"+b+"**";}
         void metodiC(double c) {System.out.println(2*c);}
    
    Tee OyAb-luokalle jokin aliluokka, joka korvaa (override) metodiA:n, perii metodiB:n ja kuormittaa (overload) metodiC:n.