Ohjelmistoarkkitehtuurit Kevät 2016 Suunnittelumallit



Samankaltaiset tiedostot
Ohjelmistoarkkitehtuurit kevät


5. Suunnittelumallit. TTY Ohjelmistotekniikka

5. Suunnittelumallit. TTY Ohjelmistotekniikka

Ohjelmistoarkkitehtuurit

Ohjelmistoarkkitehtuurit Kevät 2014

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

5. Design patterns. TTY Ohjelmistotekniikka

Ohjelmistoarkkitehtuurit. Kevät

Ohjelmistoarkkitehtuurit. Syksy 2008

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Ohjelmistoarkkitehtuurit. Syksy 2010

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

TIE Ohjelmistojen suunnittelu

Ohjelmistoarkkitehtuurit. Syksy 2007

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.

TIE Ohjelmistojen suunnittelu

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

Suunnittelumallit (design patterns)

Suunnitteluratkaisut ja niiden arviointi sulautetuissa järjestelmissä

Ohjelmistoarkkitehtuurit Kevät 2014

Ohjelmistoarkkitehtuurit Koneenohjausmaailmaa. Kevät 2016

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

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

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

Oliosuunnittelu. Oliosuunnittelu

Ratkaisumallien historia

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

Ohjelmistotekniikan menetelmät, suunnittelumalleja

Olio-ohjelmointi Johdanto suunnittelumalleihin. 1. Yleistä

12. Kehysarkkitehtuurit

Graafisen käyttöliittymän ohjelmointi Syksy 2013

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

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

Hirviö. Design Patterns

SEPA - Design Patterns

Suunnittelumalleja, MVC. Juha Järvensivu 2008

UML-kielen formalisointi Object-Z:lla

Ohjelmistoarkkitehtuurit Kevät 2016 Johdantoa

2 Ohjelmistoarkkitehtuurien kuvaus

.NET ajoympäristö. Juha Järvensivu 2007

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

Veto-visualisointityökalu

Hirviö. Design Patterns

Ohjelmistojen mallintaminen, mallintaminen ja UML

Ohjelmistoarkkitehtuurin suunnittelu

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

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

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

Ratkaisumallien hyväksikäyttö ohjelmistotyökaluissa

13/20: Kierrätys kannattaa koodaamisessakin

Ohjelmistojen mallintaminen

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

Ohjelmistojen suunnittelu

812341A Olio-ohjelmointi, I Johdanto

Viestinvälitysarkkitehtuurit Lähtökohta:

Viestinvälitysarkkitehtuurit

Olio-ohjelmointi Suunnittelumallit Adapter ja Composite. 1. Adapter

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

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

Kertaus: yleistys-erikoistus ja perintä

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Ohjelmistokehykset (software frameworks)

SEPA päiväkirja. Aihe: Suunnittelumallit Tekijät: Tuukka Laakso ja Antti Kettunen

Koodimalli Code Model

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

Ohjelmoinnin peruskurssien laaja oppimäärä

1. Olio-ohjelmointi 1.1

Malliperustainen ohjelmistokehitys - MDE Pasi Lehtimäki

Ohjelmistoarkkitehtuurit kevät

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Ohjelmistoarkkitehtuurit Komponentit Kevät 2014

UML:n yleiskatsaus. UML:n osat:

Ohjelmistoarkkitehtuurit. Kevät

Ohjelmistokehykset ohjelmistorunkoja uudelleenkäyttö olioperustaisista ohjelmistorunko

Ohjelmistoarkkitehtuurit kevät

Komponentit ja rajapinnat

Muusta kuin vesisioista

Ohjelmistoarkkitehtuurit, syksy

3. Komponentit ja rajapinnat

Case: Avoimen lähdekoodin ohjelmistojen hyödyntäminen Lahdessa

15. Ohjelmoinnin tekniikkaa 15.1

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

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

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

1 Johdanto. TTY Ohjelmistotekniikka. Ohjelmistoarkkitehtuurit Syksy 2008

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Ohjelmistotuotanto, s

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

T Henkilökohtainen harjoitus: FASTAXON

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Osio 4: Graafinen käyttöliittymä

Ohjelmistoarkkitehtuurin suunnitteluperiaatteita

Ohjelmistojen mallintaminen, kesä 2010

Tietojärjestelmäarkkitehtuurit

TIE Principles of Programming Languages CEYLON

Ohjelmistokehykset (software frameworks)

Transkriptio:

Ohjelmistoarkkitehtuurit Kevät 2016 Suunnittelumallit Samuel Lahtinen http://www.cs.tut.fi/~ohar/ Ohjelmistoarkkitehtuurit 2016 1

Yleistä Visio ja UML 2.x: http://www.softwarestencils.com/uml/

Komponenteista Komponenttikauppoja, vapaan lähdekoodin komponenttikirjastoja, esimerkkejä: http://www.syncfusion.com/ http://www.infragistics.com/ https://vaadin.com/directory#browse http://jqueryui.com/ Esimerkki komponenteista 1: Javascript ja komponentit HTML:ssä skriptin src:n kertominen tai riippuvuuksien hallintatyökalut (require.js jne.) Komponentti/kirjasto: julkinen rajapinta ja koodia Ohjelmistoarkkitehtuurit 2016 3

Komponenteista Esimerkki komponenteista (Windows-maailma): Ennen.NET ympäristöä, COM-komponentteja Id:t, komponenttien rekisteröinti (Windows-rekisteriin), omia tietotyyppejä, mahdollisuus käyttää.net yhteinen ajoympäristö, eri kielillä toteutetut komponentit käytettävissä ristiin helposti Ohjelmistoarkkitehtuurit 2016 4

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 2016 5

Suunnittelumallin käsite: tausta Cristopher Alexander et al. A Pattern Language: Towns, Buildings, Construction, 1977 Cristopher Alexander The Timeless Way of Building, 1979 Maailma koostuu toistuvista tiettyjen mallien ilmentymistä Tarkoitukseen soveltuvuus jne 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 2016 6

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 2016 7

Tukikaari (Flying buttress) Ohjelmistoarkkitehtuurit 2016 8

Mikä on suunnittelumalli? Suunnittelumalli Yleinen ratkaisu usein esiintyvään ohjelmistojen arkkitehtuuri- tai suunnitteluongelmaan tietyssä yhteydessä. Ohjelmistoarkkitehtuurit 2016 9

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 2016 10

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. Ohjelmistoarkkitehtuurit 2016 11

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 2016 12

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 Ohjelmistoarkkitehtuurit 2016 13

Esimerkki suunnittelumallista: Rekursiokooste (composite) Ongelma: Olioita käyttävä komponentti tee joku operaatio lehtiolioille Ohjelmistoarkkitehtuurit 2016 14

http://www.codeproject.com/articles/185797/composite-design-pattern

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() Ohjelmistoarkkitehtuurit 2016 16

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 (ei mahdollista rajoittaa lehtiluokkien tyyppiä tietyssä haarassa/vaiheessa) Ohjelmistoarkkitehtuurit 2016 17

Esimerkki soveltamisesta SourceManager <<interface>> Source delete() print() * children File delete() print() Folder delete() print() add(source) For all children c: c.delete(); Delete folder Yleisesti, vähän joka puolella, esim. Java Swing, Java JSF UI Ohjelmistoarkkitehtuurit 2016 18

Patterneista Perinteiset GOF-tyylin suunnittelumallit usein toteutusmallihenkisiä Kun vaihdetaan toiseen ohjelmointiparadigmaan, osa malleista menettää merkityksensä (ongelmaa ei ole tai sen ratkaisu on triviaali, esim. funktionaaliset kielet ja erilaiset luontipatternit tai delegointipatternit) Ohjelmistoarkkitehtuurit 2016 19

Kysyttävää? Ohjelmistoarkkitehtuurit 2016 20

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 2016 21

Esimerkki: Mallikieli koneenohjausjärjestelmille Ohjelmistoarkkitehtuurit 2016 22

sama nykyään Ohjelmistoarkkitehtuurit 2016 23

Esimerkki: Organisaatiopatternit Ohjelmistoarkkitehtuurit 2016 24

Pilveä http://cloudcomputingpatterns.org https://msdn.microsoft.com/en-us/library/dn568099.aspx Ohjelmistoarkkitehtuurit 2016 25

J2EE Ohjelmistoarkkitehtuurit 2016 26

Pattern language for writing patterns

patternkielen organisointitapoja Hierarkkinen rakenne: Malli A 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 Malli D pienempiä osia. Malli B Malli E Malli C Alexanderin mallikieli Ohjelmistoarkkitehtuurit 2016 29

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 2016 30

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 2016 31

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 2016 32

Mallikielen organisointitapoja Sovellusalueen mukainen rakenne, esimerkiksi domain-malliin perustuen Helpottaa kysymystä: mitä mallia voisi tietyssä tilanteessa soveltaa? Antaa viitteitä puuttuvista malleista Ohjelmistoarkkitehtuurit 2016 33

Antisuunnittelumallit (vastasuunnittelumallit) (antipatterns)

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 2016 35

Dokumentoituja antisuunnittelumalleja The Blob Vendor lock-in Golden Hammer Lava flow Spaghetti Code Copy Paste Programming Magic push button https://sourcemaking.com/antipatterns/software-development-antipatterns http://www.antipatterns.com/ https://en.wikibooks.org/wiki/introduction_to_software_engineering/architecture/anti-patterns http://en.wikipedia.org/wiki/anti-pattern Ohjelmistoarkkitehtuurit 2016 36

Mitä huonoja ratkaisutapoja olet tunnistanut oliojärjestelmissä? Ohjelmistoarkkitehtuurit 2016 37

Antisuunnittelumallien oireita Huono ylläpidettävyys Huono uudelleenkäytettävyys Huono laajennettavuus Vaikeasti ymmärrettävä Tehottomuus Kooditasolla code smell ja anti patternit liittyvät osin toisiinsa Duplikoitua koodia, pitkiä metodeja, liikaa parametreja, turha monimutkaisuus, sykliset riippuvuudet, Ohjelmistoarkkitehtuurit 2016 38

Antisuunnittelumallikieli/ Haisevan koodin kieli? http://mikamantyla.eu/badcodesmellstaxonomy.html Ohjelmistoarkkitehtuurit 2016 39

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 2016 40

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 2016 41

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 2016 42

Suunnittelumallit eivät ole Eivät ole vain Design Patterns kirjan toteutusmalleja, vaan paljon muutakin. Ei vain yksinkertaisia muutaman olion vuorovaikutusrakenteita yleinen lääke ohjelmiston laadun parantamiseen; ongelmattomia: arkkitehtuurin monimutkaistuminen, koodin kompleksisuuden kasvu mahdollinen ongelman yliratkaisu tehokkuushäviö: runsaasti dynaamista sidontaa ja kutsun siirtämistä olion identiteetti hämärtyy: olioskitsofrenia väärin käytettynä tekevät ohjelmasta vaikeammin ymmärrettävän tarvitsevat hyvän dokumentoinnin järjestelmässä Perinteiset (GOF) suunnittelumallit usein toteuttajan ja alijärjestelmän suunnittelijan työkaluja Anti-arkkitehtuuridokumentaatio: ylimalkainen kertomus järjestelmän toiminnasta ja iso lista suunnittelumalleja, joilla luvataan järjestelmän täyttävän kaikki mieleen tulevat laatuominaisuudet Ohjelmistoarkkitehtuurit 2016 43

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 Suunnittelumallien organisointi mallikieliin Antisuunnittelumallit auttavat tunnistamaan ongelmakohtia Ohjelmistoarkkitehtuurit 2016 44

Linkkejä Patterniesimerkkejä: http://sourcemaking.com/antipatterns patterns.cs.tut.fi http://www.hillside.net/patterns/ http://addyosmani.com/resources/essentialjsdesignpatterns/book/ http://balusc.blogspot.fi/2010/04/examples-of-gof-design-patterns.html Haisevaa koodia: http://c2.com/cgi/wiki?codesmell http://mikamantyla.eu/badcodesmellstaxonomy.html http://blog.codinghorror.com/code-smells/ Kirjallisuutta (näitä riittää vaikka kuinka) Hanmer, Robert: Pattern-Oriented Software Architecture for Dummies (2nd Edition) 2012 Designing Distributed Control Systems: A Pattern Language Approach, 2014 Veli-Pekka Eloranta, Johannes Koskinen, Marko Leppanen, Ville Reijonen Buschmann et al.: A System of Patterns - Pattern-Oriented Software Architecture. Wiley 1996. Douglass B.: Real-Time Design Patterns: Robust Scalable Architecture for Real-Time Systems. Addison-Wesley 2003. Gamma E. et al.: Design Patterns - Elements of Reusable Object-Oriented Software. Addison-Wesley 1995. Hohpe G., Woolf B.: Enterprise Integration Patterns. Addison-Wesley 2004. Allan Kelly: Business Patterns for Software Developers 2012 (ebrary/tut-kirjasto), kaikkea markkinoinnista jakeluun

Kysyttävää? Ohjelmistoarkkitehtuurit 2016 46