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

Kirjoita jokaisen vastauspaperisi alkuun kurssin nimi ja kokeen päivämäärä sekä nimesi, henkilötunnuksesi ja allekirjoituksesi. Tässä kokeessa saa poikkeuksellisesti käyttää "lunttilappua". Sen koko saa olla enintään A4.
  1. Luokka Piste on määritelty:
    public class Piste {
      private static int lkm=0;
      private int x=0, y=0;
      private final int minä;
      public Piste(int x, int y) {
        this.x = x; this.y = y;
        ++lkm; minä=lkm;
      }
      public int kuka() {return minä;}
      public void aseta(int x, int y) {
        this.x = x; this.y = y;
      }
      public String toString() {
        return "("+ kuka() + ")(" + x+"," + y + ")";
      }
    } 
    
    Ohjelmoi tälle luokalle aliluokka VarillinenPiste, joka on kuin piste täydennettynä väriä esittävällä double-arvolla. VarillinenPiste-ilmentymiä luodaan konstruktoreilla: VarillinenPiste-oliolle on käytettävissä aksessorit:

    Ohjelmoi luokkaan VarillinenPiste vain ja ainoastaan tarpeelliset osat. Luokkaa Piste ei saa muuttaa.

                                                                                             (17 pistettä)
    
  2. Selitä ja vertaile lyhyesti mutta täsmällisesti seuraavia asioita:

    1. luokan lataaminen ja olion luonti
    2. luokkametodi ja ilmentymämetodi
    3. yliluokka ja aliluokka
    4. abstrakti luokka ja rajapintaluokka
                                                                                             (18 pistettä)
    

  3. Toteuta ohjelma EriSanoja tekstitiedoston sana-analyysiin. Aluksi ohjelma pyytää analysoitavan tiedoston nimen käyttäjältä. Ohjelman tehtävä on tulostaa kuvaruudulle kaikki tiedostossa esiintyneet erilaiset sanat aakkosjärjestyksessä. Kukin sana tulostetaan siis vain kerran. Ohjelman on varauduttava virheisiin ja käsiteltävä poikkeukset. Virheilmoitusten pitää olla selkeitä.

    "Sana" tarkoittaa tässä tehtävässä mitä tahansa merkkien jonoa, joka ei sisällä välilyöntiä tai rivinvaihtoa. "Aakkosjärjestykseksi" kelpuutetaan tässä tehtävässä String-luokan compareTo-aksessorin määrittelemä järjestys.

    Vihjeitä: Ratkaisussa saa (mutta ei ole pakko!) kayttää luokkaa Vector<E>. Jos et käytä Vector-oliota, voit olettaa, ettei erilaisia sanoja ole enempää kuin 10000. Jos käytät Vectoria, seuraavasta Vector<E>-luokan API-kuvauksen osasta voi olla hyötyä:

                                                                                             (17 pistettä)
    

Onnea kokeeseen ja hauskaa kesää!