TJT-L33 Olio-ohjelmointi, JY/TKTL, syksy 2002
4. demonstraatiotehtävät, viikko 43
Tehtävät 3-5: Suunnittele ja toteuta kuvatunlainen luokkajärjestelmä.
Kielenä voit käyttää C++:aa tai Javaa, tai pakon edessä jotain muuta oliokieltä.
Muista myös kuvata ratkaisusi UML:llä. Käsinpiirretykin kelpaa. :)
- Millaisia periytymissuhteita ja millaisia koostamissuhteita
määrittelisit seuraavien luokkien välille (moniperintä sallittua):
Auto,
Julkinen_kulkuneuvo,
Rautatievaunu,
Maakulkuneuvo,
Moottori,
Juna,
Soutuvene,
Kuljettaja,
Kulkuneuvo,
Linja_auto,
Ilmakulkuneuvo,
Veturi,
Polkupyörä,
Vesikulkuneuvo,
Yksityisauto,
Matkustaja,
Ihmisvoimainen_kulkuneuvo,
Moottorivene,
Ovi,
Yksityinen_kulkuneuvo,
Moottorikulkuneuvo,
Kuumailmapallo,
Autolautta? (Sakkinen 2001 - Olio-ohjelmointi)
- Määrittele (osittain: vain tärkeimmät atribuutit, ei rutiineja)
Auto
abstraktiksi luokaksi ja sille konkreetit aliluokat Henkiloauto ja
Kuorma_auto.
Määrittele myös ainakin jokin autonosaluokka niin, että sillä on aliluokkia
(ks. 4.3.1, s. 52). Esitä tästä syntyvä auto-olioiden osa- ja alioliorakenne.
(Sakkinen 2001 - Olio-ohjelmointi)
- Yhtiö Pehmo Öllerö on päättänyt tehdä tuotteillensa yhteisen sovelluskehyksen,
jossa kukin tuote toteutetaan yksittäisenä luokkana. Eri sovellusten,
eli sovellusluokkien instanssien, luominen halutaan hoitaa keskitetysti yhdestä
sovelluskehyksen luokasta. Tehtävänäsi on suunnitella ja toteuttaa sovellusten
luontiluokka. Esimerkkisovellusten ei tarvitse tehdä mitään mielekästä, mutta
niiden täytyy periytyä Pehmo Öllerön kantasovellusluokasta Sovellus.
Luokasta Sovellus tai sen aliluokista ei saa pystyä luomaan olioita
muuten, eli niiden rakentimet ovat yksityisiä tai suojattuja.
Vihje: Tee luokka, jonka tehtävänä on luoda Sovellus-luokan ja
Sovellus-luokan aliluokkien olioita.
- Yhtiö pääohjelmistoarkkitehti huomaa, ettei edellä tehdyn rakentajaluokan oliosta
saa olla kuin yksi esiintymä koko järjestelmässä. Muut ''esiintymät'' ovat vain
viitteitä tähän ensimmäiseen esiintymään. Miten muuttaisit rakentajaluokkaa
vaatimusten mukaiseksi?
Vihje: Tarvinnet luokkamuuttujia, eikä suojatuista tai yksityisistä rakentimistakaan
ole haittaa.
- Eräs sovelluksista valvoo toisten sovellusten tilaa. Kun tila muuttuu, tieto
tästä pitäisi välittyä automaattisesti valvovalle oliolle. Kuten yllä, suunnittele
ja toteuta esimerkki tällaisesta valvovasta luokasta, ja sen valvomista olioista.
Vihje: Jos huomaat suunnittelevasi viestintäprotokollaa, pidä hetki taukoa ja
aloita alusta. Pelkkä metodikutsu riittää ''protokollaksi''.
2002-10-21