Ohjelmistojen mallintaminen, kesä 2012, laskuharjoitus 5

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. Mistä vaiheista ohjelmistotuotantoprosessi koostuu? Mitä kunkin vaiheen aikana tapahtuu?

  2. Mitä tarkoitetaan vesiputousmallilla? Entä iteratiivisella ja ketterällä ohjelmistotuotantomenetelmillä? Mikä johti ketterien ja iteratiivisten menetelmien kehittämiseen?

  3. Miten UML liittyy kahdessa edellisessä tehtävässä käsiteltyihin aihealueisiin?

  4. Mallinna seuraavassa kuvattu tilanne luokkakaaviona. Tässä tehtävässä luokille ei tarvitse määritellä metodeja eikä attribuutteja. Yhteyksien kytkentärajoitteet ja tyypit sekä tarvittaessa myös nimet ja roolinimet on merkittävä tarkasti.

    Unix-tyyppisissä järjestelmissä "tiedostoja" ovat sekä normaalit tiedostot, hakemistot että ns. laitetiedostot. Laitetiedostoon liittyy jokin I/O-laite, esim. hiiri, näppäimistö tai näyttö. I/Olaitetta kohti on tasan yksi laitetiedosto. Normaali tiedosto on jono tavuja. Tietty tavu kuuluu vain yhteen tiedostoon. Hakemisto koostuu joukosta muita tiedostoja (jotka voivat siis olla normaaleja tiedostoja, hakemistoja tai laitetiedostoja). Tiedosto on kerrallaan vain yhdessä hakemistossa, mutta ei välttämättä koko aikaa samassa hakemistossa (oikeastihan Unixissa tiedosto voi olla yhtäaikaa useassa hakemistossa, me emme nyt kuitenkaan siitä välitä.).
    Unixissa on käyttäjiä ja käyttäjäryhmiä. Käyttäjä voi kuulua useampaan ryhmään ja ryhmässä voi olla useita käyttäjiä. Käyttäjät käyttävät I/O-laitteita. Jokaisella tiedostolla on omistajana tasan yksi käyttäjä. Käyttäjä voi omistaa useita tiedostoja. Tiedostoihin voi olla käyttöoikeuksia sekä käyttäjillä että ryhmillä. Sekä käyttäjällä että ryhmällä voi olla käyttöoikeuksia useisiin tiedostoihin. Oikeasti Unixeissa käyttöoikeudet jakautuvat luku-, kirjoitus- ja suoritusoikeuksiin, mutta tässä tehtävässä emme siitä välitä, vaan mallinnamme ainoastaan yhden tyyppisen käyttöoikeuden. Eli esim. käyttäjällä joko on tai ei ole käyttöoikeutta tiettyyn tiedostoon. Yhdellä tiedostolla voi olla useita käyttöoikeuden omaavia käyttäjiä ja ryhmiä

  5. Alla on katkelma Java-koodia. Piirrä sekvenssikaaviona tilanne, jossa kutsutaan (jostain koodin ulkopuolella olevasta metodista) ensin Machine-luokan konstruktoria ja sen jälkeen luodun Machine-olion drive()-metodia.

    public class Machine {
    private FuelTank tank;
    private Engine engine;

    public Machine() {
    tank = new FuelTank();
    tank.fill(40);
    engine = new Engine(tank);
    }

    void drive() {
    engine.start();
    boolean running = engine.isRunning();
    if { running } engine.useEnergy();
    }
    }

    class FuelTank {
    private int fuelContents;

    FuelTank() {
    fuelContents = 0;
    }

    void fill(int amount) {
    fuelContents = amount;
    }

    int contentsLeft() {
    return fuelContents;
    }

    void consume(int amount) {
    fuelContents = fuelContents - amount;
    }
    }

    class Engine {
    private FuelTank fuelTank;

    Engine(FuelTank tank) {
    fuelTank = tank;
    }

    void start() {
    fuelTank.consume(5);
    }

    boolean isRunning() {
    return fuelTank.contentsLeft() > 0;
    }

    void useEnergy() {
    fuelTank.consume(10);
    }
    }
  6. Laadi alla kuvatusta tietojärjestelmästä karkean tason käyttötapausmalli, eli etsi käyttäjät ja käyttötapaukset nimen tasolla. Määrittele kunkin käyttötapauksen tarkoitus lyhyesti (eli maksimissaan rivi per käyttötapaus) tekstinä. Piirrä myös käyttötapauskaavio.

    Aloittaessaan harjoitustyön opiskelija saa ohjaajan ja aiheen. Opiskelija tapaa ohjaajana toimivan opettajan kerran viikossa sovittuna aikana. Opiskelija voi valita ajan opettajan tarjolle laittamien aikojen joukosta. Sovittu aika voi vaihdella viikottain. Kussakin tapaamisessa kirjataan työhön siihen mennessä käytetty aika sekä työn etenemisen aste. Opettaja voi lisäksi kirjata kommentteja tapaamiseen liittyen. Kommentit ja kirjatut tiedot ovat vain opettajan luettavissa. Sekä opettaja että opiskelija näkevät järjestelmästä tapaamisaikavarauksensa.
    Opiskelija jättää harjoitustyöstä tarkastukseen yhden väliraportin ja loppuraportin, palautus tapahtuu järjestelmän välityksellä. Näistä kummastakin hän saa kirjallisen palautteen ja loppuraportista lisäksi arvosanan. Opiskelija saa palautteen järjestelmän kautta.

  7. Kuvaa yksi edellisen tehtävän käyttötapauksista tarkemmalla tasolla, ns. Cockburnin käyttötapauspohjan tai luentomonisteen tekstuaalisten käyttötapauskuvausten tyyliin.

  8. Laadi tehtävässä 6 annetun järjestelmän kuvauksen perusteella määrittelytason (eli kohdealueen) luokkakaavio. Metodeja luokille ei tässä vaiheessa laiteta. Yhteyksien tarkempi laatukaan (normaali, kompositio vai kooste ja navigointisuunnat) ei ole tässä tärkeää. Merkkaa kuitenkin kaikkiin yhteyksiin kytkentärajoitteet ja nimeä yhteydet ja yhteysroolit tarvittaessa. Ilmeisimmät attribuutit luokille kannattaa merkitä.

  9. Kaverillesi jäi termi kerrosarkkitehtuuri mieleen kurssin materiaalista, mutta hän ei oikein ymmärtänyt mihin se liittyy tai mitä hyötyä siitä on. Vastaa kaverisi kysymykseen"Mikä ihmeen kerrosarkkitehtuuri?" ja kerro kerrosarkkitehtuurin hyvistä ja huonoista puolista kun kaverisi jatkaa kysymyksellä "Miksi tämmöisiä tarvitsee miettiä, toi mun sovellus toimii ihan hyvin ilman mitään arkkitehtuuria!". Selvennä hänelle myös miten rajapinnat liittyvät kerrosarkkitehtuuriin.

  10. Kaverisi ei täysin ymmärtänyt luennolla esitettyä tarkkailijaperiaate-esimerkkiä (Observer). Kerro kaverillesi mistä siinä on kyse, ja missä tapauksissa sitä käytetään. Anna konkreettinen esimerkki.