Ohjelmistotekniikan menetelmät, suunnittelumalleja

Samankaltaiset tiedostot
Ohjelmistojen mallintaminen, suunnittelumalleja

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

Oliosuunnittelu. Oliosuunnittelu

Olio-ohjelmointi Johdanto suunnittelumalleihin. 1. Yleistä

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

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

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

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

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

T Henkilökohtainen harjoitus: FASTAXON

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

Hirviö. Design Patterns

12. Kehysarkkitehtuurit

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

Java kahdessa tunnissa. Jyry Suvilehto

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

Olio-ohjelmointi Javalla

Ohjelmistotuotanto, s

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

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

15. Ohjelmoinnin tekniikkaa 15.1

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

Olio-ohjelmointi Syntaksikokoelma

9. Periytyminen Javassa 9.1

12. Monimuotoisuus 12.1

9. Periytyminen Javassa 9.1

Sunnittelumallit Harjoitustehtävät syksy 2015 / Simo Silander

5. Suunnittelumallit. TTY Ohjelmistotekniikka

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

15. Ohjelmoinnin tekniikkaa 15.1

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

- Komposiittityypit - Object (Mukaanlukien funktiot) - Array. - Erikoisdatatyypit - null - undefined

Kehyspohjainen ohjelmistokehitys

Ohjelmistotuotanto. Luento

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

Periytyminen (inheritance)

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Hirviö. Design Patterns

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi.

UML ja luokkien väliset suhteet

Muusta kuin vesisioista

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

KYMENLAAKSON AMMATTIKORKEAKOULU Tietotekniikka / Ohjelmistotekniikka. Esa Knaapi SUUNNITTELUMALLIT OHJELMOINNISSA.

Ohjelmistoarkkitehtuurit. Syksy 2010

Ohjelmointi 2 / 2010 Välikoe / 26.3

Ohjelmoinnin peruskurssien laaja oppimäärä


Suunnittelumallien käyttö ohjelmistosuunnittelussa

UML -mallinnus LUOKKAKAAVIO EERO NOUSIAINEN

Sisältö. 2. Taulukot. Yleistä. Yleistä

Mikä yhteyssuhde on?

Sisältö. 22. Taulukot. Yleistä. Yleistä

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

12. Monimuotoisuus 12.1

Kertaus: yleistys-erikoistus ja perintä

14. Poikkeukset 14.1

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

Sisällys. JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys. Luokkahierarkia. Periytyminen (inheritance)

Olio-ohjelmointi Suunnittelumallit Adapter ja Composite. 1. Adapter

Ohjelmistoarkkitehtuurit. Kevät

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

Ohjelmistojen mallintaminen, sekvenssikaaviot

5. Suunnittelumallit. TTY Ohjelmistotekniikka

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet

Javan perusteita. Janne Käki

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Ohjelmoinnin peruskurssien laaja oppimäärä

16. Javan omat luokat 16.1

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Ohjelmistoarkkitehtuurit kevät

Ohjelmoinnin peruskurssien laaja oppimäärä

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

14. Poikkeukset 14.1

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Aalto Yliopisto T Informaatioverkostot: Studio 1. Oliot ja luokat Javaohjelmoinnissa

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

Muutamia peruskäsitteitä

Luokkamalli LUOKKAKAAVIO. Tämän osan sisältö. Luokkamalli. Luokka ja olio. Luokkakaavio (class diagram)

Common Lisp Object System

P e d a c o d e ohjelmointikoulutus verkossa

4. Luokan testaus ja käyttö olion kautta 4.1

TIETORAKENTEET JA ALGORITMIT

public static void main (String [] args)

A TIETORAKENTEET JA ALGORITMIT

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

KOHDELUOKAN MÄÄRITTELY

1 Tehtävän kuvaus ja analysointi

TIE Ohjelmistojen suunnittelu

Ohjelmistotuotanto. Luento

2. Olio-ohjelmoinnin perusteita 2.1

20. Javan omat luokat 20.1

Java-API, rajapinnat, poikkeukset, UML,...

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

Transkriptio:

582101 - Ohjelmistotekniikan menetelmät, suunnittelumalleja 1

Suunnittelumallit (design patterns) Kuvaus sellaisesta luokkarakenteesta & olioiden vuorovaikutuksesta, joka ratkaisee tietyn yleisen ongelman tiettyjen reunaehtojen vallitessa Keskeinen lähde suunnittelumalleihin Gamma et al., Design Patterns Elements of Reusable Object-Oriented Software, Addison-Wesley, 1995 2

Ongelma kontekstissaan Gamma & al. dokumentoivat suunnittelumallinsa dokumentoidaan standardoidussa formaatissa: 1. Nimi 2. Ongelmakuvaus 3. Ratkaisu 4. Seuraukset Mallit ovat sidottuja johonkin ympäristöön Ei-olioympäristössä voisivat oliomaaliman peruskäsitteet perintä, kapselointi ja polymorfismi olla omia suunnittelumallejaan 3

Mallien luokittelu Gamma et al. jaoittelevat mallinsa kolmeen pääkategoriaan 1. Olioiden luontimallit (creational) 2. Olioiden käyttäytymismallit (behavioral) 3. Luokkien rakenteelliset mallit (structural) Mallien tunteminen ja käyttäminen helpottaa kommunikaatiota suunnittelijoiden välillä Yhteinen sanasto Ohjelmakoodia korkeampi abstraktion taso 4

Luokkien ilmentymien luonti Kuka kutsuu luokan konstruktoria uuden ilmentymän luomiseksi? Koska ilmentymiä pitäisi luoda? jotkut oliot luodaan ohjelman käynnistyessä main- tai alustusoperaatiossa monet oliot luodaan dynaamisesti suoritusaikana, mutta niiden luoja on tiedossa staattisesti (käännösaikana) joissain tapauksissa olion luoja määräytyy dynaamisesti vasta suoritusaikana 5

Luontimalli new() Yksinkertaisin, ja kaikkien monimutkaisempien luontimallien hyödyntämä olion luontitapa on käyttää kielen new-avainsanaa: new Kirahvi(); new-avainsanaa käyttäessä kiinnitetään se konkreettinen luokka, josta olio halutaan instantioida Tämä vaikeuttaa geneeristen, uudelleenkäytettävien ohjelmien tekemistä Luontimalleja: abstrakti tehdas, rakentaja, tehdasmetodi, prototyyppi, ainokainen 6

Luontimalli tehdasmetodi (factory method) Määritellään luokkaan metodi, jonka tehtävä on luoda halutunlaisia olioita. Merkitys 1 (puhtaampi oliotapa) Aliluokka kiinnittää luotavan olion tyypin syrjäyttämällä yliluokan metodin Merkitys 2 (yleisempi) Metodi jollain keinoin päättää, minkä luokan olio instantioidaan 7

Esimerkki tehdasmetodista public static Frequency getfrequency(double d) { Frequency f; if(testing) { f = new MockFrequency(d); else { f = new ObservableFrequency(d); return f; Miten kääntäisitte tämän puhtaammaksi oliotehdasmetodiksi? 8

Luontimalli abstrakti tehdas Erilaisten, yhteenkuuluvien olioperheiden tuottamiseksi sopii luontimalli abstrakti tehdas Abstrakti rajapinta yhteenkuuluvien olioiden luomiseksi kiinnittämättä niiden konkreettisia luokkia Mahdollistaa sovelluksen konfiguroimisen luomaan tietyn konkreettisten aliluokkien perheen ilmentymiä 9

Abstrakti tehdas UML:nä Client AbstractFactory createproducta() createproductb() ConcreteProductA1 AbstractProductA ConcreteProductA2 ConcreteFactory2 ConcreteFactory1 AbstractProductB createproducta() createproductb() createproducta() createproductb() ConcreteProductB1 ConcreteProductB2 10

Olioiden käyttäytymismallit Olioiden ajonaikaisen käyttäytymisen mallintaminen Käyttäytymismalleilla tyypillisesti pyritään parantamaan järjestelmän joustavuutta mahdollistamalla käyttäytymisen parametrointi ja/tai yksityiskohtien piilottaminen Malleja esim. vastuuketju, iteraattori, hiutale, operaatiorunko, vierailija,.. (Chain of responsibility, Iterator, Flyweight, Template method, Visitor).. 11

Iteraattori Iteraattorilla erotellaan oliokokoelman sisäinen rakenne ja kokoelman läpikäymisen logiikka toisistaan Käyttö hyvin yksinkertaista: List<Radio> radios = new ArrayList<Radio>();. for(radio r : radios) { print ( r ); Iterointirajapinnan tarjoaminen ns. asiakaspalvelua 12

Operaatiorunko (template method) Määritellään operaatiolle yleinen runko, yksityiskohdat vaihtelevat olioverkon konfiguraation mukaan 13

Operaatiorunko checkfrequency() protected boolean checkfrequency(int frequency) { int nextstep = 0; while(nextstep < 1000) { if(!checkfrequency(frequency, nextstep)) { return false; nextstep += 25; return true; checkfrequency(int, int) antaa variaatiopisteen operaatiorungolle 14

Vastuuketju (chain of responsibility) Erotetaan palvelupyynnön lähettäjä palvelun toteuttajasta antamalla useammalle oliolle mahdollisuus huolehtia palvelun toteutuksesta Toteuttaja delegoi palvelupyynnön ketjussa seuraavalle, jos se ei itse pysty toteuttamaan palvelua (kokonaan) Client Handler handlerequest() successor ConcreteHandler1 handlerequest() ConcreteHandler2 handlerequest() 15

Radiotarkistuksen vastuketju public boolean check() { for(radio radio : radios) { if(!radio.check()) { return false; return true; 16

Rakennemallit Rakennemallit käsittelevät tapoja järjestää luokka- ja oliorakenteita Esim. sovitin (adapter), hiutale (flyweight), edustaja (proxy), silta (bridge), rekursiokooste (composition), 17

Sovitin Olemassaolevaa luokkarakennetta uudelleenkäytettäessä rajapinnat eivät aina ole yhteensopivia Sovitin-mallilla rajapintojen väliin sijoitetaan.. sovitin Ks. tämän viikon tehtävät, 1 18

Hiutale (flyweight) Hiutale-mallilla yhdistetään samanlaisia tai samankaltaisia olioita muistin säästämiseksi Esim. tekstinkäsittelyjärjestelmässä jokainen yksittäinen kirjain Sivuvaikutuksena samankaltaiset oliot voivat myös toimia kommunikaatioyhteyksinä 19

Frequency-flyweight public static Frequency getfrequency(double d) { Frequency f = frequencycache.get(d); if(f == null) { f = new MockFrequency(d); frequencycache.put(d, f); return f; 20

Yhteenvetona Nyt läpikäytiin vain muutamia yleisesti esiintyviä suunnittelumalleja, hyvin yleisellä tasolla Mallien käyttö on monesti eri mallien koostamista ja yhteensovittamista Esim. Flyweight + Factory method 21