Slides by Roope Raisamo

Slides:



Advertisements
Samankaltaiset esitykset
Tuloksellinen Java-ohjelmointi Luku 3 Luokkien käyttäminen
Advertisements

18. Abstraktit tietotyypit
Rajapintaluokat Rajapintaluokka luettelee metodit, joille tulee löytyä toteutus asianomaisen rajapinnan toteuttavista luokista. Rajapintaluokka on siis.
Ohjelmiston tekninen suunnittelu
Ohjelmiston toteutus (teknisestä näkökulmasta)
SE-02 Olioperustainen ohjelmistokehitys Tampereen yliopisto, syksy 2000 Roope Raisamo perustuu Kai Koskimiehen Oliokirjaan ja kurssin aiempiin materiaaleihin.
Olioperustainen ohjelmistoprosessi
© Jukka Harju, Jukka Juslin
1 Kertaus koetta varten oleellisista asioista Jukka Juslin.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Hyvä ohjelmointitapa (osa 2) Yleistä Lisää hyviä ohjelmointikäytäntöjä: − Jaa pitkä koodi osiin. − Käytä attribuutteja säästeliäästi.
SE-02 Oliosuunnittelu Slides by Roope Raisamo. SE-02 Yksityiskohtainen suunnittelu Yksityiskohtaisessa suunnittelussa kunkin osan toteutus suunnitellaan.
Vesa Ollikainen & Outi Grotenfelt
Johdetun luokan olion alustus tMyn1 Johdetun luokan olion alustus määrätyillä arvoilla Kun ohjelmassa esiintyy johdetun luokan olion määrittely, järjestelmä.
OMT Design System design –design technical environment Object design –design class diagram.
Ohjelmassa tänään Ohjelmointimallit Pseudokieli Modulaarisuus.
Ubuntu - peruskäyttö Seuraavassa läpikäydään Ubuntun peruskäyttöä: Perustoiminnot Sisäänkirjautuminen Työpöytä Uloskirjautuminen Lähteinä on käytettu Ubuntu.
Pilkku Kotilainen, Liedes, Luttinen, Meriläinen.  Pääsääntönä on, että virkkeen lauseet erotetaan toisistaan yleensä pilkulla.  Päälause erotetaan sivulauseesta.
UML-luokkakaavio ● Luokkakaavio (class diagram) kuvaa järjestelmän luokkarakennetta ● Mitä luokkia on olemassa ● Minkälaisia luokat ovat ● Luokkien suhteet.
Palvelukuvaustyö Pekka Linna, CSC Synergiaryhmä
String-vertailusta ja Scannerin käytöstä (1/2)
17. Kooste.
Koulutuksen ja opetuksen järjestämisen prosessit
MITÄ UUTTA? Tekstiviestihälytysjärjestelmä Toimikunta- ja maakuntarajat pois Hälytysryhmän jokaisen jäsenen tiedot päähälyttäjien lisäksi (väh. nimi,
6. Metodit.
3. Olio-ohjelmoinista lyhyesti
8. Rekursio.
VARDA-tietovirrat: Varhaiskasvatuksen tietojen siirtyminen tiedon tuottajilta tiedon hyödyntäjille.
Kansallisen palveluväylän viitearkkitehtuurin päivitys
Opinnäytetöiden kirjaaminen Wilmaan huhtikuu 2015
13. Pakkaukset.
Poikkeustenkäsittelylohkot try-catch
8. Näppäimistöltä lukeminen
7. Hyvä ohjelmointitapa..
13. Loogiset operaatiot.
15. Lohkot.
Rajapintaluokat Rajapintaluokka luettelee metodit, joille tulee löytyä toteutus asianomaisen rajapinnan toteuttavista luokista. Rajapintaluokka on siis.
Foreach-toistolause foreach-rakenteella on kätevä käydä läpi kaikki taulukon alkiot. Erityisen kätevää se on hajautustaulukon tapauksessa, jossa taulukon.
OHJEITA MATEMATIIKAN YLIOPPILASKIRJOITUKSIIN
– Ohjelmistojen mallintaminen, kesä 2010
L7 Sovellus Koulutusrekisteri
Koulutuksen järjestämisen ja opintojen järjestämisen prosessit
7. Näytölle tulostaminen
Laskutusprosessin tavoitetilan kuvaus
8. Näppäimistöltä lukeminen
10. Javan ohjausrakenteet
15. Lohkot.
4. Attribuutit.
8. Rekursio.
Yhteentoimivuusmenetelmän soveltaminen rekistereissä
7. Hyvä ohjelmointitapa..
Mallintamisen metamalli ja notaatiot
CLT132 Tehtävät (viikko 7).
Miksi? Palkanlaskennan koulutusta vähän tarjolla
Koulutus- ja opetusyhteistyö ja VIRTA-tiedot
Tilaustoimitusprosessin kuvaus
WinOodi versio 4.4 Katri Laaksonen
Asiointipalveluiden laatu - Asiakasarvioinnit
TIETO JA TIETOKONEOHJELMA
Vinkkejä juridiikan opiskeluun
Otsikon asettelu Alaotsikko.
Tieto Edu Hoitoajat Tieto Education Finland.
8. Periytyminen.
4. Luokan testaus ja käyttö olion kautta
Tärkeämpää kuin arvaatkaan
Video 5: Yleisesti kysyttyjä kysymyksiä ja niihin annettuja vastauksia
Video 4: Avoimen ja yhteisen rajapinnan hallintasuunnitelma
Gopro action-kamerat Hero 4 silver ja hero 2018.
Dynamic Reporting (DR) -raporttien teon parhaat käytännöt
Luonnontiedeaiheinen projekti
Esityksen transkriptio:

Slides by Roope Raisamo Oliosuunnittelu Slides by Roope Raisamo

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

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

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.

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ä

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

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

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

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

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

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

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

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

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

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

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)

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

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

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

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)

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).

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

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ä

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

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

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

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

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

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

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)

Yksityiskohtaisen suunnittelun tuottama luokkakaavio

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

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.

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.

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)

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

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ä

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

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

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

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

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

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

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.

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

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