http://www.enteract.com/~bradapp/docs/patterns-intro.html http://www.hillside.net/patterns/



Samankaltaiset tiedostot
Ohjelmistoarkkitehtuurit kevät

5. Suunnittelumallit. TTY Ohjelmistotekniikka

5. Suunnittelumallit. TTY Ohjelmistotekniikka

Ohjelmistoarkkitehtuurit

Ohjelmistoarkkitehtuurit Kevät 2016 Suunnittelumallit

Ohjelmistoarkkitehtuurit Kevät 2014

5. Design patterns. TTY Ohjelmistotekniikka

TIE Ohjelmistojen suunnittelu

TIE Ohjelmistojen suunnittelu

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

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

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

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Ohjelmistoarkkitehtuurit. Kevät

Ohjelmistoarkkitehtuurit. Syksy 2008

Suunnittelumallit (design patterns)

Ohjelmistoarkkitehtuurit. Syksy 2010

Oliosuunnittelu. Oliosuunnittelu

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

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

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

12. Kehysarkkitehtuurit

Ohjelmistoarkkitehtuurit. Syksy 2007

Ohjelmistotekniikan menetelmät, suunnittelumalleja

Ratkaisumallien historia

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

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

Olio-ohjelmointi Johdanto suunnittelumalleihin. 1. Yleistä

Hirviö. Design Patterns

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

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

Ohjelmistojen mallintaminen

Ohjelmistoarkkitehtuurit Kevät 2014

Ohjelmistojen mallintaminen, mallintaminen ja UML

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

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

UML -mallinnus TILAKAAVIO

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

Hirviö. Design Patterns

Viestinvälitysarkkitehtuurit

Suunnitteluratkaisut ja niiden arviointi sulautetuissa järjestelmissä

Ohjelmistotuotanto, s

Suunnittelumalleja, MVC. Juha Järvensivu 2008

Olio-ohjelmointi Suunnittelumallit Adapter ja Composite. 1. Adapter

Ohjelmistoarkkitehtuurit Koneenohjausmaailmaa. Kevät 2016

Ratkaisumallien hyväksikäyttö ohjelmistotyökaluissa

UML-kielen formalisointi Object-Z:lla

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

Ohjelmoinnin peruskurssien laaja oppimäärä

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

Ohjelmistojen mallintaminen, kesä 2010

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

2 Ohjelmistoarkkitehtuurien kuvaus

Ohjelmistojen mallintaminen olioiden elinkaaret - tilakaavio Harri Laine 1

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

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

Graafisen käyttöliittymän ohjelmointi Syksy 2013

SEPA - Design Patterns

Kertaus: yleistys-erikoistus ja perintä

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

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

812341A Olio-ohjelmointi, I Johdanto

Uudelleenkäytön jako kahteen

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

UML- mallinnus: Tilakaavio

Ohjelmistoarkkitehtuurit. Kevät 2014 Kertausta

UML:n yleiskatsaus. UML:n osat:

Ohjelmistojen suunnittelu

Veto-visualisointityökalu

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

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

Ohjelmistojen mallintaminen, kesä 2009

COTOOL dokumentaatio SEPA: Refaktorointi

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

Ohjelmistoarkkitehtuurit Kevät 2016 Johdantoa

T Henkilökohtainen harjoitus: FASTAXON

Ohjelmistotekniikan menetelmät, arkkitehtuuria ja rajapintoja

Ohjelmistotekniikan menetelmät, UML

Ohjelmistojen mallintaminen, sekvenssikaaviot

UML Luokkakaavio 14:41

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

Viestinvälitysarkkitehtuurit Lähtökohta:

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

Ohjelmistojen mallintaminen, kertausta

T Ohjelmistojen määrittely- ja suunnittelumenetelmät Harjoitustyöraportti TNT - Tarkistetaan Ne Tentit Arkkitehtuuri- ja suunnittelumalli

Analyysi on tulkkaamista

Ohjelmistojen mallintaminen, suunnittelumalleja

Ohjelmistotekniikka: Luento 7 Jouni Lappalainen

JC#Leijonan#Luola# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Kaikki%oikeudet%pidätetään!% Jukka%Heikkilä,%Logotiimi%Oy%2013,%2014%

Yhteenveto. Menettelytavat

Ohjelmistoarkkitehtuurit, syksy

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

Ohjelmistotekniikan menetelmät, kesä 2008

Suunnittelumallien systemaattinen yhdistäminen

Suunnittelumallien käyttö ohjelmistosuunnittelussa

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

Tarjolla tänää: Ohjelmiston toteutuksesta. Kuinka tulla hyväksi ohjelmoijaksi? CRC-kortit. Testilähtöinen kehittäminen JOT2007. Uudelleenrakentaminen

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmistojen mallinnus Ohjelmistoarkkitehtuuri Harri Laine 1

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

Transkriptio:

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/ Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Suunnittelumallin käsite 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 Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 2

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. Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 3

Mikä on suunnittelumalli? Suunnittelumalli Yleinen ratkaisu usein esiintyvään arkkitehtuuritai suunnitteluongelmaan tietyssä yhteydessä. Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 4

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 Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 5

Suunnittelumallien hyötyjä Suunnittelumallit... tuovat piilossa olevan suunnittelutietämyksen kaikkien saataville; auttavat järjestelmän dokumentoinnissa; antavat uuden korkeamman tason toteutusvälineen; toimivat arkkitehtuurin rakennuspalikoina; antavat suunnittelijoille yhteisen sanaston. Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 6

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 Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 7

"Gang of Four kirja, GoF: GoF:in kuvausformaatti 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 Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 8

Esimerkki suunnittelumallista: Rekursiokooste Ongelma: Käyttäjä tee joku operaatio lehtiolioille Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 9

Rekursiokooste (Composite) suunnittelumalli Nimi: Rekursiokooste Konteksti: Hierakkinen 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: Item operation() * children Leaf operation() Composite operation() For all children c: c.operation() Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 10

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 Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 11

Esimerkki soveltamisesta SourceManager <<interface>> Source delete() print() * children File delete() print() Folder delete() print() add(source) For all children c: c.delete(); Delete folder Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 12

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. Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 13

Dokumentoituja antisuunnittelumalleja The Blob Lava flow Golden Hammer Spaghetti Code Cut-and-Paste Programming http://www.antipatterns.com/dev_cat.htm Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 14

Antisuunnittelumallien oireita Huono ylläpidettävyys Huono uudelleenkäytettävyys Huono laajennettavuus Vaikeasti ymmärrettävä Tehottomuus Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 15

Mitä huonoja ratkaisutapoja olet tunnistanut oliojärjestelmissä? Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 16

Suunnittelumallit ja UML: Kollaboraatiosymboli Item Composite SourceManager Source delete() print() * Leaf children Composite File delete() print() Folder delete() print() add(source) For all children c: c.delete(); Delete folder Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 17

Suunnittelumallit ja UML: Esimerkki EventSource register(statemachine) * informs * StateMachine run(state) handle(event) 1 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() Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 18

Suunnittelumallit ja UML: Stereotyypit SourceManager <<Composite:Item>> Source delete() print() * children <<Composite:Leaf>> File delete() print() <<Composite:Composite>> Folder delete() print() add(source) For all children c: c.delete(); Delete folder Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 19

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 Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 20

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. Malli B Malli A Malli C Alexanderin mallikieli Malli D Malli E Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 21

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 Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 22

Esimerkki: Mallikieli koneenohjausjärjestelmille Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 23

Mallikielen organisointitapoja Yleistysrakenne: Malli A on abstrakti kuvaus ratkaisusta, joka voidaan tarkemmin toteuttaa tavalla B tai tavalla C. Malli A Malli B Malli C Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 24

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 Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 25

Mallikielen organisointitapoja Sovellusalueen mukainen rakenne, esimerkiksi domainmalliin perustuen Helpottaa kysymystä: mitä mallia voisi tietyssä tilanteessa soveltaa? Antaa viitteitä puuttuvista malleista Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 26

Suunnittelumallit eivät ole yleinen lääke ohjelmiston laadun parantamiseen; ongelmattomia: arkkitehtuurin monimutkaistuminen mahdollinen ongelman yliratkaisu (overkill) tehokkuushäviö: runsaasti dynaamista sidontaa ja kutsun siirtämistä olion identiteetti hämärtyy: olioskitsofrenia tarvitsevat hyvän dokumentoinnin järjestelmässä Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 27

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 Suunnittelumallit organisoidaan mallikieleksi käytön helpottamiseksi Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 28