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

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

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

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

Olio-ohjelmointi Johdanto suunnittelumalleihin. 1. Yleistä

Ohjelmistotekniikan menetelmät, suunnittelumalleja

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

Olio-ohjelmointi Suunnittelumallit Adapter ja Composite. 1. Adapter

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

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

Ohjelmistojen mallintaminen, suunnittelumalleja

T Henkilökohtainen harjoitus: FASTAXON

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmistojen mallintaminen viikon 4 laskareiden mallivastauksia

TIE Ohjelmistojen suunnittelu

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

Oliosuunnittelu. Oliosuunnittelu

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

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

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Kooste. Esim. Ympyrän keskipiste voidaan ajatella ympyrän osaksi.

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

SEPA - Design Patterns

Kertaus: yleistys-erikoistus ja perintä

Ohjelmistojen suunnittelu

Olio-ohjelmointi Suunnittelumallit Observer ja State. 1. Observer (Tarkkailija)

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

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Ohjelmistoarkkitehtuurit. Syksy 2010

Hirviö. Design Patterns

12. Monimuotoisuus 12.1

Olio-ohjelmointi Javalla

Plugin-pohjaiset sovellukset arkkitehtuurit

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

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

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

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmistoarkkitehtuurit. Kevät

Muusta kuin vesisioista

5. Suunnittelumallit. TTY Ohjelmistotekniikka

815338A Ohjelmointikielten periaatteet

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

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Hirviö. Design Patterns

TIE Ohjelmistojen suunnittelu

POLKU LUOKKAKAAVIOISTA TAULUJEN TOTEUTUKSEEN

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

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

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

Sokkelon sisältö säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei.

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

KERROSARKKITEHTUURIN SUUNNITTELUMALLIT. Kuisma Lehtonen Joensuun yliopisto Tietojenkäsittelytiede Pro gradu -tutkielma

Sisällys. 7. Oliot ja viitteet. Olion luominen. Olio Java-kielessä

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

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

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

5. Suunnittelumallit. TTY Ohjelmistotekniikka

Muutamia peruskäsitteitä

9. Periytyminen Javassa 9.1

9. Periytyminen Javassa 9.1

Jouni Huotari & Ari Hovi. Käsitemallinnuksesta relaatiokantaan KÄSITEMALLI. LOOGINEN MALLI: tietomalli valittu. FYYSINEN MALLI: DBMS valittu

Ohjelmistoarkkitehtuurit kevät

18. Abstraktit tietotyypit 18.1

Sisällys. 19. Unified Modeling Language (UML) Johdanto. Johdanto. Johdanto. Luokkakaavio:

Hakemistojen sisällöt säilötään linkitetyille listalle.

Kehyksillä toteuttettujen tuotelinjojen rakenteellinen optimointi

12. Monimuotoisuus 12.1

Suunnittelumallien käyttö ohjelmistosuunnittelussa

Ohjelmoinnin jatkokurssi, kurssikoe

15. Ohjelmoinnin tekniikkaa 15.1

Mitä on periytyminen?

Javan perusteita. Janne Käki

UML Luokkakaavio 14:41

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

12. Kehysarkkitehtuurit

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

Uudelleenkäytön jako kahteen

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

Ohjelmistotekniikan menetelmät, kesä 2008


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

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

Rajapinta (interface)

Luokka- ja oliokaaviot

Sisällys. Mitä on periytyminen? Yksittäis- ja moniperiytyminen. Oliot ja perityt luokat. Periytymisen käyttö. 8.2

19/20: Ikkuna olio-ohjelmoinnin maailmaan

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

Olio-ohjelmointi Johdanto olio-ohjelmointiin

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

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

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

7. Oliot ja viitteet 7.1

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

12 Mallit (Templates)

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

Ratkaisumallien historia

Ohjelmoinnin peruskurssien laaja oppimäärä

Transkriptio:

2015 syksy 2. vsk IX Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton

Sisältö 1. Johdanto luontimalleihin 2. Proxy 3. Factory Method 4. Prototype 5. Singleton Suunnittelumallit Proxy et. al. 2

IX.1 Johdanto luontimalleihin Kuvaavat epäsuoria tapoja luoda olioita ohjelmassa Tehdään järjestelmä riippumattomaksi siitä, miten sen oliot luodaan, esitetään ja yhdistellään Luokkamallit perustuvat periytymiseen Oliomallit delegoivat olion luomisen toisille olioille Tarvitaan erityisesti, kun ohjelmassa siirrytään käyttämään koosteolioita periytymisen asemasta Saattaa johtaa mutkikkaampaan olioiden luomiseen Suunnittelumallit Proxy et. al. 3

IX.2 Proxy (Edustaja) Rakennemalli Oliolla on edustajaolio, jota käytetään varsinaisen olion asemasta Proxyn rajapinta on sama kuin varsinaisen kohdeolion Proxy delegoi pyynnöt kohdeoliolle sisältämänsä viitteen kautta Toimii siis asiakasolion ja kohdeolion välissä Esimerkki: Dokumentissa suuri elementti, joka halutaan luoda vasta tarvittaessa Dokumenttiin edustajaksi proxy, joka luo olion vasta näytettäessä Suunnittelumallit Proxy et. al. 4

IX.2.1 Käyttötapoja Kaikki tapaukset, joissa olioon viitataan muuten kuin tavallisen suoran viitteen kautta. Virtuaaliedustaja (Virtual Proxy) Luo paljon resursseja vaativia olioita tarvittaessa Etäedustaja (Remote Proxy) Viitataan olioon, joka sijaitsee toisessa muistialueessa Suojausedustaja (Protection Proxy) Kontrolloi pääsyä olioon. Voi toteuttaa erilaisia pääsyoikeuksia Suunnittelumallit Proxy et. al. 5

IX.2.1 Käyttötapoja (2) Cache Proxy Tilapäinen varasto paljon resursseja vaativan operaation tuloksista, mahdollisesti useiden olioiden käyttöön Synkronointiedustaja (Synchronization Proxy) Rinnakkaisuuden hallinta tilanteessa, jossa kohdeolion toiminta ei ole synkronisoitu asiakasolion kanssa. Smart reference Proxy (älykäs osoitin) Viite, johon toteutettu muitakin toimintoja kuin pelkkä olioon viittaaminen Suunnittelumallit Proxy et. al. 6

IX.2.2 Luokka- ja oliokaavio Määrittelee todellisen kohteen ja Proxyn yhteisen rajapinnan Todellinen kohde Todellisen kohteen edustaja Proxy-mallin luokka- ja oliorakenne. Vrt. Gamma, Helm, Johnson, Vlissides: Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley 1995 7

IX.2.3 Etuja Voidaan piilottaa olion käyttäjiltä se, että olio sijaitsee toisessa osoiteavaruudessa Voidaan tehdä optimointeja oliota käsiteltäessä Esim. luoda suuria olioita tarvittaessa Voidaan automatisoida muistin vapautus ym. siivousoperaatiot Erityisesti kielissä, joissa ei ole automaattista roskien keruuta Suunnittelumallit Proxy et. al. 8

IX.3 Factory Method (Tehdasmetodi) Luontimalli Käytetään, kun on luotava olioita, joiden tarkkaa tyyppiä ei tunneta Halutaan antaa vastuu olioiden luomisesta aliluokille Käytetään, kun luokilla avustavia aliluokkia ja halutaan säilyttää paikallisena tieto siitä, mitä apuluokkaa käytetään Esimerkki: Ohjelmassa sovellusolio ja dokumenttiolio, joka voi olla monen tyyppinen. Sovellusolio luo dokumenttiolion, mutta perusluokka ei tiedä tyyppiä. Peritään sovellusluokka aliluokkiin, jotka luovat sopivan dokumenttiolion Suunnittelumallit Proxy et. al. 9

IX.3.1 Mallin luokkakaavio Tuotteiden kantaluokka Konkreettinen tuote Esittelee tehdasmetodin, joka palauttaa Producttyyppisen olion Uudelleenmäärittelee tehdasmetodin palauttamaan ConcreteProduct-olion Factory Method-mallin luokkarakenne. Vrt. Gamma, Helm, Johnson, Vlissides: Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley 1995 10

IX.3.2 Huomioita Etuja Poistetaan tarve liittää ohjelmaan sovelluskohtaisia luokkia Käsitellään ainoastaan Product-rajapintaa -> sovellus toimii minkä tahansa aliluokan kanssa Haitta: Voi johtaa monimutkaiseen luokkarakenteeseen Yleensä jokaista luotavaa luokkaa kohti uusi Creatorluokan aliluokka Tehdasmetodia ei tarvitse kutsua Creator-luokista Jos kutsutaan ulkopuolelta, voidaan kytkeä rinnakkaiset luokkarakenteet toisiinsa Suunnittelumallit Proxy et. al. 11

IX.3.2 Toteutuksesta 1. Creator abstrakti luokka, ei toteutusta tehdasmetodille Aliluokkien määriteltävä toteutus Käytetään luotaessa olioita ennalta tuntemattomista luokista 2. Creator konkreettinen, oletustoteutus tehdasmetodille Ei pakko uudelleenmääritellä Käytetään yleensä mukavuussyistä Parametrisoidut tehdasmetodit Useammanlaisia tuotteita parametrin perusteella Malliluokkien käyttö Ei tarvita välttämättä useita Creatorin aliluokkia Suunnittelumallit Proxy et. al. 12

IX.4 Prototype (Prototyyppi) Tilanne: luotava olio luokasta, jonka instansseja ei osata tehdä Esimerkki: Graafisessa editorissa työkalu, joka lisää dokumenttiin elementtejä käsiteltäväksi Työkalun ei tarvitse osata luoda elementtejä Ratkaisu: Käytetään mallina esimerkkioliota, joka kopioidaan Suunnittelumallit Proxy et. al. 13

IX.4.1 Sovellettavuus Järjestelmä ei saisi riippua siitä, miten sen tuottamat oliot luodaan ja jokin seuraavista ehdoista on voimassa: 1. Luotavan olion tyyppi määräytyy ajonaikaisesti 2. Halutaan välttää Factory Method-suunnittelumallin tehdasluokkien rakennetta 3. Luotavan luokan olioilla voi olla hyvin harvoja laillisia tiloja. Tällöin voi olla kätevämpää luoda olio kopioimalla kuin alustamalla suoraan Suunnittelumallit Proxy et. al. 14

IX.4.2 Luokkakaavio Luo uusia olioita Luotavien olioiden rajapinta Toteuttaa metodin itsensä kopioimiseksi Prototype-mallin luokkarakenne. Vrt. Gamma, Helm, Johnson, Vlissides: Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley 1995 15

IX.4.3 Huomioita Etuja Factory Method-malliin nähden Yksinkertaisempi luokkarakenne Ei tarvita luomiseen aliluokkia Joustavampi Voidaan tuoda uusia luokkia ajonaikaisesti Voidaan tehdä useita malleja samasta luokasta Rajoitus: Kaikissa kopioitavissa olioissa oltava clone() Vaikeaa, jos sovelletaan vanhaan luokkarakenteeseen Suunnittelumallit Proxy et. al. 16

IX.4.4 Toteutuksesta Vaikeinta clone()-metodin toteuttaminen: Pinta- vai syväkopio? Koosteoliolle tarvitaan usein syväkopio C++:ssa käytetään hyväksi kopiointimuodostinta Javassa Objcet-luokassa clone()-metodi Tekee pintakopion Toteutettava Cloneable-rajapinta, jotta saadaan käyttöön Product-luokkiin voidaan toteuttaa myös metodi create() Tekee oletusolion malliolion luokasta Suunnittelumallit Proxy et. al. 17

IX.5 Singleton (Ainokainen) Vaatimukset: Luokan instanssien määrä rajoitettu yhteen Instanssi käytettävissä monissa paikoissa eikä haluta käyttää globaalia muuttujaa Luokka rajoittaa instanssinsa yhteen ja tarjoaa pääsyn ainoaan olioonsa Esimerkki: Halutaan toteuttaa ohjelmassa globaali tietosäiliö, joita voi olla vain yksi kappale Suunnittelumallit Proxy et. al. 18

IX.5.1 Luokkakaavio Singleton-mallin luokkarakenne. Vrt. Gamma, Helm, Johnson, Vlissides: Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley 1995 Suunnittelumallit Proxy et. al. 19

IX.5.2 Toteutuksesta Instanssi saadaan luokkametodilla Luokan muodostimet private-tyyppisiä Olioita ei voi luoda luokan ulkopuolelta Voidaan kontrolloida muiden olioiden pääsyä instanssiin Ei tarvita globaalia muuttujaa Singleton-luokka voidaan periä ja käyttää aliluokkaa Voidaan helposti muokata niin, että luokan olioita luotavissa jokin muukin kiinteä lukumäärä Suunnittelumallit Proxy et. al. 20