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. :)

  1. 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)

  2. 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)

  3. 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.

  4. 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.

  5. 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