Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

SE-02 Oliosuunnittelu Slides by Roope Raisamo. SE-02 Yksityiskohtainen suunnittelu Yksityiskohtaisessa suunnittelussa kunkin osan toteutus suunnitellaan.

Samankaltaiset esitykset


Esitys aiheesta: "SE-02 Oliosuunnittelu Slides by Roope Raisamo. SE-02 Yksityiskohtainen suunnittelu Yksityiskohtaisessa suunnittelussa kunkin osan toteutus suunnitellaan."— Esityksen transkriptio:

1 SE-02 Oliosuunnittelu Slides by Roope Raisamo

2 SE-02 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 SE-02 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 SE-02 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 SE-02 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 SE-02 Yksityiskohtainen suunnittelu Yksityiskohtaisen suunnittelun käyttäytymisnäkökulmaa kuvaavat: –sekvenssikaaviot –tilakaaviot –operaatiokuvaukset

7 SE-02 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 SE-02 Suunnittelu Suunnittelun tavoitteena on täsmentää analyysin tuloksena saatua mallia –toteutustekniset näkökohdat huomioidaan –ei sitouduta vielä toteutusvälineeseen tai kieleen

9 SE-02 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 SE-02 Yksityis- kohtainen sekvenssi -kaavio käyttö- tapauk- selle Askellus

11 SE-02 Löydetyt operaatiot Luokkaoperaation kutsumuotomerkitys Pelialusta()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 PeliseuruelisääPelaaja(n: String)Pelaaja lisätään nimellä n seuraavaPelaaja():Palauttaa siirtovuorossa Pelaajaseuraavan pelaajan aarrePelaaja(p: Paikka): Jos aarteen omaava pelaaja Pelaajaon paikassa p, palaute- taan se, muuten nil

12 SE-02 Löydetyt operaatiot Luokkaoperaation kutsumuotomerkitys PelaajaonkoLentoPaikalla():Palauttaa toden jos pelaa- Booleanja on lentopaikalla onkoRahaa(): BooleanPalauttaa toden jos pelaa- jalla on rahaa annaPaikka(): PaikkaPalauttaa pelaajan paikan siirry(p: Paikka)Siirtää pelaajan paikkaan p onkoVoittaja(): BooleanPalauttaa toden jos pelaa- jalla on aarre ja pelaajan paikka on lähtöpaikka onkoAarre(): BooleanPalauttaa toden jos pelaa- jalla on aarre luovutaAarre(): AarrePoistaa aarteen pelaajalta otaAarre(a: Aarre)Antaa aarteen pelaajalle maksu()Poistaa yhden pelirahayksi- kön pelaajalta nollaaRahat()Poistaa pelaajalta kaikki rahat

13 SE-02 Löydetyt operaatiot Luokkaoperaation kutsumuotomerkitys LentoliikenneannaKohteet(p: Paikka):Palauttaa paikasta p lentäen set of Paikkasaavutettavat paikat PaikkaonkoLappu(): BooleanPalauttaa toden jos paikalla on kääntämätön lappu käännäLappu()Kääntää paikan lapun Noppaheitä(): IntegerPalauttaa nopan arvon

14 SE-02 Löydetyt operaatiot Luokkaoperaation kutsumuotomerkitys KarttaannaViereiset(p: Paikka,Palauttaa paikat, joihin pää- n: Integer): set of Paikkasee paikasta p n:llä askeleella Lappuvaikuta(p: Pelaaja)Aiheuttaa pelaajalle p lapun edellyttämän vaikutuksen Nappulasiirry(p: Paikka)Siirtää nappulan paikkaan p annaPaikka(): PaikkaPalauttaa nappulan paikan

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

16 SE-02 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 SE-02 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 SE-02 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 SE-02 Epätriviaalit assosiaatiot Koosteassosiaatiot –Lentoliikenne-Lentoreitti –Polku-Paikka Muita –Paikka-Seuraa-Paikka –Peliseurue-Pelaaja

20 SE-02 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 SE-02 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 SE-02 Peliseurue-Pelaaja Assosiaation tarkastelu: –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 SE-02 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 SE-02 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 SE-02 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 SE-02 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 SE-02 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 SE-02 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 SE-02 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 SE-02 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 SE-02 Yksityiskohtaisen suunnittelun tuottama luokkakaavio

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

33 SE-02 Operaatiokaavake Luokka ja operaation kutsumuoto 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 SE-02 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 SE-02 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 SE-02 Operaatioiden suunnittelu Tutkitaan operaation viittaamat attribuutit ja luokkien ilmentymät, joita ei muuteta Tutkitaan operaation viittaamat attribuutit ja luokkien ilmentymät, joita muutetaan

37 SE-02 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 SE-02 Operaatioiden suunnittelu kirjan esimerkit s. 145-146 operaatioista annaViereiset(p: Paikka, n: Integer): Set ja aarrePelaaja(p: Paikka): Pelaaja

39 SE-02 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 SE-02 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 SE-02 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 SE-02 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 SE-02 Simuloitu tila-automaatti Yleensä varsinainen tapahtumasilmukka toimii järjestelmässä alemmalla tasolla –esimerkiksi Windows-ohjelmien WinMain-funktio, kuva 7.17 + kalvot 103-104 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 7.18 + kalvo 106

44 SE-02 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 SE-02 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 SE-02 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 "SE-02 Oliosuunnittelu Slides by Roope Raisamo. SE-02 Yksityiskohtainen suunnittelu Yksityiskohtaisessa suunnittelussa kunkin osan toteutus suunnitellaan."

Samankaltaiset esitykset


Iklan oleh Google