Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

Slides by Roope Raisamo

Samankaltaiset esitykset


Esitys aiheesta: "Slides by Roope Raisamo"— Esityksen transkriptio:

1 Slides by Roope Raisamo
Oliosuunnittelu Slides by Roope Raisamo

2 Yksityiskohtainen suunnittelu
Yksityiskohtaisessa suunnittelussa kunkin osan toteutus suunnitellaan tarkemmin. Vältetään sitoutumista tiettyyn toteutuskieleen. Rakennetta kuvataan luokkakaavioilla lähtökohtana analyysivaiheen luokkakaaviot tarkennetaan huomioimalla tehokkuus muunneltavuus ylläpito

3 Yksityiskohtainen suunnittelu
Yksityiskohtaisen suunnittelun aikana tehostetaan suoritusta lisäämällä johdettuja assosiaatioita ja attribuutteja suunnitellaan assosiaatioiden toteutus parannetaan joustavuutta ja muunneltavuutta esimerkiksi soveltamalla suunnittelumalleja uudelleenorganisoidaan luokkarakennetta, rajapintoja ja periytymistä lisätään toteutuksen kannalta tarpeelliset operaatiot ja luokat suunnitellaan käyttöliittymän toteutus

4 Yksityiskohtainen suunnittelu
Arkkitehtuurisuunnittelun sekvenssikaavioita tarkennetaan. tehtävät järjestelmän olioiden välisenä vuorovaikutuksena Aktiiviset luokat identifioidaan ja niiden käyttäytyminen kuvataan tilakaavioina. Tilakaavioiden toteutustavat suunnitellaan. Luokkien operaatiot identifioidaan sekvenssikaavioiden perusteella.

5 Yksityiskohtainen suunnittelu
Merkittävimmät tai monimutkaisimmat operaatiot kuvataan tarkemmin tulo- ja jättöehtoineen. operaation toimintaan liittyvä olioiden vuorovaikutus esitetään sekvenssikaavioilla muutoin kuvaus voidaan antaa esimerkiksi pseudokielellä

6 Yksityiskohtainen suunnittelu
Yksityiskohtaisen suunnittelun käyttäytymisnäkökulmaa kuvaavat: sekvenssikaaviot tilakaaviot operaatiokuvaukset

7 Yksityiskohtainen suunnittelu
Lopuksi varmistetaan rakenne- ja käyttäytymisnäkökulmien yhtäpitävyys tarkastetaan, että kaikkien operaatioiden suoritukseen tarvittavat assosiaatiot ovat olemassa tarkastetaan, että luokkakaavioissa ja sekvenssikaavioissa esiintyvät samat operaatiot tarkastetaan, että tilakaaviot sallivat sekvenssikaavioissa kuvattujen toimintojen suorittamisen

8 Suunnittelu Suunnittelun tavoitteena on täsmentää analyysin tuloksena saatua mallia toteutustekniset näkökohdat huomioidaan ei sitouduta vielä toteutusvälineeseen tai kieleen

9 Luokkien operaatioiden määrääminen
tehdään tarkat skenaariokaaviot eri käyttötapauksille olioiden kommunikoinnin tasolla operaatiot kuvataan oikeilla nimillään ja niihin liitetään tieto mahdollisesta parametrista poimitaan niistä operaatiot

10 Yksityis-kohtainen sekvenssi-kaavio käyttö-tapauk-selle Askellus

11 Löydetyt operaatiot Luokka operaation kutsumuoto merkitys
Peli alusta() Pelilaudan (kartan) alustus lisääPelaaja(n: String) Pelaaja lisätään nimellä n nopanHeitto() Heitetään noppaa siirräPelaaja(p: Paikka) Siirretään pelaaja paikkaan käännäLappu(p: Paikka) Käännetään lappu paikassa päätä() Pelin lopettaminen, tulokset Peliseurue lisääPelaaja(n: String) Pelaaja lisätään nimellä n seuraavaPelaaja(): Palauttaa siirtovuorossa Pelaaja seuraavan pelaajan aarrePelaaja(p: Paikka): Jos aarteen omaava pelaaja Pelaaja on paikassa p, palaute- taan se, muuten nil

12 Löydetyt operaatiot Luokka operaation kutsumuoto merkitys
Pelaaja onkoLentoPaikalla(): Palauttaa toden jos pelaa- Boolean ja on lentopaikalla onkoRahaa(): Boolean Palauttaa toden jos pelaa- jalla on rahaa annaPaikka(): Paikka Palauttaa pelaajan paikan siirry(p: Paikka) Siirtää pelaajan paikkaan p onkoVoittaja(): Boolean Palauttaa toden jos pelaa- jalla on aarre ja pelaajan paikka on lähtöpaikka onkoAarre(): Boolean Palauttaa toden jos pelaa- jalla on aarre luovutaAarre(): Aarre Poistaa aarteen pelaajalta otaAarre(a: Aarre) Antaa aarteen pelaajalle maksu() Poistaa yhden pelirahayksi- kön pelaajalta nollaaRahat() Poistaa pelaajalta kaikki rahat

13 Löydetyt operaatiot Luokka operaation kutsumuoto merkitys
Lentoliikenne annaKohteet(p: Paikka): Palauttaa paikasta p lentäen set of Paikka saavutettavat paikat Paikka onkoLappu(): Boolean Palauttaa toden jos paikalla on kääntämätön lappu käännäLappu() Kääntää paikan lapun Noppa heitä(): Integer Palauttaa nopan arvon

14 Löydetyt operaatiot Luokka operaation kutsumuoto merkitys
Kartta annaViereiset(p: Paikka, Palauttaa paikat, joihin pää- n: Integer): set of Paikka see paikasta p n:llä askeleella Lappu vaikuta(p: Pelaaja) Aiheuttaa pelaajalle p lapun edellyttämän vaikutuksen Nappula siirry(p: Paikka) Siirtää nappulan paikkaan p annaPaikka(): Paikka Palauttaa nappulan paikan

15 Olioiden esitysmuodon suunnittelu
Luokka vai perustietotyyppi? esimerkiksi Sosiaaliturvatunnus vs. String Luokka vai joukko attribuutteja? esimerkiksi Piste vs. erilliset x- ja y-attribuutit kalvo

16 Tehokkuusnäkökohdat assosiaatiopolkujen lyhentäminen
lisää ylimääräisiä assosiaatioita operaatioiden tehostamiseksi lisätään assosiaatio Peli- ja Pelaaja-luokkien väliin johdetut attribuutit turhan uudelleenlaskennan välttäminen päivitys: eksplisiittinen, kanta-attribuutin muutoksen jälkeen eksplisiittinen, tietyin väliajoin implisiittinen, kanta-attribuutin päivitysoperaatio muuttaa myös siitä riippuvia attribuutteja (ns. aktiiviset arvot)

17 Assosiaatioiden suunnittelu
Assosiaatioiden merkitys operaatioiden suorituksen kannalta tutkitaan tarkemmin onko käyttö yksi- vai kaksisuuntaista? kumpaan suuntaan yksisuuntaista käytetään? onko mukana edelleen turhia assosiaatioita

18 Assosiaatioiden suunnittelu
Toteutusperiaatteet: pieni kertautuminen (1-3) --> viiteattribuutti suuri kertautuminen --> erillinen säiliöolio, lista kvalifiointi --> hajautettu hakemisto tai indeksoitu säiliöolio (esim. taulukko) kaksisuuntainen assosiaatio --> molempiin suuntiin kuten yllä tai erillinen assosiaatio-olio (kuva 7.12) tai toinen suunta haulla (jos käytetään harvoin) kalvot

19 Epätriviaalit assosiaatiot
Koosteassosiaatiot Lentoliikenne-Lentoreitti Polku-Paikka Muita Paikka-Seuraa-Paikka Peliseurue-Pelaaja

20 Lentoliikenne-Lentoreitti
Assosiaation tarkastelu: Assosiaatio on kvalifioitu paikalla Assosiaatiota käyttää hyväkseen operaatio annaKohteet(p: Paikka), joka palauttaa joukon paikkoja käyttäen avaimena tiettyä paikkaa Lentoreitti-oliot on siis organisoitava siten, että jokaista paikkaa kohden löytyvät helposti ne paikat, joihin siitä on lentoreitti Ratkaisu: jokaisella paikalla on sen identifioiva numero 0..k, ja numeron perusteella saadaan indeksoidusta rakenteesta kohdepaikkojen joukko (kalvo)

21 Polku-Paikka, Paikka-Seuraa-Paikka
Assosiaatioiden tarkastelu: operaatio annaViereiset(p: Paikka, n: Integer) palauttaa niiden paikkojen joukon, jotka seuraavat n:llä askeleella paikkaa p. Ratkaisu: toteutetaan vastaavasti kuin edellinen assosiaatio: paikan numeroa ja askelmäärää (n) käytetään indekseinä, jotka määräävät joukon kohdepaikkoja (kalvo).

22 Peliseurue-Pelaaja Assosiaation tarkastelu: Ratkaisu:
myös tässä kuljetaan kohti kertautuvaa päätä operaatiot seuraavaPelaaja() ja aarrePelaaja(p: Paikka) pelaajaolioilla on siis tietty järjestys Ratkaisu: valitaan järjestetyn joukon toteutustavaksi taulukko, jota indeksoidaan pelaajan numerolla luokkakaaviossa tämä näkyy vaihtamalla rajoite {ordered} muotoon {indexed} ja poistamalla kvalifiointi

23 Tarkennettu luokkakaavio
Luokkakaavion seuraava muoto Edellisten suunnitteluvaiheiden lisäksi kaaviossa on käytetty navigointisymbolia sellaisissa assosiaatioissa, jotka voidaan toteuttaa olioon osoittavalla viiteattribuutilla lähtöpäässä

24 Muunneltavuuden lisääminen
abstraktit luokat, avointen ja kiinteiden virtuaalioperaatioiden määritteleminen tietyn käyttömuodon tai protokollan määritteleminen rajapintaluokaksi spekulatiivinen suunnittelu: mikä saattaisi myöhemmin muuttua? muutoksia ennakoivat uudet rajapintaluokat

25 Abstraktit luokat ja virtuaalioperaatiot
voiko operaation määrittelyn antaa siinä luokassa, jossa se esiintyy mallissa vai onko se tarkoitettu uudelleenmääriteltäväksi? jos ei voi määritellä --> {abstract} jos on tarkoitettu uudelleenmääriteltäväksi, operaation pitää esiintyä myös aliluokissa jos luokalla on avoimia virtuaalioperaatioita, luokka on merkittävä määreellä {abstract} periytymishierarkian lehtiluokka ei saa olla abstrakti

26 Abstraktit luokat ja virtuaalioperaatiot
Yliluokka Paikka: operaatio onkoLappu() riippuu aliluokasta, koska lappu voi olla vain erikoispaikalla operaatio tarvitaan kuitenkin Paikka-luokassa, koska paikalta pitää pystyä kysymään mahdollista lappua annetaan luokassa Paikka oletusmäärittely, joka palauttaa epätoden. Luokka Erikoispaikka uudelleenmäärittelee tämän operaation samoin menetellään operaation kaannaLappu() kanssa oletusmäärittely tyhjä uudelleenmääritellään Erikoispaikassa, lisätään siihen attribuutti lappuNakyy

27 Abstraktit luokat ja virtuaalioperaatiot
Yliluokka Lappu: operaation vaikuta(p: Pelaaja) toteutus riippuu aliluokasta aliluokat ovat keskenään samanarvoisia, eikä mikään ole ”normaalitapaus” määritellään operaatio avoimeksi virtuaalioperaatioksi määreellä {abstract}, ja luokka abstraktiksi samalla määreellä lisätään operaatio vaikuta (p: Pelaaja) kaikille aliluokille

28 Abstraktit rajapintaluokat
Malliin voidaan lisätä täysin uusiakin abstrakteja yliluokkia rajapintaluokat: erilaisia olioita käsitellään jossakin yhteydessä tietyllä tavalla riippumatta niiden muista ominaisuuksista toteutuksena esimerkiksi Javan interface-luokat joskus luokkia pitää hieman muokata, että esimerkiksi samoissa operaatioissa on sama määrä parametreja ja niillä on sama nimi rajapinnat lisäävät ohjelman modulaarisuutta, uudelleenkäyttöä ja laajennettavuutta

29 Spekulatiivinen suunnittelu
varautuminen tuleviin muutoksiin tavoitteena hyvä ylläpidettävyys mitkä asiat mallissa saattaisivat vielä muuttua? käsitteiden / luokkien uusien muunnelmien tarve toimintojen uusien versioiden tarve varautuminen tapahtuu käytännössä abstrakteilla rajapintaluokilla

30 Spekulatiivinen suunnittelu
esimerkissä varaudutaan uusiin liikennevälineisiin uusi abstrakti yliluokka Liikenne määritellään siihen virtuaalioperaatio hinta (p1: Paikka, p2: Paikka): Integer. Samoin aliluokkaan LentoLiikenne. muutetaan operaatio maksu() muotoon maksu(h: Integer) luokkakaavion seuraava muoto ratkaisuna usein suunnittelumallit (osa III)

31 Yksityiskohtaisen suunnittelun tuottama luokkakaavio

32 Operaatioiden yksityiskohtainen suunnittelu
Suunnitteluvaiheessa operaatioiden kuvaukset täsmennetään niin, että kuvausten perusteella voi suoraviivaisesti tuottaa koodia Kuvaus voidaan antaa systemaattisessa muodossa operaatiokaavakkeella

33 Operaatiokaavake Luokka ja operaation kutsumuoto Description:
Description: Lyhyt kuvaus operaatiosta. Result: Operaation tulos tai tavoite. Assumes: Operaation tuloehdot, joiden päteminen on tarkistettava eksplisiittisesti. Reads: Attribuutit, joiden arvon operaatio lukee, ja luokat, joiden ilmentymiä operaatio käyttää muuttamatta niiden tilaa.

34 Operaatiokaavake Changes:
Attribuutit, joiden arvon operaatio muuttaa, ja luokat, joiden ilmentymiä operaatio muuttaa. Exceptions: Poikkeustilanteet, jotka operaation suorituksessa voivat syntyä (operaatio ei tuota tarkoitettua tulostaan). Scenario: Sekvenssikaavio, joka kuvaa operaation suoritukseen sisältyvän olioiden vuorovaikutuksen. Algorithm: Algoritmi, joka kuvaa operaation toiminnan.

35 Operaatioiden suunnittelu
Pohjana analyysissa esitetty karkea kuvaus Tutkitaan operaation käyttötilanteita skenaarioissa ja määritellään operaation tulos Tuloehdot takaavat operaation suorituksen päättymisen ja tuloksen saavuttamisen (pl. poikkeustilanteet)

36 Operaatioiden suunnittelu
Tutkitaan operaation viittaamat attribuutit ja luokkien ilmentymät, joita ei muuteta Tutkitaan operaation viittaamat attribuutit ja luokkien ilmentymät, joita muutetaan

37 Operaatioiden suunnittelu
Mahdolliset poikkeustilanteet kuvataan erikseen (operaation suoritus päättyy ilman oikeaa tulosta) Jos olio käyttää suorituksensa aikana muita olioita, kuvataan vuorovaikutus skenaariokaaviolla voidaan usein saada suoraan aiemmista skenaarioista, jos operaation suoritus on kuvattu yksityiskohtaisesti Jos algoritmi ei ole triviaali, se kuvataan erikseen pseudokielellä

38 Operaatioiden suunnittelu
kirjan esimerkit s operaatioista annaViereiset(p: Paikka, n: Integer): Set<Paikka> ja aarrePelaaja(p: Paikka): Pelaaja

39 Esimerkki: aarrePelaaja(p: Paikka)
Class: Peliseurue Operation: aarrePelaaja(p: Paikka): Pelaaja Description: Ilmoittaa mahdollisen pelaajan, jolla on aarre ja joka on paikassa p. Result: Palauttaa pelaajan Q, jolle Q.omistaa  nil ja Q.käyttää.sijaitsee = p, jos sellainen on olemassa, muuten nil. Assumes: p  nil

40 Reads: Pelaaja, Nappula Exceptions: Pelaajalla ei ole nappulaa. Algorithm: while pelaajia käsittelemättä do Q = käsittelemätön pelaaja; if Q.onkoAarre() then if Q.annaPaikka() = p then return Q end end; return nil

41 Tilakaavioiden toteutus
Tilakaavioille ei ole suoraa vastinetta ohjelmointikielissä. Eri toteutustapoja: (i) operaatiopohjainen toteutus (ii) simuloitu tila-automaatti (iii) strukturoitu toteutus (iv) prosessipohjainen toteutus (v) viimeisen päälle oliopohjainen ratkaisu

42 Operaatiopohjainen toteutus
Luontevaa silloin, kun tilakaaviolla kuvattu olio vastaanottaa sanomat synkronisten operaatiokutsujen muodossa. Tuttu monista graafisen käyttöliittymän toteutukseen kehitetyistä luokkakirjastoista: Borlandin OWL, Microsoftin MFC, Sunin AWT Tila talletetaan johonkin ohjausolion attribuuttiin

43 Simuloitu tila-automaatti
Yleensä varsinainen tapahtumasilmukka toimii järjestelmässä alemmalla tasolla esimerkiksi Windows-ohjelmien WinMain-funktio, kuva kalvot Simuloidussa tila-automaatissa tilakaavion toteutuksen tehtävänä on reagoida sanomiin koko tilakaavion koodi on yhtenäinen ohjelmanosa, joka on operaation sisällä Kutakin tilaa vastaa koodinpätkä, jossa käsitellään kaikki tilasta lähtevät siirtymät (yleisimmät ensin), esimerkiksi case-lauseella kuva kalvo 106

44 Strukturoitu toteutus
Kuvataan tilakaavion toiminta rakenteisena toteutuksena, eli case-lauseiden sijaan käytetään sisäkkäisiä ehto- ja toistolauseita ei tarvita erillistä tila-attribuuttia edellyttää tilakaavion tarkkaa analysointia sopii yksinkertaisille tilakaavioille, mutta voi tehdä monimutkaisen kaavion toteutuksen vaikeasti hallittavaksi kuva 7.19.

45 Prosessipohjainen toteutus
Esimerkiksi monisäikeisessä ohjelmassa, jossa on aktiivisia olioita Vuorovaikutus voidaan kuvata prosessien välisillä kommunikointimekanismeilla esimerkiksi Adan tasking-malli ei kuvata tässä tarkemmin, kuuluu rinnakkaisohjelmoinnin (parallel computing) ja hajautetun ohjelmoinnin (distributed computing) tekniikoihin

46 Oliopohjainen toteutus
Sekä tilat että siirtymät voidaan esittää myös olioina korostaa muunneltavuutta (sekä tilojen että siirtymien lisäämismahdollisuutta) tehottomampi ratkaisu lisää sekä luokkia että ajonaikaista rasitetta


Lataa ppt "Slides by Roope Raisamo"

Samankaltaiset esitykset


Iklan oleh Google