Helsingin yliopisto / Tietojenkäsittelytieteen laitos / 581325-0 Ohjelmoinnin perusteet
Copyright © 2007 Arto Wikla. Tämän oppimateriaalin käyttö on sallittu vain yksityishenkilöille opiskelutarkoituksissa. Materiaalin käyttö muihin tarkoituksiin, kuten kaupallisilla tai muilla kursseilla, on kielletty.

5. harjoitukset 1.-5.10.2007

Aiheita: ... ja lisää olioita ja kapselointia ...

  1. Laivalla on suunta 0...359 astetta ja nopeus 0.0...40.0 solmua. Toteuta laiva luokkana Laiva:

    Hyvän ohjelmointityylin mukaisesti laivan tietorakenteet piilotetaan käyttäjältä, joka siis pääsee vain aksessoreilla ohjaamaan laivaa. Miten virheellisiin parametrien arvoihin tulisi suhtautua? Varusta luokka tavalliseen tapaan toString()-metodilla, jotta laivan tilan tulostaminen on vaivatonta.

  2. Laadi edellisen tehtävän luokkaa käyttäen sovellus Kippari, jolla voi "ohjata laivaa". Laivaa ohjataan näppäimistöltä seuraavasti:

    Ohjelma tulostaa joka operaation jälkeen laivan tilan. Tässä tehtävässä ei tarvitse varautua numeeristen syötteiden ei-numeerisuuteen.

  3. Eräs viljavarastotyyppi muodostuu kahdesta viljasiilosta. Vain ensimmäinen siilo on varustettu lastauslaittein. Viljaa voidaan siirtää siilosta toiseen.

    Laadi luokka Viljavarasto viljavaraston toteutukseksi. Toteuta siilot Pikkuvarasto-olioina.

    Viljavaraston siilot on siis toteutettava Pikkuvarasto-olioina! Uusissa viljavarastoissa nimittäin siilot saatetaan toteuttaa uudella tekniikalla. Kun Viljavarasto on ohjelmoitu yksittäisen siilon sisäistä rakennetta tietämättä, uuteen siilotekniikkaan voidaan siirtyä ohjelmoimalla vain Pikkuvarasto-luokka uudelleen!

    Testaa luokka "testipääohjelmametodilla", so. luokkaan itseensä sijoitetulla public static void main(String[] args) -metodilla, joka luo ilmentymiä luokasta ja kokeilee operaatioiden toimintaa erilaisissa tilanteissa.

    Tässä tehtävässä viljavaraston siilot toteutettiin Pikkuvarasto-olioina. Näin siis jo käytössä olevaa valmista ohjelmakoodia ns. uudelleenkäytettiin. Pikkuvarasto-luokka ei ehkä kuitenkaan ole kaikkein tarkoituksenmukaisin tapa toteuttaa siiloja? Millainen luokka - nimeltään vaikkapa Siilo - olisi mielestäsi mahdollisimman käyttökelpoinen juuri tämän tehtävän ratkaisussa? Miten Viljavarasto-luokan toteutus muuttuisi?

  4. Kyselija on olio, "laite", joka helpottaa tietokilpailun kysymysten tekemistä ja vastausten analysointia. Sen "API" on seuraavanlainen:

    Käyttöesimerkki selventää konstruktorin ja aksessoreiden käyttöä:

      Kyselija kilpa = new Kyselija("Mitä on italian ", "suomeksi?");
    
      kilpa.samaistaIsotJaPienet(true);
      boolean oikein;
    
      oikein = kilpa.kysy("tutti", "kaikki");
      if (oikein) 
        System.out.println("Hienoa, hyvä alku!");
    
      // kuvaruudulla tapahtuu:
      //
      // Kone:     Mitä on italian "tutti" suomeksi?
      // Käyttäjä: Kaikki
      // Kone:     OIKEIN!
      // Kone:     Hienoa, hyvä alku!
    
      kilpa.kysy("ferro", "rauta"); // Arvon palauttavaa metodia voi
                                    // kutsua myös arvoa käyttämättä!
      // kuvaruudulla tapahtuu:
      //
      // Kone:     Mitä on italian "ferro" suomeksi?
      // Käyttäjä:              rAuTA
      // Kone:     OIKEIN!
    
      oikein = kilpa.kysy("matto", "hullu");
      if (!oikein)
        System.out.println("No mitäs nyt?");
    
      // kuvaruudulla tapahtuu:
      //
      // Kone:     Mitä on italian "matto" suomeksi?
      // Käyttäjä: matto
      // Kone:     VÄÄRIN! Oikea vastaus on "hullu".
      // Kone:     No mitäs nyt?
    
      System.out.println("Kysymyksiä oli " + kilpa.montakoKysymystä() +
                         ", oikeita vastauksia " + kilpa.montakoOikein() + ".");
    
      // kuvaruudulla tapahtuu:
      //
      // Kone:     Kysymyksiä oli 3, oikeita vastauksia 2.
    
      kilpa.kysy("madre", "äiti");
      kilpa.kysy("cavallo", "hevonen");
      kilpa.kysy("birra", "olut");
      // ... jne., jne...
    

    Ohjelmoi myös sovellus, joka havainnollistaa Kyselija-luokan käyttöä tietokilpailun toteuttamisessa. Voit tietenkin valita itseäsi kiinnostavan aihepiirin.


Takaisin harjoitussivulle.