Helsingin yliopisto / Tietojenkäsittelytieteen laitos / 581325-0 Ohjelmoinnin perusteet
Copyright © 2006 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.

4. harjoitukset 25.-29.9.2006

Aiheita: ... ja lisää metodeita, ensimmäiset omat oliot ...

  1. Tehtävässä 11 laadittiin ohjelma "joulukuusien" tulostamiseen. Koska joulu on noin kolmen kuukauden päästä ja pian joulukuusia tarvitaan todella paljon, toteuta joulukuusen tulostaminen yksityisenä luokkametodina
    private static void tulostaJoulukuusi(int korkeus)
    Tee tätä metodia käyttäen ohjelma, joka osaa yhdellä suorituskerralla tulostaa useampia joulukuusia. Koska ohjelma on tarkoitettu tavalliselle käyttäjälle, niin sanotulle "loppukäyttäjälle", myös virheellisiin syötteisiin on varauduttava. Miten virhetilanteet (sopimaton korkeus, kelvoton luku) hoidetaan? Onko parempi, että pääohjelma havaitsee ja ilmoittaa virheen? Vai olisiko se aliohjelman tehtävä? Keksitkö perusteita molemmille vaihtoehdoille?

  2. Ohjelmoi double-arvon palauttava metodi potenssiin, jonka arvona on double-parametri korotettuna int-parametrin ilmoittamaan potenssiin. Myös negatiiviset potenssit ovat mahdollisia. Sovitaan, että tässä tehtävässä mikä tahansa arvo (myös nolla!) potenssiin nolla on yksi. (Muistutus: Negatiiviset potenssit ovat positiivisten käänteislukuja, esim. potenssi(10.0, -1) on 1/10.0, potenssi(10.0, -2) on 1/100.0, jne., )

    Suunnittele ja toteuta myös pääohjelma, joka tarjoaa käyttäjälle "potenssien laskentapalvelun".

  3. Yksinkertaisessa radiossa on vain kolme säädintä: päälle/pois-kytkin, voimakkuuden säädin (arvot 0, 1, ..., 9) ja kuunneltavan kanavan valinta (2300.0, ..., 26100.0).

    Mallinna radio luokkana Radio. Säätimet toteutetaan metodeina, eli ns. aksessoreina. Luokassa on oltava myös aksessorit, joilla radion tilaa voi tutkia. Tietorakenteet (muuttujat) pidetään tietenkin Radio-olion käyttäjältä piilossa. Niihin pääsee siis käsiksi vain säädellysti aksessoreja käyttäen. Miten virheelliset käyttöyritykset hoidetaan? Miten metodit siis toimivat, jos annetaan virheellinen voimakkuus tai kanava?

    Testaa Radio-luokkaa laatimalla pääohjelma, joka "käyttää radioita". Tässä tehtävässä ei tarvitse varautua ei-numeerisiin syötteisiin. Itse asiassa syötteitä ei välttämättä tarvita lainkaan.

    "Mallinnus" tässä tarkoittaa vain sitä, että säätimiä voi säätää ja niiden arvoja tutkia aksessorimetodeilla Ohjelman kytkeminen todellisen radion käyttöliittymäksi olisi ihan toinen juttu... Käytä kurssimateriaalin esimerkkiä Kuulaskuri ratkaisusi mallina.

  4. Sekuntilaskuri tuntee sekunnit, minuutit ja tunteja vuorokauden verran. Laskuri voi vain edetä. Kun sekunnit ylittävät arvon 59 yhdellä, minuutit kasvavat ja sekunnit nollataan. Kun minuutit ylittävät arvon 59 yhdellä, tunnit kasvavat ja minuutit nollataan. Kun laskuri ylittää arvon 23:59:59 (23 tuntia, 59 minuuttia, 59 sekuntia), aloitetaan uudelleen arvosta 0:0:0. Laskuri siis laskee: 0:0:0, 0:0:1, ..., 0:0:59, 0:1:0, 0:1:1, 0:1:2, ..., 0:59:57, 0:59:58, 0:59:59, 1:0:0, 1:0:1,..., 23:59:58, 23:59:59, 0:0:0

    Toteuta luokka Sekuntilaskuri

    Varusta luokka metodilla toString(), jonka ansiosta olion arvo saadaan tulostettua muodossa tunnit:minuutit:sekunnit, siis esimerkiksi "14:7:53".

    Laadi erillinen pääohjelmaluokka Sekuntilaskuri-luokan "testaamiseen". Tässä pääohjelmassa ei tarvitse varautua virheellisiin syötteisiin. Itse asiassa syötteitä ei välttämättä tarvita lainkaan.

  5. Lämpötilan maksimin ja minimin rekisteröintiin käytetään laitetta MinMax. Laitteelle syötetään lämpötiloja ja siltä voidaan milloin tahansa kysyä toistaiseksi korkeinta ja toistaiseksi matalinta lämpötilaa. Kun laite otetaan käyttöön, se on alkutilassa, ja mittareiden näytöllä ei ole merkitystä. Heti ensimmäisen mittaustuloksen jälkeen laite antaa järkeviä tuloksia. Laite voidaan myös myöhemmin asettaa alkutilaan uuden mittaussarjan rekisteröintiä varten. Laitteelta voidaan kysyä, onko se alkutilassa vai voiko sen ilmoittamiin lämpötiloihin luottaa.

    Toteuta laite luokkana MinMax, jolla on konstruktorin lisäksi seuraavat aksessorit:

    Laadi luokkaan myös pääohjelmametodi, joka havainnollistaa ja testaa luokan toimintaa. Tässä tehtävässä ei tarvitse varautua ei-numeerisiin syötteisiin. Itse asiassa syötteitä ei välttämättä tarvita lainkaan.

    Huomaa ettei laitteen alkutilaa voi päätellä esimerkiksi siitä, että minimi ja maksimi olisivat nollassa. Onhan nimittäin mahdollista, että pitkälläkin mittausjaksolla lämpötila pysyttelee sitkeästi nollassa ja suurin ja pienin mitattu lämpötila todella on 0o C! Totuusarvoinen yksityinen kenttä voisi olla hyvä idea alkutilassa olon tietämiseen...


Takaisin harjoitussivulle.