Ohjelmistoarkkitehtuurit kevät

Samankaltaiset tiedostot

5. Suunnittelumallit. TTY Ohjelmistotekniikka

5. Suunnittelumallit. TTY Ohjelmistotekniikka

Ohjelmistoarkkitehtuurit

Ohjelmistoarkkitehtuurit Kevät 2016 Suunnittelumallit

5. Design patterns. TTY Ohjelmistotekniikka

Ohjelmistoarkkitehtuurit Kevät 2014

TIE Ohjelmistojen suunnittelu

Tarjolla tänään: Sanastoa Koneenohjausjärjestelmien suunnittelumallit. Pattern Architecture Style. GoF. Design pattern

Ohjelmistoarkkitehtuurit. Kevät

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. VII Suunnittelumallit Adapter ja Composite

TIE Ohjelmistojen suunnittelu

Sisällys. Ratkaisumallien historia. Ratkaisumalli. Ratkaisumalli [2] Esimerkki: Composite [2] Esimerkki: Composite. Jaakko Vuolasto 25.1.

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Ohjelmistoarkkitehtuurit. Syksy 2010

Oliosuunnittelu. Oliosuunnittelu

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton

Suunnittelumallit (design patterns)

Ohjelmistoarkkitehtuurit Kevät käytäntöjä

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. VI Johdanto suunnittelumalleihin

Ohjelmistotekniikan menetelmät, suunnittelumalleja

Ratkaisumallien historia

Olio-ohjelmointi Johdanto suunnittelumalleihin. 1. Yleistä

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. VIII Suunnittelumallit Observer ja State

Ohjelmistoarkkitehtuurit Kevät käytäntöjä

Käyttöliittymät II. Käyttöliittymät I Kertaus peruskurssilta. Keskeisin kälikurssilla opittu asia?

T SEPA - päiväkirja: Design Patterns. ETL työkalu

12. Kehysarkkitehtuurit

Ohjelmistoarkkitehtuurit. Syksy 2008

Hirviö. Design Patterns

Ohjelmistoarkkitehtuurit Kevät 2014

T SEPA - päiväkirja: Design Patterns. ETL työkalu

Ohjelmistojen mallintaminen, mallintaminen ja UML

Ohjelmistotuotanto, s

Ratkaisumallien hyväksikäyttö ohjelmistotyökaluissa

Ohjelmistojen mallintaminen

Ohjelmistoarkkitehtuurit. Syksy 2007

Suunnittelumalleja, MVC. Juha Järvensivu 2008

Suunnitteluratkaisut ja niiden arviointi sulautetuissa järjestelmissä

Suunnittelumallit. OULUN YLIOPISTO Tietojenkäsittelytieteiden laitos Oliosuuntautunut analyysi ja -suunnittelu 27. joulukuuta 2003

Hieman lisää malleista ja niiden hyödyntämisestä

SEPA - Design Patterns

Ohjelmistoarkkitehtuurit Koneenohjausmaailmaa. Kevät 2016

Olio-ohjelmointi Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton. 1. Proxy (Edustaja)

SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T

Ohjelmistojen mallintaminen, kesä 2009

UML -mallinnus TILAKAAVIO

Palvelun versio 1.0 Toimeenpanopalvelun tunnus (ks. M ) 10fea, 9c2f, 4760, 9095, f4f9295f4b19

Malliperustainen ohjelmistokehitys - MDE Pasi Lehtimäki

Ohjelmistojen mallintaminen, suunnittelumalleja

Graafisen käyttöliittymän ohjelmointi Syksy 2013

UML-kielen formalisointi Object-Z:lla

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.

Ohjelmistoarkkitehtuurin suunnittelu

812341A Olio-ohjelmointi, I Johdanto

Hirviö. Design Patterns

2 Ohjelmistoarkkitehtuurien kuvaus

Ohjelmistotekniikan menetelmät, kesä 2008

Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta.

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

TIE Samuel Lahtinen. Lyhyt UML-opas. UML -pikaesittely

Ohjelmistojen suunnittelu

UML:n yleiskatsaus. UML:n osat:

Ohjelmistojen mallintaminen, kesä 2010

Viestinvälitysarkkitehtuurit Lähtökohta:

Olio-ohjelmointi Suunnittelumallit Adapter ja Composite. 1. Adapter

HELIA 1 (14) Outi Virkki Käyttöliittymät ja ohjlmiston suunnittelu

Kertaus: yleistys-erikoistus ja perintä

Uudelleenkäytön jako kahteen

Viestinvälitysarkkitehtuurit

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmistotekniikan menetelmät, kevät 2008

Ohjelmistotekniikan menetelmät, UML

Ohjelmistoarkkitehtuurit Kevät 2016 Johdantoa

KOKOS-seminaari Ohjelmistoarkkitehtuuri osana käyttäjäkeskeistä suunnittelua

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Ohjelmistoarkkitehtuurit. Kevät 2014 Kertausta

Suunnittelumallit turva-automaatiossa

Helsingin yliopisto, Tietojenkäsittelytieteen laitos Ohjelmistotuotanto, kurssikoe , H. Laine Arvostelu

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

Plugin-pohjaiset sovellukset arkkitehtuurit

T Henkilökohtainen harjoitus: FASTAXON

Tilakaaviot, sekvenssikaaviot (Haikala, Märijärvi ss , )

COTOOL dokumentaatio SEPA: Refaktorointi

Veto-visualisointityökalu

Ohjelmistojen mallintaminen olioiden elinkaaret - tilakaavio Harri Laine 1

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. II Johdanto olio-ohjelmointiin

Ohjelmistojen mallintaminen, sekvenssikaaviot

Ohjelmistoarkkitehtuurit, syksy

Ohjelmistoarkkitehtuurit kevät

Ohjelmistotekniikan menetelmät, arkkitehtuuria ja rajapintoja

Ohjelmoinnin peruskurssien laaja oppimäärä

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

Ohjelmistoarkkitehtuurin suunnitteluperiaatteita

Analyysi on tulkkaamista

13/20: Kierrätys kannattaa koodaamisessakin

2. Olio-ohjelmoinnin perusteita 2.1

Muusta kuin vesisioista

Ohjelmistokehykset ohjelmistorunkoja uudelleenkäyttö olioperustaisista ohjelmistorunko

(Laajojen) Oliojärjestelmien testaus

Transkriptio:

Ohjelmistoarkkitehtuurit Kevät 2011-2012 Johannes Koskinen http://www.cs.tut.fi/~ohar/ 5. Suunnittelumallit Suunnittelumallin käsite Suunnittelumallien hyötyjä Suunnittelumallien kuvaaminen Esimerkki: Rekursiokooste Antisuunnittelumallit Suunnittelumallit ja UML Mallikielet Suunnittelumallit eivät ole... Yhteenveto http://www.enteract.com/~bradapp/docs/patterns-intro.html http://www.hillside.net/patterns/ 2 Suunnittelumallin käsite: tausta Cristopher Alexander et al.: A Pattern Language, 1977 Cristopher Alexander: The Timeless Way of Building, 1979 Maailma koostuu toistuvista tiettyjen mallien ilmentymistä Esimerkki: Jokainen maanviljelijä osaa rakentaa ladon - miksi? Malli (pattern) on yleistä suunnitteluosaamista, joka olisi saatettava kaikkien tarvitsijoiden ulottuville Alexander: mallien käyttö johtaa hyvään laatuun Paljon käytetty eri muodoissa insinöörialoilla Erityisen hyödyllinen ajatus ohjelmistotekniikassa 3 1

Esimerkki: Ikkunat ja ovet hirsitalossa hirret painuvat kasaan Ongelma: ikkunat ja ovet ovat kiinteitä, vaikka hirsiseinä liikkuu ja painuu kasaan. Ratkaisu: ikkunoiden ja ovien karmeja ei kiinnitetä suoraan seinään, vaan "karaan", joka liikkuu vapaasti hirsiin tehdyssä urassa. 4 Tukikaari (Flying buttress) 5 Mikä on suunnittelumalli? Suunnittelumalli Yleinen ratkaisu usein esiintyvään ohjelmistojen arkkitehtuuri- tai suunnitteluongelmaan tietyssä yhteydessä. 6 2

Selitystä Yleinen ratkaisu... ei liity tiettyyn kieleen tai teknologiaan, kuvataan yleisellä tavalla... usein esiintyvään... täytyy olla käytännön validoima (esim. GoF: 3 esimerkkiä)... arkkitehtuuri- tai suunnitteluongelmaan... sovelletaan ohjelmistotekniikassa arkkitehtuurin ja yksityiskohtaisen suunnittelun tasolla... tietyssä yhteydessä. ongelma esiintyy yhteydessä, josta seuraa erilaisia vaatimuksia ja voimia 7 Suunnittelumallien hyötyjä Suunnittelumallit... tuovat piilossa olevaa suunnittelutietämystä kaikkien saataville; auttavat järjestelmän dokumentoinnissa; antavat uuden korkeamman tason toteutusvälineen; toimivat arkkitehtuurin rakennuspalikoina; antavat suunnittelijoille yhteisen sanaston. 8 Suunnittelumallin kuvaus Keskeiset osat: Nimi Konteksti Ongelma Ratkaisu Seuraukset Kuvaava ytimekäs nimi, tulee osaksi yhteistä sanastoa Lähtötilanne Ongelman ja siihen vaikuttavien tekijöiden kuvaus, oletukset, esimerkki Luokkien ja olioiden organisointi ongelman ratkaisemiseksi (esim. käyttäen UML:ää) Lopputilanne, ratkaisun edut ja haitat 9 3

GoF:in kuvausformaatti "Gang of Four kirja, GoF: Gamma E., Helm R., Johnson R., Vlissides J.: Design Patterns - Elements of Reusable Object-Oriented Software. Addison-Wesley 1995. Name (and category) Intent Also known as Motivation Applicability Structure Participants Collaborations Consequences Implementation Sample code Known uses Related patterns 10 Esimerkki suunnittelumallista: Rekursiokooste Ongelma: Olioita käyttävä komponentti tee joku operaatio lehtiolioille 11 Rekursiokooste (Composite) suunnittelumalli Nimi: Rekursiokooste Konteksti: Hierarkkinen oliokokoelma, jonka (lehti)olioille halutaan tehdä jokin operaatio. Ongelma: Kuinka hallita hierarkkisesti järjestettyä oliokokoelmaa niin, että kokoelman käyttäjän ei tarvitse tuntea rakenteen organisointitapaa? Ratkaisu: Käyttäjä Item operation() * children Leaf operation() Composite operation() For all children c: c.operation() 12 4

Rekursiokooste (jatkuu) Seuraukset: Hierarkiarakenne ei näy käyttäjän koodissa Käyttäjän koodi yksinkertaistuu Rakenteeseen on helppo lisätä uusia kooste- ja lehtiluokkia (ei näy käyttäjälle) Pieni tehokkuusrasite kutsun siirtämisen takia 13 Esimerkki soveltamisesta SourceManager <<interface>> Source * children File Folder add(source) For all children c: c.; Delete folder 14 Kysyttävää? 15 5

Antisuunnittelumallit Ongelma Suunnittelumalli Hyvä ratkaisu Seuraukset Antisuunnittelumalli Huono ratkaisu Oireet Muokkaus Antisuunnittelumalli = huono ratkaisu + hyvä ratkaisu Suunnittelumalli = ongelma + ratkaisu Brown W.J. et al.: Antipatterns - Refactoring Software, Architectures, and Projects in Crisis. Wiley 1998. 16 Dokumentoituja antisuunnittelumalleja The Blob Lava flow Golden Hammer Spaghetti Code Cut-and-Paste Programming http://www.antipatterns.com/ http://en.wikipedia.org/wiki/anti-pattern 17 Antisuunnittelumallien oireita Huono ylläpidettävyys Huono uudelleenkäytettävyys Huono laajennettavuus Vaikeasti ymmärrettävä Tehottomuus 18 6

Mitä huonoja ratkaisutapoja olet tunnistanut oliojärjestelmissä? 19 Suunnittelumallit ja UML: Kollaboraatiosymboli Item Composite SourceManager Source Leaf * children Composite File Folder add(source) For all children c: c.; Delete folder 20 Suunnittelumallit ja UML: Esimerkki EventSource StateMachine 1 * * register(statemachine) run(state) informs handle(event) Singleton State Observer 1 Event source(): Object current.exit(); current = current.transit(e); current.entry(); uses 0..1 current State transit(event): State entry() exit() Event1 source(): Object Event2 source(): Object StateA transit(event): State entry() exit() StateB transit(event): State entry() exit() 21 7

Suunnittelumallit ja UML: Stereotyypit SourceManager <<Composite_Item>> Source * children <<Composite_Leaf>> File <<Composite_Composite>> Folder add(source) For all children c: c.; Delete folder 22 Kysyttävää? 23 Mallikielet Suunnittelumallikieli: Systemaattisesti organisoitu kokoelma suunnittelumalleja, jotka kattavat jonkin ongelma-alueen keskeiset ratkaisut. Systemaattisesti organisoitu: mallit liittyvät toisiinsa joillakin suhteilla (esim. hierarkkinen, verkko), jotka auttavat valitsemaan sopivat mallit sopivassa järjestyksessä. => Kieltä voidaan soveltaa kokonaisuutena, ideaalisti se generoi järjestelmän arkkitehtuurin 24 8

Mallikielen organisointitapoja Hierarkkinen rakenne: Käytä ensin mallia A, sen jälkeen mallia B tai C osaongelmien ratkaisuun, jos käytät B:tä, käytä sen jälkeen mallia D tai E jne. Mallit koskevat ko. kohteen pienempiä ja pienempiä osia. Alexanderin mallikieli Malli D Malli B Malli A Malli E Malli C 25 Mallikielen organisointitapoja Verkkorakenne: Malli A Malli E Jos olet käyttänyt mallia C, on mahdollista, että mallit A ja D ja E saattaisivat auttaa jonkin C:stä seuraavan ongelman ratkaisussa. Mallin C soveltaminen luo kontekstin Malleille A, D ja E. Malli B Malli D Malli C 26 Esimerkki: Mallikieli koneenohjausjärjestelmille 27 9

Mallikielen organisointitapoja Yleistysrakenne: Malli A on abstrakti kuvaus ratkaisusta, joka voidaan tarkemmin toteuttaa tavalla B tai tavalla C. Malli A Malli B Malli C 28 Mallikielen organisointitapoja Implisiittinen rakenne: Malli A pre post Kullekin mallille annetaan esija jälkikonteksti: missä tilanteessa mallia voidaan soveltaa, ja mihin tilanteeseen malli jättää arkkitehtuurin. Jos mallin A jälkikonteksti vastaa mallin B esikontekstia, voi B:tä soveltaa A:n jälkeen = pre Malli B post 29 Mallikielen organisointitapoja Sovellusalueen mukainen rakenne, esimerkiksi domain-malliin perustuen Helpottaa kysymystä: mitä mallia voisi tietyssä tilanteessa soveltaa? Antaa viitteitä puuttuvista malleista 30 10

Suunnittelumallit eivät ole yleinen lääke ohjelmiston laadun parantamiseen; ongelmattomia: arkkitehtuurin monimutkaistuminen mahdollinen ongelman yliratkaisu tehokkuushäviö: runsaasti dynaamista sidontaa ja kutsun siirtämistä olion identiteetti hämärtyy: olioskitsofrenia tarvitsevat hyvän dokumentoinnin järjestelmässä 31 Yhteenvetoa Suunnittelumallit antavat hyväksi havaittuja ratkaisuja yleisiin suunnitteluongelmiin Käytä suunnittelumallia vasta kun ongelma on selvästi ymmärretty Suunnittelumallit ovat kokemusperäistä tietoa, eivät innovaatioita Antisuunnittelumallit auttavat tunnistamaan ongelmakohtia Suunnittelumallit organisoidaan mallikieleksi käytön helpottamiseksi 32 Kysyttävää? 33 11