Harjoitustehtävät viikolle 42 1. Suunnittele pieni työkaluohjelma, joka laskee keskiarvon lukujoukosta. Käyttöliittymä koostuu perusikkunan lisäksi yhdestä valikosta, jossa on kaksi komentoa: Start (aloita lukusekvenssi) tuottaa dialogi-ikkunan, jossa käyttäjä voi antaa uusia lukuja (OK ja Cancel napeilla), ja Stop, joka tyhjää luvut ja asettaa työkalun alkutilaan. Toistaiseksi annettujen lukujen keskiarvo näkyy aina tekstikentässä ikkunan yläpalkissa. Suunnittele ohjelma MVC-arkkitehtuurityylin mukaisesti, ja anna sille luokkakaavio (luokat + rajapinnat operaatioineen). Merkkaa kaavioon, mitkä osat vastaavat mallia (Model), mitkä näkymää (View), ja mitkä ohjainta (Controller). Anna myös sekvenssikaavio, joka kuvaa tyypillistä käyttötilannetta. 2. Tarkastellaan tulevaisuuden kotirobotin ohjausjärjestelmää. Robotti on ihmisen näköinen laite, joka pystyy suorittamaan fyysisesti vaativia tehtäviä. Robottiin kuuluu keskuskontrolli sekä useita erityistarkoituksiin olevia ohjausyksiköitä, kuten tasapainon ylläpito, raajojen ohjaus, audiovisuaalinen havainnointi. Lisäksi järjestelmään kuuluu lukuisia sensoreita (lämpötila, kosketus, haju ym.) sekä motoriikan ajureita. Robotille on esiohjelmoituna useita erilaisia työtehtäviä, jotka aktivoidaan sopivilla komennoilla. Mitä luennolla esitettyjä sulautettujen ohjausjärjestelmien suunnittelumalleja soveltaisit tämän järjestelmän ohjelmistoarkkitehtuurin suunnittelussa, mihin tarkoitukseen ja miksi? 3. Tämä tehtävä liittyy TTY:llä käynnissä olevaan tutkimusprojektiin, jossa verrataan käsin tehtyjä ja automaattisesti tuotettuja arkkitehtuurikuvauksia. Tehtävän asetus on tästä syystä pitkähkö, mutta itse tehtävä ei ole välttämättä vaikea. Tehtävä katsotaan kolmen tehtävän arvoiseksi viikkoharjoituspisteytyksessä. TTY:n opiskelijoiden toivotaan tekevän tehtävän MagicDrawlla, joka on TTY:n opiskelijoiden saatavilla oleva piirtotyökalu, täydentämällä tehtävänannossa olevaa kaaviota annetun ohjeen mukaisesti. Kaaviotiedosto löytyy kurssin viikkoharjoitussivuilta. Jos MD:tä ei ole mahdollista käyttää, voi tehtävän tehdä jollakin muulla työkalulla tai käsin, mutta tällöin joutuu vastaukseen kopioimaan annettua oliomallia. Tehtävän määrittely Älykotijärjestelmä hallinnoi viittä erilaista kotiin liittyvää järjestelmää: kahvikonetta, käyttäjärekisteriä, verhoja, lämpötilan säätelyä ja musiikkijärjestelmää. Olioanalyysin avulla on saatu järjestelmälle kuvassa 1 annettu oliomalli luokkakaaviona. Tätä oliomallia on tarkoitus käyttää varsinaisen arkkitehtuurisuunnittelun lähtökohtana. Operaatioista tiedetään niiden tarvitsemien parametrien arvioitu koko sekä niiden arvioitu käyttöfrekvenssi. Operaatiot on kummankin ominaisuuden osalta jaettu kolmeen luokkaan: Low (L), Medium (M), High(H). Mikäli vähintään toinen operaatioon liittyvistä arvioista kuuluu luokkaan High, on arvoluokat merkattu oliomalliin operaation perään (parametrin koko, käyttöfrekvenssi). Esimerkiksi vastuulla registryadmin (M, H) on keskimääräinen parametrien koko, mutta käyttöfrekvenssi on huomattavan suuri. Lisäksi Taulukko 1 esittää yksittäisten operaatioiden väliset riippuvuudet. Operaatiot on jaoteltu luokittain, ja notaatio a -> b tarkoittaa, että operaatio a käyttää operaatiota b. Mikäli b on eri luokassa kuin a, on b:n luokka merkitty erikseen: b(c) tarkoittaa, että b kuuluu luokkaan C. Taulukko voi antaa joissakin tapauksissa informaatiota arkkitehtuuriratkaisujen tueksi. Erityisiä laatuvaatimuksia Erityisten muunneltavuusvaatimusten selvittämiseksi eri osapuolia on haastateltu. Kyseisen sovellusalan asiantuntijoiden mukaan on erittäin todennäköistä, että tapa, jolla verhojen sijainti lasketaan, halutaan vaihtaa. Myös vaihtoehtoisen esitystavan lisääminen musiikkilistan näyttämiseen on todennäköisesti edessä. On myös hyvin mahdollista, että halutaan lisätä toinen tapa mitata auringonvaloa. Kahvikoneen tilan näyttäminen halutaan melko varmasti toteuttaa toisin; toinen, mutta hieman epätodennäköisempi vaihtoehto on, että kaksi eri toteutusta ovat rinnakkain. Pieni mahdollisuus on, että kaiuttimen valinta halutaan toteuttaa toisin. Melko
epätodennäköistä, mutta kuitenkin mahdollista on myös, että käyttäjärekisterin asettaminen, sekä vedenkulkuun liittyvät toiminnot korvataan täysin toisilla operaatioilla. Käyttäjät puolestaan haluavat ennen kaikkea, että musiikkilistan esitystapa ja verhonsijainnin laskenta ovat vaihdettavissa. Lähes yhtä tärkeää on, että huoneen lämpötilan laskentaan ja musiikkilistan hallinnointiin voidaan vaikuttaa. Mahdollisuus vaikuttaa kahvin laadun ja määrän valintatapaan olisi hienoa, mutta todennäköisesti näille muutoksille ei ole suurta tarvetta. Tehtävä Tehtävänä on näiden esitietojen perusteella suunnitella arkkitehtuuri annetulle älykotijärjestelmälle täydentämällä oliomallia tietyillä arkkitehtuuriratkaisuilla. Ratkaisuina on kuitenkin käytettävissä ainoastaan seuraavat: viestinvälitystyyli, asiakas-palvelintyyli, Strategia, Sovitin (Adapter), Metodirunko (Template Method), Fasaadi (Facade) ja Välittäjä (Mediator). Mitä hyvänsä näistä voi olla käyttämättä tai käyttää yhden tai useamman kerran. Rajapintojen suunnittelua ei tarvitse huomioida; oletetaan, että se tehdään erikseen jollakin järkevällä tavalla. Arkkitehtuurin laatua arvioitaessa tulee kiinnittää yleisesti huomiota muunneltavuuteen, suorituskykyyn sekä yksinkertaisuuteen (ts. arkkitehtuurista ei saisi tulla kovin monimutkainen). Ratkaisun antamistapa on kuvattu tarkemmin alla. Alla on annettu oliomalli luokkakaaviona.
Taulukko 1. Operaatioiden käyttöriippuvuudet UserInterface provideui -> activateuserinregistry (UserRegistry) provideui -> changepassword(userregistry) provideui -> removeuserfromregistry (User Registry) provideui -> setuserregistry (User Registry) provideui -> changetemperaturetocelsius (TemperatureRegulation) provideui -> setroomtemperature (TemperatureRegulation) provideui -> playchosenmusic (MusicFiles) provideui -> stopmusicplay (MusicFiles) provideui -> rundrapemotor (DrapeDriver) provideui -> stopdrapemotor (DrapeDriver) provideui -> choosecoffeequality (CoffeeMachine) provideui -> choosecoffeeamount (CoffeeMachine) provideui -> startcoffeemachine (CoffeeMachine) provideui -> stopcoffeemachine (CoffeeMachine) UserManagement registryadmin -> passwordcheck registryadmin -> userdb changepassword -> passwordcheck changepassword -> userdb activateuserinregistry -> registryadmin activateuserinregistry -> addusertoregistry activateuserinregistry -> userdb addusertoregistry -> registryadmin addusertoregistry -> userdb setuserregistry -> registryadmin setuserregistry -> userdb removeuserfromregistry -> registryadmin removeuserfromregistry -> userdb passwordcheck -> userdb CoffeeMachine showcoffeemachinestatus -> coffeestate choosecoffeequality -> calculatecoffeewateramount choosecoffeequality -> coffeestate choosecoffeeamount -> calculatecoffeewateramount choosecoffeeamount ->coffeestate calculatecoffeewateramount -> setcoffee calculatecoffeewateramount -> setwater setcoffee -> addcoffeeportion setcoffee -> showcoffeemachinestatus setcoffee -> coffeestate setwater -> measurewateramount (WaterControl) setwater -> showcoffeemachinestatus setwater -> coffeestate addcoffeeportion -> coffeestate startcoffeemachine -> setcoffeemachinewarm startcoffeemachine -> showcoffeemachinestatus setcoffeemachinewarm -> coffeestate stopcoffeemachin -> ringbuzzer stopcoffeemachine -> coffeestate ringbuzzer -> coffeestate
WaterControl measurewateramount -> openwater measurewateramout -> closewater openwater -> waterstate closewater -> waterstate Drape Driver rundrapemotor -> calculateoptimaldrape (DrapeRegulation) rundrapemotor -> drapemotorstate stopdrapemotor -> calculateoptimaldrape (Drape Regulation) stopdrapemotor -> drapemotorstate Drape Regulation calculateoptimaldrape -> measuresun calculateoptimaldrape -> measuredrapeposition measuresun -> drapestate measuredrapeposition -> drapestate showdrapeposition -> measuredrapeposition showdrapeposition -> drapestate Temperature Regulation setroomtemperature -> measureroomtemperature setroomtemperature -> setheateron (HeaterDriver) setroomtemperature -> setheateroff (HeaterDriver) setroomtemperature -> temperaturestate measuretemperature -> temperaturestate changetemperaturetocelsius -> measureroomtemperature HeaterDriver setheateron -> heaterstate setheateroff -> heaterstate Music System adminmusiclist -> adminmusicfile (MusicFiles) adminmusiclist -> musicinfo showmusiclist -> adminmusiclist showmusiclist -> musicinfo pickmusic -> showmusiclist pickmusic -> musicinfo musictospeakers -> choosespeaker (SpeakerDriver) musictospeakers -> musicinfo MusicFiles adminmusicfiles -> musicdb playchosenmusic -> adminmusicfile playchosenmusic -> musictospeakers (MusicSystem) playchosenmusic -> pickmusic (MusicSystem) playchosenmusic -> musicdb stopmusicplay -> adminmusicfile SpeakerDriver choosespeaker -> speakerstate MainController
controller -> registryadmin (UserRegistry) controller -> setroomtemperature (TemperatureRegulation) controller -> adminmusiclist (MusicSystem) controller -> showdrapeposition (DrapeRegulation) controller -> showcoffeemachinestatus (CoffeeMachine) Tehtävän ratkaisun antaminen Tehtävän ratkaisu annetaan muuttamalla alkuperäistä annettua luokkakaaviota lisäämällä siihen arkkitehtuuriratkaisut alla ohjeistetussa muodossa. Jos mahdollista, käytä MagicDrawta. Lisää lopuksi kaavioon sopivalla tavalla (esim. kommenttilaatikko) tieto siitä, kuinka paljon aikaa likimain (n. 10min tarkkuudella) käytit tehtävään. Tämän esitystavan tarkoituksena on ilmaista ko. ratkaisu ja mihin se kohdistuu, mutta ei ratkaisun yksityiskohtia. Sovitin Viestinvälitysarkkitehtuuri
Fasaadi Välittäjä
Asiakas-palvelin arkkitehtuuri Strategia Template Method