Tietorakennepohjaiset menetelmät Käsiteltävän tiedon rakenne määrää ohjelmiston rakenteen: peräkkäisyys, ehdollisuus, toisto hierarkkisuus Lähtökohtana tulosteiden, syötteiden, tietokannan, kyselyn, tapahtuman rakenne (esim. Jacksonin JSP, Warnier & Orr) Osatehtävät: tietorakenteiden kuvaaminen perusprimitiivien avulla: peräkkäisyys, vaihtoehtoisuus, toisto tietorakenteen muuntaminen kontrollihierarkiaksi ohjelmistohierarkian tarkentaminen ohjelmiston toiminnallinen kuvaus Tietorakennepohjaiset menetelmät Tyypillisiä sovellusalueita: kaupallis-hallinnolliset sovellukset tietokoneavusteinen suunnittelu ja valmistus (CAD, CAM, CAE) sovellukset, joiden käsittelemällä tiedolla on hyvin määritelty ja hierarkkinen rakenne Esim.: JSP - Jackson Structured Programming (-75) Tietorakenteesta kuvattavissa peräkkäisyys, vaihtoehtoisuus ja toisto Tietorakenteet kuvataan hierakisena kaaviona, joka voidaan esittää myös tekstimuodossa. Harri Laine 1/20
JSP-rakennekaavio Tuloslista kurssitiedot opiskelija * yhteenveto tunnus nimi arvosana hetu o o JSP-periaate Muodostetaan palveluun liittyviä peräkkäisrakenteita vastaavat tietorakenteet (1 tai useampia) esim. raportin rakennekuvaus, syottötiedostojen rakennekuvaukset. Jos rakenteita on useampia määrätään eri rakennekuvausten rakenneosien vastaavuus kytkemällä vastinosat yhteen. Kutsutaan vastionosien yhteenliittymää osapariksi (yhteenliittymässä voi olla yli 2 osaa) raportin rakenneosa & tietokannan rakenneosa Harri Laine 2/20
JSP-periaate JSP-periaate Aikaansaatu kytketty tietorakennekaavio muunnetaan ohjelmarakennekaavioksi: moduuli jokaista osaparia kohden moduuli jokaista paritonta kohden Rakenteiden yhteensovittamisessa voi syntyä rakenneristiriitoja (esim raportti eri järjestyksessä kuin syöttöaineisto) Menetelmä tarjoaa standardiratkaisuja näiden hoitamiseen. Harri Laine 3/20
JSP-periaate raportti tietokanta tulos Oliopohjaiset menetelmät - Object oriented design Sekä analyysissä että suunnittelussa on sama peruskäsitteistö oliot ja luokat yhteyksien kohdalla tarkastellaan kuitenkin miten yhteydet toteutetaan linkkeinä, indekseinä, viiteavaimina Joissain suunnittelutason malleissa oliot on jaettu useampaan kategoriaan, esimerkiksi /Jacobsson/ liittymäolioihin (interface objects), pääasiallisena tehtävänä on kommunikointi järjestelmän ulkopuolisten tahojen, esimerkiksi käyttäjien tai oheislaitteiden kanssa. raportit, kyselyt ja graafisen käyttö-liittymän ikkunat ja näiden osat Harri Laine 4/20
Oliopohjaiset menetelmät - Object oriented design tieto-olioihin (entity objects) Tieto-olioiden vastuulla on järjestelmän tieto-sisältö Tieto-oliolla voi olla useita olomuotoja, aktiivinen ohjelmassa toimiva muoto, talletusmuoto esim. tietokannassa, yksi tai useampia esitysmuotoja käyttöliittymässä ohjausolioihin (control objects) Ohjaus-oliot vastaavat toimintalogiikasta. ohjaavat ja tarkkailevat työnkulkua Eri kategorioihin kuuluville olioille annetaan yleensä myös erilainen graafinen esitystapa kaavoissa. UML-käyttää erotteluun lajimäärettä (stereotype) Oliopohjaiset menetelmät Olioiden jaottelu kategorioihin auttaa suunnittelijaa jäsentämään kokonaisuutta ja sijoittamaan palveluja olioille. Esimerkiksi tietosisältöön liittyvää loogisuus-tarkistusta ei ole syytä sijoittaa liittymäolion palveluiksi, vaan tarkistus sopii paremmin tietosisällöstä vastaavan tieto-olion palveluksi. Käyttötapaukseen liittyvän monimutkaisen työnkulun valvonta olisi parempi antaa erillisen ohjausolion tehtäväksi kuin yrittää upottaa sitä väkisin käyttöliittymäikkunan tai sitä vastaavan tieto-olion vastuulle. Olioiden jaottelu kategorioihin on siis eräänlainen karkean tason ratkaisumalli. Harri Laine 5/20
Oliopohjaiset menetelmät Määrittelyn ja suunnittelun raja on epäselvä. Suunnitteluakin tapahtuu eri tarkuustasoilla Suunnittelussa määrittelyn tuottamaa oliorakennetta täydennetään Järjestelmän kehittelyn lähtökohtana tehtäväalueelle ominaiset tietotyypit ja abstraktiot Suunnittelu pohjautuu voimakkaasti tiedon kätkemisen periaatteelle: järjestelmä nähdään joukkona (itsenäisiä) olioita, jotka ovat vuorovaikutuksessa keskenään kullakin oliolla on tila, johon voidaan koskea ainoastaan sovituilla operaatioilla olioiden välinen kommunikointi perustuu sanomiin Olioiden kuvaaminen Erotetaan kaksi erillistä osaa: protokollan kuvaus = olion käyttöliittymä: sanomat ja niihin liittyvät operaatiot toteutuksen kuvaus = olion sisäinen rakenne: sisäinen tietorakenne operaatioiden toteutuksen yksityiskohdat Käyttäjä tarvitsee ainoastaan protokollan kuvauksen Toteuttaja tarvitsee toteutuksen kuvauksen Kaksitasoinen kuvaaminen tukee suunnittelun ja toteutuksen riippumattomuutta modulaarisuutta komponenttien uuskäyttöä Harri Laine 6/20
Oliosuunnittelu Oliopohjaista suunnittelua ja toteutusta suositellaan käytettäväksi oliopohjaisen analyysin jatkona: analyysin yhteydessä laadittu oliomalli muodostaa suunnittelun oliomallin ytimen, jota täydennetään ja muutetaan: ottamalla huomioon toteutusympäristö laitteet, käyttäjät, tietoliikenne toteutusvälineet käytettävät kirjastot suorituskykyvaatimukset suunnittelumallit arkkitehtuurimalli seurauksena uusia olioluokkia ja palveluita esim.printer, FileManager,käyttöliittymäoliot kuten ikkunat,napit, yms. Oliosuunnittelu ottamalla mukaan työtiedot ja apupalvelut ratkaisemalla yhteyksien toteutustapa, esim. Määrittelyssä kirja 1..* luku Harri Laine 7/20
Oliosuunnittelu collection item[ ] * object kirjat item[ ] kirja luvut suunnittelussa toteutus kirjastoluokkien avulla luvut luku item[ ] Arkkitehtuurin hyödyntäminen Liittymäoliot muodostavat yhteyden käyttöliittymän ja muun koneensisäisen oliomaailman välille. Käyttöliittymän komponentteja vastaa jokin liittymäolio. Liittymäluokkien tietosisältöön ja toimintoihin vaikuttavat päätökset siitä, missä määrin ja miten käyttöliittymä pyritään eristämään järjestelmän muista osista. Eristämisnen voidaan toteuttaa esim. MVC (Model-View- Controller) -arkkitehtuurin avulla (Krasner, G., Pope S:: Cookbook for using the Model- View-Controller User Interface Paradigm in Smalltalk-80, JOOP August/Sept.1988) Harri Laine 8/20
MVC-arkkitehtuuri MVC:ssä eristetään tietosisältö (model) sen esittämisestä (view) ja siihen kohdistuvan käsittelyn hallinnasta (controller). Sisältöoliot pitävät sisällään kaikki esitettävät tiedot ja niiden muuttamiseen tarvittavat operaatiot. Ne eivät tiedä mitään käyttöliittymästä, tietojen esittämismuodosta eivätkä tiedoille käyttöliittymässä tehtävistä operaatioista. Sisältöoliot tarjoavat käyttöliittymästä riippumattomat operaatiot tietojen hakuun ja muokkaukseen. Esim. sisältöolio kello: ylläpitää sisäisesti kellonaikaa tarjoaa operaation ajan kysymiseksi tarjoaa operaatiot ajan asettamiseksi MVC-arkkitehtuuri Näkymäoliot (view) esittävät niihin liitetyn sisältöolion tilaa. Ne käyttävät hyväkseen sisältöolion kyselypalvelua saadakseen tilan selville. Esim. Kellon voisi liittyä kaksi näkymäoliota: analogianäyttö ja digitaalinäyttö. Harri Laine 9/20
MVC-arkkitehtuuri Ohjausolio (controller) hallitsee sitä, miten käyttäjä voi vaikuttaa sisältöolioiden tietoihin. Se esimerkiksi ottaa vastaa hiiren näpäyksiä, näppäimen painamisia jne. ja muuntaa nämä sisältöolioiden tilaan vaikuttaviksi operaatioiksi. Esim. Kellon analogianäyttöön voisi liittyä säädin, jossa on eteen ja taakse napit. Näiden painaminen siirtäisi viisareita eteen tai taaksepäin. Painamisen kesto määräisi siirtymän suuruuden. Kun painaminen loppuu säätönuppi välittää tiedon muuttuneesta ajasta kellooliolle sen ajanasetus operaation avulla MVC-arkkitehtuuri Yllä ohjausolio toimii aluksi vaikuttamalla suoraan näkymään. Kun tieto on välitetty sisältöoliolle se välittää tiedon kaikille siihen liittyville näkymille. Kelloesimerkissä digitaalinäyttö näyttäisi siis eri aikaa niin kauan kuin säätimen nappia painetaan, mutta kun nappi irroitetaan se muuttuisi samaan aikaan analogiakellon kanssa. Joissain tapauksissa olio voi toimia sekä näkymäettä ohjausoiliona. Sisältöolioon voi liittyä monta (näkymä, ohjausolio) -paria. Harri Laine 10/20
MVC-arkkitehtuuri sisältö <-- muuta tilaa ohjain muuta_tilaa tiedota lisää_näkymä poista_näkymä päivitä ulkoasu --> 0..* ulkoasu näkymä päivitä_ulkoasu (reagoi-ohjaukseen) <-- reagoi ohjaukseen MVC-arkkitehtuuri Sisältöolio rekisteröi näkymän lisää-näkymä operaatiolla ja vastaavasti voi kytkeytyä siitä irti. Ohjain voi vaikuttaa suoraan näkymän tilaan tai epäsuorasti muuttamalla sisällön tilaa. Kun sisällön tila muuttuu sisältöolio tiedottaa asiasta kaikille olion tilasta kiinnostuneiksi rekisteröityneille näkymille. Harri Laine 11/20
Suunnittelun eteneminen Oliopohjaisessakin suunnittelussa voidaan nähdä tieto- tai toimintokeskeisiä painotuksia tietokeskeisen oliosuunnittelun lähtökohtana on tiedon piilottaminen: olioluokkia pyritään löytämään tietoabstraktioiden kautta toimintokeskeistä painotusta edustaa ns. vastuuseen perustuva oliosuunnittelu, jossa olioiden määrittelyperustana on olion vastuu jostakin (yleensä toiminnallisesta) kokonaisuudesta ja olion tietosisältö määräytyy vastuun mukaisesti Valittu lähestymistapa johtaa erilaiseen olio- ja luokkarakenteeseen Suunnitteluohjeita Oliorakennetta suunniteltaessa pitäisi pyrkiä minimoimaan olioiden välisiä yhteyksiä olio 'tuntee' mahdollisimman vähän muita olioita ja näiden luokkia olio käyttää mahdollisimman vähän muiden olioiden palveluja palvelujen käyttöön liittyvät sanomat ovat mahdollisimman yksinkertaisia (vrt. Kytkentä) Harri Laine 12/20
Suunnitteluohjeita postinkantaja kuljetaposti (posti, paikka) opettaja posti paikka omavahtimestari lähetä (posti, Paikka) vahtimestari postimies getpostimies( ) postinkantaja getpostimies () { return postimies; } lähetä(posti,paikka) { postinkantaja kantaja; kantaja = omavahtimestari.getpostimies; kantaja.kuljetaposti(posti,paikka); } Suunnitteluohjeita postinkantaja kuljetaposti (posti, paikka) opettaja posti paikka omavahtimestari lähetä (posti, paikka) postimies vahtimestari toimitaposti (posti, paikka) toimitaposti () { postimies.kuljetaposti(posti,paikka); } lähetä(posti,paikka) { omavahtimestari.toimitaposti(posti,paikka); } Tämä on parempi! Harri Laine 13/20
Suunnitteluohjeita opettaja vahtimestari postinkantaja vaihtoehto 1 getpostimies kuljetaposti vaihtoehto 2 toimitaposti kuljetaposti Suunnitteluohjeita Järjestelmän keskeisiä olioita ovat jo määrittelytasolta periytyvät oliot joiden tietoa järjestelmässä on tarkoitus säilyttää ja ylläpitää. (siis yleensä tietoolioit). Näille luokille voidaan perusoperaatioina määritellä yksinkertaiset operaatiot attribuuttien kysymiseksi ja attribuuttien arvojen asettamiseksi (getattribute, setattribute). Jos luokan oliolla on monia olomuotoja (tietokanta, keskusmuisti) näiden väliset muunnokset ovat välttämättömiä operaatioita. Jos näyttää siltä, että usein tarvitaan perusattribuuteista johdettua tietoa, tarjotaan nämä operaationa tai johdettuna attribuuttina. Harri Laine 14/20
Käyttötapauslähtöinen suunnittelu (Laine: Olioiden maihinnousu, luku 6.4, Suomen Atk-kustannus, 1997) Käyttötapauslähtöisessä suunnittelussa suunnittelu etenee käyttötapaus kerrallaan. Suunnittele kokonaisvaltaisesti käyttöliittymän perusratkaisu ikkunat, painikkeet, valikot, yms. Ratkaise eristetäänkö käyttöliittymä ja tietosisältöja tee tästä päätöksestä johtuvat perusratkaisut, esim. MVC Käyttötapauslähtöinen suunnittelu Käy läpi järjestelmän käyttötapaukset laadi käyttötapauskohtainen näkemys järjestelmän oliorakenteesta (vain ne luokat, jotka osallistuvat toimintaan) Käyttötapauskohtaisessa näkymässä kuvataan vain ne osat oliomallista, jotka ovat välttämättömiä käyttötapauksen kannalta. hahmottele käyttötapauksen läpivientiin liittyvä olioyhteistyö Koosta näkemyksistä kokonaisvaltainen järjestelmän oliorakenne (tätä voidaan tehdä sitä mukaa kun näkemyksiä valmistuu) Harri Laine 15/20
Käyttötapauslähtöinen suunnittelu Parantele oliorakennetta yleistä, erota yhteiset osat, yhtenäistä, sovella suunnittelumalleja Mukauta nakemykset ja olioyhteistyö parannettuun malliin Käyttötapaus esittää toiminnallisen vaatimuksen ts. tavoitteen : tehtävänä on miettiä miten toiminta saadaan aikaan olioiden avulla Käyttötapauksen läpivientimallit Mitä on tehtävä = tehtävä skenaariossa (tilannekuvauksessa) Miten käyttäjä toimii Miten järjestelmä reagoi karkealla tasolla täsmallisesti olioyhteistyönä Harri Laine 16/20
Käyttötapauksen läpivientimallit käyttötapauksen läpivientimalli taulukkona suoritustapa kuvaus tavasta, jolla tehtävä tehdään järjestelmän toiminta karkeahko kuvaus siitä, miten järjestelmä reagoi käyttäjän toimiin Käyttötapauksen läpivientimallit käyttäjätehtävä tehtävä asia Käyttäjätehtävä Valitse luokka (a) Suoritustapa 1. Vie kaavioikkunassa hiirikursori luokkasymbolin päälle 2. Näpäytä hiiren vasenta näppäintä Järjestelmän toiminta Järjestelmä tutkii oliko näpätyssä kohdassa luokkasymboli. Jos oli, niin vanha valintajoukko tyhjennetään ja valittua symbolia vastaava luokka lisätään valintajoukkoon. Valintajoukkoon kuuluvat näytetään ruudulla valittuina Harri Laine 17/20
Suunnittelun eteneminen Suunnittelussa järjestelmän toiminnan kuvausta tarkennetaan, pyrkimyksenä löytää olioiden yhteistyöketju toiminnan hoitamiseksi: Liikkeelle lähdetään käyttäjän toiminnan vastaanottavista olioista ja niiden luokista. Jacobssonin jaottelussa nämä ovat liittymäolioita, MVC:ssä näkymä- tai ohjainolioita. Liittymäoliolle määritellään käyttäjäoperaation vastaanottava(t) palvelu(t). Toiminta tarkennetaan toimenpiteiksi ja ehdoiksi, joiden vallitessa toimenpide suoritetaan. Suunnittelun eteneminen Kullekin toimenpiteelle valitaan suorittaja Tämä voi olla liittymäolio, siihen liitetty tieto-olio tai jokin ohjaus- tai apuolio. Oliot suorittavat toimenpiteitä omien vastuidensa mukaisesti. Jos suorittajalla ei vielä ole toimenpidettä vastaavaa palvelua (operaatiota), sille määritellään sellainen. kenelle palvelu pitäisi määritellä:» ensisijaisesti kohteelle = se, jonka tila muuttuu, jos kohteita on useita, onko joku näistä pääkohde, jakautuuko palvelu osiin suorittajaa valittaessa voidaan joutua määrittelemään uusi luokka, koska nykymallissa ei ole sopivaa. Harri Laine 18/20
Suunnittelun eteneminen Esim: hevosen satulointi hevonen.satuloi(satula)» jos ensisijaisesti hevosen tila muuttuu satula.kiinnity(hevonen)» jos ollaan ensijaisesti kiinnostuneita satuloiden tiloista (vapaana, käytössä) ratsastaja.satuloi(hevonen,satula)» ohjausolio hoitelee homman Suorittajia valittaessa sovelletaan hyviksi havaittuja suunittelumalleja (design pattern) Suunnittelun eteneminen Suorittajalla on oltava riittävästi tietoa palvelun suorittamiseksi. Lisätään tarvittaessa luokalle uusia ominaisuuksia tai palvelulle parametreja. Jos palvelulle lisättiin parametreja, varmistetaan, että palvelua käyttävät oliot ja palvelut kykenevät ne toimit-tamaan. Elleivät kykene, on suunnitelmaa iteroitava. Luokkaan voidaan myös liittää avustajia, joille voidaan delegoida osa toiminnasta. Olio voi käyttää vain tuntemiensa olioiden palveluja. Täten, jos toiminnon suorittamiseen tarvitaan avustajia, on määriteltävä, miten alkuperäinen olio tuntee nämä. Harri Laine 19/20
Suunnittelun eteneminen Tunteminen voi perustua: siihen, että avustava olio on yleisesti tunnettu (globaali), siihen, että avustaja ilmoitetaan avustuksen tarvitsijalle palvelua pyydettäessä (parametri) oliosta on tietorakenteiden avulla luotu yhteys avustavaan olioon. Avustusta määriteltäessä voidaan joutua määrittelemään olemassaoleville olioluokille uusia ominaisuuksia ja palveluja tai jopa uusia olioluokkia ja niille ominaisuuksia sekä palveluja. Myös uusien yhteyksien määrittely voi olla tarpeen. Oliorakenteet ja yhteistyö suunnitellaan samanaikaisesti Harri Laine 20/20