Harjoitustehtävät ja ratkaisut viikolle 48 1. Tehtävä on jatkoa aiemmalle tehtävälle viikolta 42, missä piti suunnitella älykodin arkkitehtuuri käyttäen vain ennalta annettua joukkoa ratkaisuja. Tämäkin tehtävä liittyy TTY:n tutkimusprojektiin. Halutessasi voit tarkistaa yksityiskohtia (esim. ratkaisujen esitystavasta) viikon 42 tehtäväpaperista, mutta tehtävä on ajateltu ratkaistavan tässä annetun informaation perusteella. Järjestelmän vaatimukset oli kuvattu seuraavasti: Älykotijärjestelmä hallinnoi viittä erilaista kotiin liittyvää järjestelmää: kahvikonetta, käyttäjärekisteriä, verhoja, lämpötilan säätelyä ja musiikkijärjestelmää. Yleisesti järjestelmän halutaan olevan muunneltava, suorituskykyinen sekä arkkitehtuuriltaan yksinkertainen. Lisäksi 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. Alla on annettu neljä arkkitehtuurimallia (merkitty A, B, C, D), joiden kaikkien oletetaan täyttävän toiminnalliset vaatimukset mutta eroavan mahdollisesti laadullisten vaatimusten osalta. Tehtävänä on asettaa nämä oman käsityksesi mukaan paremmuusjärjestykseen, ensin paras, sitten toiseksi paras jne. Perustele vastauksesi lyhyesti.
A
B
C
D 2. Oletetaan, että on olemassa Java-sovelluskehys, jonka avulla voidaan toteuttaa ekosysteemien simulointiohjelmia, missä tutkitaan erilaisten eläinpopulaatioiden käyttäytymistä. Maailma ja siinä olevat eläimet visualisoidaan sopivalla tavalla näytölle. Simulaatiossa eläimet liikkuvat, syövät toisiaan ja maailmassa olevaa muuta ravintoa, tappelevat, lisääntyvät ja kuolevat. Kehyksen käyttämisen helpottamiseksi sille päätetään tehdä DSL-tuki, so. oma sovellussuuntaunut kieli, jolla kirjoitetusta kuvauksesta voidaan generoida kehyksen päälle tarvittava sovelluskohtainen koodi. Mieti millainen tämä kieli voisi olla, ja anna sillä kirjoitettu mahdollinen esimerkkikuvaus. Kielellä on pystyttävä mm. kuvaamaan, mitä eläimet syövät, mitä tapahtuu eläimen painolle ja energiatasolle, kun se ruokailee, millaisia vuorovaikutustapoja sillä on jne. Kielen koko määrittelyä ei tarvitse täsmällisesti antaa. Millaisia laillisuustarkistuksia generaattori voisi tehdä kuvaukselle? Mitä etuja/haittoja tällaisen kuvauskielen käytöstä on verrattuna siihen, että sovelluskohtainen koodi annettaisiin suoraan Javalla. Ko. kehyksen mahdollinen (yksinkertaistettu) malli löytyy luentokalvoista (Kehykset).
3. Aktiivinen teksti tarkoittaa tekstiä, joka sisältää paitsi merkkijonoja myös erilaisia aktiivisia komponentteja; so. komponentteja, jotka reagoivat hiiren klikkaukseen erilaisin tavoin ja joilla on oma ulkoasunsa näytöllä. Aktiivista tekstiä voidaan käyttää esimerkiksi kehittyneiden tekstikäyttöliittymien ja hypertekstijärjestelmien toteutukseen. Aktiivisen tekstin komponentit (mm. merkkijonot ja aktiiviset tekstialkiot) sijaitsevat teksti-ikkunan näytöllä riveillä, joiden keskinäinen etäisyys on sama kuin rivin korkein alkio (aktiiviset tekstialkiot voivat olla eri korkuisia). Suunnittele pieni kehys, joka toteuttaa aktiivisen tekstin käsitteen antamalla käyttöön luokan, joka edustaa aktiivista tekstiä. Erikoista kehys määrittelemällä merkkijonokomponentin lisäksi painonappikomponentti, so. komponentti, jonka ulkoasu on painonappi ja joka reagoi hiiren klikkaukseen näyttämällä uudessa ikkunassa painonappia edeltävään sanaan liittyvän selityksen. Sanojen selitykset on talletettu edeltä käsin sopivaan sanakirjaan. Esitä kehyksen ja sen yllä kuvatun erikoistuksen arkkitehtuuri UML:n luokkakaaviona. Mitä luennolla esitettyä kehystyyppiä (muunneltava, koottava jne.) kehys on? 4-5. Anna Javalla sovellus (toimiva ja testattu koodi), joka tunnistaa eläimien ääniä: kun sovellukselle annetaan esimerkiksi merkkijono "hauhau", se vastaa ilmoittamalla eläimen nimen ("koira"). Oletetaan, että kukin eläinlaji kuvataan omalla aliluokallaan, joka ilmaisee eläimen käyttäytymisen, mukaan lukien sen ääntä kuvaavan merkkijonon, jonka palauttaa operaatio getsound(). Eläinaliluokalla (ja sen yliluokalla) voi tämän lisäksi olla muita operaatioita, joilla ei ole tässä merkitystä. Pyri sellaiseen arkkitehtuuriin, jossa sovelluksessa tarvittavat muutokset ovat mahdollisimman pieniä, kun uusi eläinaliluokka lisätään siihen. Onko mahdollista tehdä ratkaisua, jossa uusia eläinaliluokkia voidaan lisätä tulevaisuudessa ilman, että olemassa olevaan sovelluskoodiin tarvitsee lainkaan kajota?