Ohjelmistojen mallintaminen, kesä 2012, laskuharjoitus 3

Kaikissa tehtävissä ei ole yhtä oikeaa vastausta -- tärkeää on pohdinta ja yrittäminen. Jos et ole käyttänyt Javaa, voit ohjelmoida tehtäviin vastauksia myös muilla kielillä. Jos ohjelmointitaitosi ovat ruosteessa, harjoittelu on tie onneen. Jos et saa ohjelmiasi toimimaan, voit myös kuvailla sanallisesti niiden toiminnan.

Tarkoitus on, että teet tehtävät etukäteen ennen laskuharjoitustilaisuutta.

  1. Mitä on olio-ohjelmointi? Miten uudelleenkäytettävyys ja ylläpidettävyys liittyy olio-ohjelmointiin?

  2. Viime viikon laskareissa käytiin läpi LAL-yritystä ja sen tietojärjestelmään liittyviä käyttötapauksia. Kuvaa kaksi LAL-järjestelmään liittyvää käyttötapausta tarkemmassa muodossa. Käytä käyttötapauspohjana luentomonisteen sivulla 14 olevaa esimerkkiä.

  3. Seuraavassa on lueteltu joukko käsitteitä, jotka ovat jossain suhteessa keskenään. Mitä suhdetyyppiä (normaali yhteys, kompositio, perintä, riippuvuus, ...) kussakin tapauksessa kannattaa käyttää. Piirrä esim. pieni luokkakaavio jokaisesta tilanteesta:

  4. Tietojenkäsittelytieteen laitoksella toimii useita henkilöitä erilaisissa tehtävissä.  Tehtäviä on muunmuassa Ylläpitäjä, Suunnittelija, Opettaja, Ohjaaja, Johtaja ja Opiskelija. Miten kuvaisit henkilöitä luokkakaaviona?  Luentomonisteen kappaleet 3.6 ja 3.7 lienevät tässä hyödyllisiä.

  5. Alla on annettu pieni huoneistojen lämpötilojen hallintaa simuloiva Java-ohjelma ilman pääohjelmaluokkaa.  Takaisinmallinna ohjelmakoodi UML:n luokkakaavioksi.
    class Room {
    private int temperature = 0;

    int getTemperature() { return temperature; }

    void addTemperature(int t) { temperature = temperature + t; }
    }

    class Thermostat {
    private Sensor sensor;
    private Heater heaterA;
    private Heater heaterB;

    Thermostat(Room r) {
    sensor = new Sensor(r);
    heaterA = new Heater(r);
    heaterB = new Heater(r);
    }

    void stabilizeAt(int degrees) {
    int measured = sensor.getReading();

    while ( measured < degrees ) {
    heaterA.heatTheRoom();
    heaterB.heatTheRoom();
    measured = sensor.getReading();
    }
    }
    }

    class Sensor {
    private Room room;

    Sensor(Room r) { room = r; }

    int getReading() { return room.getTemperature(); }
    }

    class Heater {
    private Room room;

    Heater(Room r) { room = r; }

    void heatTheRoom() { room.addTemperature(5); }
    }
  6. Oletetaan että ylläolevaan koodiin liittyy seuraava pääohjelma. 
    public class Simulator {
    public static void main(String[] args) {
    Room r = new Room();
    Thermostat t = new Thermostat(r));
    t.stabilizeAt(20);
    }
    }
    Kuvaa pääohjelman toiminta sekvenssiokaaviona.  Esimerkkikuva olioiden luomisesta löytyy luentomonisteen sivulta 62.

  7. Ensimmäisen ja toisen viikon harjoituksissa on nähty Matkakortteihin liittyvä järjestelmä.  Oletetaan että tehtävään liittyy seuraava pääohjelma.
    public class Main {
    public static void main(String[] args) {
    Paivamaara paiva = new Paivamaara(23,11);
    Lataajalaite rautatietori = new Lataajalaite( paiva );
    Lukijalaite ratikka6 = new Lukijalaite( paiva );
    Lukijalaite bussi244 = new Lukijalaite( paiva );

    Kioski lippuLuukku = new Kioski();

    Matkakortti artonKortti = lippuLuukku.ostaMatkakortti("Arto");
    Matkakortti matinKortti = lippuLuukku.ostaMatkakortti("Matti");

    rautatietori.lataaArvoa(artonKortti, 3);

    boolean onnistuiko = ratikka6.ostaLippu(artonKortti, 0);
    onnistuiko = bussi244.ostaLippu(artonKortti, 2);

    onnistuiko = ratikka6.onkoVoimassa(matinKortti);
    }
    }
    Kuvaa tapahtumat sekvenssikaaviona. Ota mukaan myös luokkien luominen ja luokkien sisäinen toiminta. Jos yhteen kaavioon uhkaa tulla liikaa tavaraa, jaa kaavio useampaan osaan.

  8. Alla on tilakaavio, jonka on tarkoitus viestittää jotakin. Sinun ei tarvitse tietää tilakaavioista vielä mitään. Miten ymmärrät alla olevan kaavion?

    8

  9. Kuvaa seuraavassa tekstissä olevat tapahtumat ylläolevasta kuvasta ymmärtämälläsi merkintätavalla.

    "Matti astuu kauppaan.  Kaupassa Matti valitsee tuotteita kunnes kauppakori on täynnä. Kun kauppakori on täynnä, matti menee kassalle.  Jos Matilla on varaa maksaa ostokset, hän saa tavarat mukaan ja poistuu.  Jos ostosten maksamiseen ei ole varaa, hän ei saa tavaroita mukaan ja joutuu poistumaan."