5. Suunnittelumallit. TTY Ohjelmistotekniikka

Samankaltaiset tiedostot
5. Suunnittelumallit. TTY Ohjelmistotekniikka

Ohjelmistoarkkitehtuurit kevät


Ohjelmistoarkkitehtuurit

Ohjelmistoarkkitehtuurit Kevät 2016 Suunnittelumallit

5. Design patterns. TTY Ohjelmistotekniikka

Ohjelmistoarkkitehtuurit Kevät 2014

TIE Ohjelmistojen suunnittelu

Oliosuunnittelu. Oliosuunnittelu

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

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

TIE Ohjelmistojen suunnittelu

12. Kehysarkkitehtuurit

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

Ohjelmistotekniikan menetelmät, suunnittelumalleja

Ohjelmistoarkkitehtuurit. Kevät

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

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

Suunnittelumallit (design patterns)

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

Ohjelmistoarkkitehtuurit. Syksy 2010

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

Ohjelmistotuotanto, s

Olio-ohjelmointi Johdanto suunnittelumalleihin. 1. Yleistä

Ratkaisumallien historia

Hirviö. Design Patterns

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

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

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

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

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

SEPA - Design Patterns

812341A Olio-ohjelmointi, I Johdanto

Ohjelmistoarkkitehtuurit. Syksy 2008

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

Ratkaisumallien hyväksikäyttö ohjelmistotyökaluissa

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

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

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

Ohjelmistokehykset ohjelmistorunkoja uudelleenkäyttö olioperustaisista ohjelmistorunko

Suunnittelumalleja, MVC. Juha Järvensivu 2008

Hirviö. Design Patterns

Ohjelmistoarkkitehtuurit

Ohjelmistoarkkitehtuurit. Kevät

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

Olio-ohjelmointi Suunnittelumallit Adapter ja Composite. 1. Adapter

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

Kertaus: yleistys-erikoistus ja perintä

Ohjelmistojen mallintaminen, suunnittelumalleja

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

Ohjelmistojen mallintaminen, kesä 2009

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

Viestinvälitysarkkitehtuurit

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

Ohjelmistojen mallintaminen, mallintaminen ja UML

Ohjelmistoarkkitehtuurit. Syksy 2007

UML:n yleiskatsaus. UML:n osat:

UML -mallinnus TILAKAAVIO

Ohjelmistojen suunnittelu

Ohjelmistojen mallintaminen

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

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

Ohjelmistotekniikan menetelmät, kesä 2008

Uudelleenkäytön jako kahteen

T Henkilökohtainen harjoitus: FASTAXON

Ohjelmistotekniikan menetelmät, kevät 2008

Ohjelmistojen mallintaminen, kesä 2010

Malliperustainen ohjelmistokehitys - MDE Pasi Lehtimäki

Muusta kuin vesisioista

Ohjelmistojen mallintaminen olioiden elinkaaret - tilakaavio Harri Laine 1

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

Suunnitteluratkaisut ja niiden arviointi sulautetuissa järjestelmissä

Web Services tietokantaohjelmoinnin perusteet

Graafisen käyttöliittymän ohjelmointi Syksy 2013

UML-kielen formalisointi Object-Z:lla

Veto-visualisointityökalu

Kehyspohjainen ohjelmistokehitys

Johdanto Kehystyypit Kehysten arkkitehtuurilähestymistavat Kehykset ja suunnittelumallit Kehysten etuja ja ongelmia Yhteenvetoa

COTOOL dokumentaatio SEPA: Refaktorointi

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

Ohjelmistotekniikan menetelmät, UML

A TIETORAKENTEET JA ALGORITMIT

Ohjelmistojen mallintaminen Olioiden yhteistyö Harri Laine 1

Sisällys. 15. Lohkot. Lohkot. Lohkot

Osio 4: Graafinen käyttöliittymä

Plugin-pohjaiset sovellukset arkkitehtuurit

Mobiiliohjelmointi,, 5op

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

13/20: Kierrätys kannattaa koodaamisessakin

11. Kehysarkkitehtuurit

Ohjelmistoarkkitehtuurit kehysarkkitehtuurit. Kevät 2014

Viestinvälitysarkkitehtuurit Lähtökohta:

Ohjelmistoarkkitehtuurit, syksy

T Hypermediadokumentin laatiminen. Sisältö. Tavoitteet. Mitä on www-ohjelmointi? Arkkitehtuuri (yleisesti) Interaktiivisuuden keinot

Ohjelmistojen mallintaminen kertausta Harri Laine 1

Ohjelmistoarkkitehtuurit Kevät 2014

Ohjelmistoarkkitehtuurin suunnittelu

UML - unified modeling language

Tiedonsiirto- ja rajapintastandardit

Transkriptio:

5. Suunnittelumallit Suunnittelumallin käsite Suunnittelumallien hyötyjä Suunnittelumallien kuvaaminen Antisuunnittelumallit Esimerkki: Rekursiokooste Suunnittelumallit ja kehykset Suunnittelumallit ja UML Suunnittelumallit eivät ole... Yhteenveto http://www.enteract.com/~bradapp/docs/patterns-intro.html http://www.hillside.net/patterns/ 1

Suunnittelumallin käsitek 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 Paljon käytetty insinöörialoilla Erityisen hyödyllinen ajatus ohjelmistotekniikassa 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. 3

Mikä on suunnittelumalli? Suunnittelumalli Yleinen ratkaisu usein esiintyvään arkkitehtuuritai suunnitteluongelmaan tietyssä yhteydessä. 4

Selitystä Yleinen ratkaisu... ei liity tiettyyn kieleen tai teknologiaan,. kuvataan yleisellä tavalla... usein esiintyvään... täytyy olla useita soveltamiskohteita (esim. GoF: 3)... arkkitehtuuri- tai suunnitteluongelmaan... sovelletaan ohjelmistotekniikassa arkkitehtuurin ja yksityiskohtaisen suunnittelun tasolla... tietyssä yhteydessä. ongelma esiintyy yhteydessä, josta seuraa erilaisia vaatimuksia ja voimia 5

Suunnittelumallien hyötyj 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. 6

Suunnittelumallin kuvaus Keskeiset osat: Nimi Ongelma Ratkaisu Seuraukset Toteutus Kuvaava ytimekäs nimi, tulee osaksi yhteistä sanastoa Ongelman ja siihen vaikuttavien tekijöiden kuvaus, oletukset, esimerkki Luokkien ja olioiden organisointi ongelman ratkaisemiseksi (esim. käyttäen UML:ää) Ratkaisun edut ja haitat Erilaiset toteutustavat, toteutus eri kielillä ym. toteutukseen liittyvät näkökulmat 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 8

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

Dokumentoituja antisuunnittelumalleja The Blob Lava flow Golden Hammer Spaghetti Code Cut-and-Paste Programming 10

Antisuunnittelumallien oireita Huono ylläpidettävyys Huono uudelleenkäytettävyys Huono laajennettavuus Vaikeasti ymmärrettävä Tehottomuus 11

Vihjeitä antisuunnittelumallien käytk ytöstä Koodin toistoa Mahdolliset vaihtoehdot jollekin asialle kiinnitetään staattisesti koodissa Suuria luokkia ja operaatioita 12

Mitä huonoja ratkaisutapoja olet tunnistanut oliojärjestelmiss rjestelmissä? 13

Esimerkki: Rekursiokooste Ongelma: kuinka hallita hierarkkisesti järjestettyä oliokokoelmaa niin, että kokoelman käyttäjän ei tarvitse tuntea rakenteen organisointitapaa? Käyttäjä tee joku operaatio lehtiolioille 14

Suunnittelumallin kehittäminen (1) Ensimmäinen ratkaisu: kaksi tasoa Composite forall() * children Leaf operation() if X is Composite then X.forall() else X.operation;... For all children c: c.operation() Seuraukset: - Koosteoliot ja lehtioliot käsitellään eri tavalla koodissa - Vaikea laajentaa ratkaisua uusille kooste- ja lehtioliotyypeille - Sallii vain kaksi tasoa if X is Composite then Op1(, X, ) else Op2(, X, );... 15

Suunnittelumallin kehittäminen (2) Toinen ratkaisu: Yhdistetään kooste- ja lehtiolioluokat * children Item operation() íf I have children then for all children c: c.operation() else dosomething(); Seuraukset: - Kooste- ja lehtioliot käsitellään samalla tavalla - Rajoittamaton hierarkia - Vain yhden tyyppisiä olioita -> koodiin tulee tyyppihaarautumisia Client: item.operation() 16

Suunnittelumallin kehittäminen (3) Kolmas ratkaisu: Eri tyyppisiä olioita Seuraukset: - Kuten edellä, paitsi että erityyppiset oliot eivät aiheuta haarautumisia koodissa (dosomething1&2) - Silti, yksi tyyppipohjainen haarautuminen jää: kooste vs. lehti * Item children operation() íf I have children then for all children c: c.operation() else dosomething1() Item1 operation() Item2 operation() íf I have children then for all children c: c.operation() else dosomething2() 17

Suunnittelumallin kehittäminen (4) Neljäs ratkaisu: Erotetaan kooste- ja lehtiluokat * children Item operation() Item1 Composite dosomething operation() operation() for all children c: c.operation() 18

Rekursiokooste suunnittelumalli Nimi: Rekursiokooste 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() 19

Rekursiokooste (jatkuu) Soveltuu, kun: haluat esittää hierarkkisesti järjestettyjä oliokokoelmia, haluat että oliokokoelman käyttäjät eivät tule riippuvaiseksi kokoelman organsiointitavasta. Seuraukset: Kooste- ja lehtiolion ero 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 20

Rekursiokooste (jatkuu) Toteutusnäkökohtia Tarvitaanko linkit lehti kooste molempiin suuntiin? Voiko samalla oliolla olla useita kooste-vanhempia? Yhteinen rajapinta vs. tyyppiturvallisuus? Onko lapsiolioilla järjestys? Kuka luo ja hävittää rakenteen? 21

Esimerkki soveltamisesta SourceManager Source delete() print() * children File delete() print() Folder delete() print() add(source) For all children c: c.delete(); Delete folder 22

Esimerkki soveltamisesta Graphicaltem draw * children Rectangle Circle FigGroup draw draw draw for all children c: c.draw; 23

Suunnittelumallit ja kehykset Graphicaltem draw * children Kehys Rectangle Circle FigGroup draw draw draw Sovellus for all children c: c.draw; 24

Suunnittelumalli ja sen ilmentymä Suunnittelumallin louhinta Suunnittelumalliluettelo Suunnittelumalli Osittainen suunnittelumallin ilmentymä Kehys Suunnittelumallin ilmentymä Sovellus Suunnittelumallin toteutus 25

Suunnittelumallit ja UML Composite Item Statement * execute() Leaf Composite SimpleStatement execute() Block execute() children 26

Suunnittelumallit ja UML EventSource register(statemachine) * * informs StateMachine 1 run(state) handle(event) Singleton State Observer 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() 27

Stereotyyppien käyttk yttö <<Composite:item>> Statement * execute() <<Composite:leaf>> SimpleStatement execute() <<Composite: composite>> Block execute() children 28

Suunnittelumallit eivät t ole yleinen lääke ohjelmiston laadun parantamiseen; ongelmattomia: arkkitehtuurin monimutkaistuminen mahdollinen ongelman yliratkaisu (overkill) tehokkuus: runsaasti dynaamista sidontaa olion identiteetti hämärtyy: olioskitsofrenia tarvitsevat hyvän dokumentoinnin järjestelmässä 29

Yhteenvetoa Suunnittelumallit antavat hyväksi havaittuja ratkaisuja yleisiin suunnitteluongelmiin Suunnittelumallit ovat kehysten rakenneosia Käytä suunnittelumallia vasta kun ongelma on selvästi ymmärretty Suunnittelumallit ovat kokemusperäistä tietoa, eivät innovaatioita 30