Oliosuunnittelu. Oliosuunnittelu

Samankaltaiset tiedostot
Ohjelmistotuotanto, s

Ohjelmistotekniikan menetelmät, suunnittelumalleja

1. Käyttötapalähtöinen suunnittelu. Ohjelmistotuotanto. Käyttötapalähtöinen suunnittelu. Käyttötapalähtöinen suunnittelu

OSAII: Käytännön rutiinit. Ohjelmiston 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

5. Suunnittelumallit. TTY Ohjelmistotekniikka

Ohjelmistokehykset (software frameworks)

12. Kehysarkkitehtuurit

Ohjelmistojen mallintaminen, suunnittelumalleja

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

Ohjelmistoarkkitehtuurit, syksy

Ohjelmistokehykset (software frameworks)

Ohjelmistokehykset ohjelmistorunkoja uudelleenkäyttö olioperustaisista ohjelmistorunko

Suunnittelumalleja, MVC. Juha Järvensivu 2008

5. Suunnittelumallit. TTY Ohjelmistotekniikka

Kehyksillä toteuttettujen tuotelinjojen rakenteellinen optimointi

Olio-ohjelmointi Johdanto suunnittelumalleihin. 1. Yleistä

Uudelleenkäytön jako kahteen

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

Hirviö. Design Patterns

Ohjelmistoarkkitehtuurit kevät

Muusta kuin vesisioista


Kehyspohjainen ohjelmistokehitys

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

Luokka- ja oliokaaviot

Luento 8. Ohjelmistokehykset Tuoteperheet CSM14101 Ohjelmistoarkkitehtuurit

Hirviö. Design Patterns

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

TIE Ohjelmistojen suunnittelu

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

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

11. Kehysarkkitehtuurit

UML:n yleiskatsaus. UML:n osat:

Olio-ohjelmointi Suunnittelumallit Adapter ja Composite. 1. Adapter

TIE Ohjelmistojen suunnittelu

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

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

UML Luokkakaavio 14:41

Ohjelmistoarkkitehtuurit, syksy

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Ohjelmistoarkkitehtuurit. Syksy 2010

Kertaus: yleistys-erikoistus ja perintä

Ohjelmistojen mallintaminen Olioiden yhteistyö Harri Laine 1

Microsoft Visual Studio 2005

Muutamia peruskäsitteitä

8. Kehysarkkitehtuurit

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

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

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

Ohjelmoinnin peruskurssien laaja oppimäärä

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

T Henkilökohtainen harjoitus: FASTAXON

The OWL-S are not what they seem

Joskus yleistäminen voi tapahtua monen ominaisuuden pohjalta. Myös tällöin voi tulla moniperintätilanteita.

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

Ohjelmistojen mallinnus Ohjelmistoarkkitehtuuri Harri Laine 1

Ohjelmoinnin peruskurssien laaja oppimäärä

Ratkaisumallien historia

Suunnittelumallien käyttö ohjelmistosuunnittelussa

Ohjelmistoarkkitehtuurit. Kevät

Suunnitteluvaihe prosessissa

Ratkaisumallien hyväksikäyttö ohjelmistotyökaluissa

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

13/20: Kierrätys kannattaa koodaamisessakin

2. Olio-ohjelmoinnin perusteita 2.1

Ohjelmistoarkkitehtuurit

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

Ohjelmistojen mallintaminen, kesä 2010

Microsoft Visual J++ ohjelmointiympäristö

Malliperustainen ohjelmistokehitys - MDE Pasi Lehtimäki

12. Monimuotoisuus 12.1

12. Monimuotoisuus 12.1

3. Komponentit ja rajapinnat

11. Kehysarkkitehtuurit

Ohjelmistojen mallintaminen. Luento 8,

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

Web Services tietokantaohjelmoinnin perusteet

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

Ohjelmistotekniikan menetelmät, kesä 2008

5. Design patterns. TTY Ohjelmistotekniikka

Ohjelmistoarkkitehtuurit kevät

Plugin-pohjaiset sovellukset arkkitehtuurit

Ohjelmistoarkkitehtuurit Kevät 2014

Ohjelmistotekniikan menetelmät, UML

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

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

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

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

UML -mallinnus TILAKAAVIO

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

Ohjelmistojen mallintaminen, kesä 2009

Common Lisp Object System

15. Ohjelmoinnin tekniikkaa 15.1

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

Solidity älysopimus ohjelmointi. Sopimus suuntautunut ohjelmointi

TIE Ohjelmistojen suunnittelu. Luento 8..9: moniperintä

Transkriptio:

Oliosuunnittelu Perinnän ja dynaamisen sidonnan hyödyntäminen Tarkastellaan ohjelmaa, jonka tehtävänä on tuottaa erilaisista kuvioista muodostuva kuvaesitys Ratkaisu 1: perinteinen malli - ei perintää Kuvio Tyyppi Piirrä if Tyyppi= ympyrä then piirrä_ympyrä(.) else if Tyyppi= suorakaide then piirrä_suorakaide(.) else. Oliosuunnittelu Perintää ja syrjäyttämistä hyödyntävä Kuvio Piirrä: abstract Ympyrä Piirrä Suorakaide Piirrä Uusimuoto Piirrä piirrä_ympyrä piirrä_suorakaide uusitapa Harri Laine 1/12

Suunnittelumallit (Design Patterns) Suunnittelumalli on systemaattinen tapa ratkaista tietty usein esiintyvä ongelma taitotiedon, suunnittelukokemuksen dokumentti yleiskäyttöisiä ratkaisumalleja sovellusaluekohtaisia ratkaisumalleja Malli on suunnittelutason kuvaus ratkaisusta, sen voi toteuttaa eri ohjelmointikielillä tietylle kielelle voidaan tarjota valmiita kirjastoluokkia jonkin suunnittelumallin hyödyntämiseen Suunnittelumallit (Design Patterns) Tyypillisesti suunnittelumallista esitetään: tarkoitus eli ratkaistava ongelma sovelluskohteet rakenne, mistä komponenteista malli muodostuu ja miten komponentit liittyvät toisiinsa mallin edut ja haitat sovellimerkkejä toteutusvaihtoehtoja (koodirunkoja) Harri Laine 2/12

Suunnittelumallit (Design Patterns) suunnittelumalli voidaan kehittää ideoimalla - puhtaalta pöydältä etsimällä olemassaolevista ohjelmista periaate: tulisi löytää toimivia, hyväksihavaittuja ratkaisuja Gamma E., Helm R., Johnson R., Vlissides J.: Design Patterns - Elements of Reusable Object- Oriented Software, Addison-Wesley, 1995 esittelee 24 ohjelmista etsittyä mallia Suunnittelumallit (Design Patterns) Gamma et al. luokittelu: Laajuus (scope) luokkien väliset (staattiset) suhteet olioiden väliset (dynaamiset) suhteet Tarkoitus (purpose) olioiden luonti luokka-/oliorakenteet olioiden yhteistyö Harri Laine 3/12

Suunnittelumallit (Design Patterns) Esimerkkejä: Abstract Factory olioiden luontiin liittyvä olioiden välisiä suhteita hyödyntävä malli Tarkoitus: malli esittää tavan luoda tietyn luokan jälkeläisluokkien ilmentymiä tuntematta näitä luokkia Esimerkki: yleiskäyttöinen käyttöliittymäkirjasto windows kontrolli käyttöliittymä kontrolli motifkontrolli kontrollit erilaisia eri ympäristöissä kirjaston pitäisi olla yleinen, miten voidaan yleisellä tasolla. luoda ilmentymiä ympäristökohtaisille luokille Suunnittelumalli Abstract Factory Client AbstractProductA ConcreteProductA1 ConcreteProductA2 AbstractFactory CreateProductA (...) : abstract CreateProductB (...) : abstract AbstractProductB ConcreteProductB1 ConcreteProductB2 ConcreteFactory1 CreateProductA( ) CreateProductB( ) Concrete factory2 CreateProductA( ) CreateProductB( ) Harri Laine 4/12

Suunnittelumalli Abstract Factory Client (siis hyödyntävä ohjelma) tuntee abstraktin tehtaan ja abstraktit tuotteet ja kutsuu näiden tarjoamia palveluja. Abstraktin tehtaan palvelukutsu ohjautuu konkreettisen tehtaan vastaavaan luontipalveluun, joka siis luo ilmentymän kyseisen tyyppiselle tuotteelle esim windows-kontrollitehtaan luonappi-palvelu luo ilmentymän winnappi-luokkaan. Abstract Factory sovelle Client Nappi winnappi motifnappi KontrolliTehdas LuoNappi (...) : abstract LuoLiuku (...) : abstract Liuku winliuku motifliuku KontrolliTehdasWin LuoNappi( ) LuoLiuku( ) KontrolliTehdasMotif LuoNappi( ) LuoLiuku( ) Harri Laine 5/12

Suunnittelumalli Abstract Factory Mallilla eristetään konkreettiset tehtaat asiakkaasta Tuoteperhe voidaan helposti vaihtaa toiseksi Asiakkaan on tunnettava tuotetyypit, joten uusia tuotetyyppejä ei voida lisätä pelkästään aliluokkia lisäämällä, vaan tällöin on muutettava asiakkaan koodia ja abstraktin tehtaan koodia esim. kilistimen lisäys käyttöliittymäkontrolleihin Composite (Kooste) Esimerkiksi Suunnittelumalli Composite (Kooste) on luokka-/oliorakenteisiin liittyvä olioiden välisiä suhteita hyödyntävä malli. Tarkoitus: Malli esittää tavan kokonaisuuden ja sen osien käsittelemiseen samalla tavalla. Esimerkki: piirto-ohjelmassa kuvio voi koostua hierarkkisesti pienemmistä osakuvioista ja halutaan piirtää kaikki kuvioelementit samalla tavoin. Harri Laine 6/12

Composite (Kooste) malli Component Client Operation () : abstract Add (Component) Remove (Component) GetChild (int) children Leaf Operation( ) foreach c in children c.operation Composite Operation () Add (Component) Remove (Component) GetChild (int) Composite (Kooste) Määritellään abstrakti luokka komponentti, jonka konkreettisina aliluokkina (siis sellaisina, joilla on ilmentymiä) ovat alkeisluokat ja kokoelmat Esimerkiksi abstrakti luokka voisi olla kuvio ja sen aliluokat olisivat alkeiskuvio ja koottu kuvio. Ratkaisun etuna on se, että asiakas pystyy käsittelemään myös koosteoliota missä tahansa yhteydessä missä se käsittelee alkeisoliota Haittana on se että kaikki koosteoliot ovat rakenteeltaan samanlaisia. Harri Laine 7/12

Composite (Kooste) sovelle Kuvio Client Piirrä () : abstract Add (Component) Remove (Component) GetChild (int) children Alkeiskuvio Piirrä( ) Ympyrä Piirrä( ) foreach c in children c.piirrä; Koottukuvio Piirrä () Add (Component) Remove (Component) GetChild (int) Strategy Strategia (strategy) on esimerkki olioiden vuorovaikutukseen perustuvasta oliotason suunnittelumallista. Tarkoitus: mahdollistaa sovellettavan algoritmin vaihtaminen ja uusien lisääminen. Esimerkki: CASE-väline lukee tietokannan SQLlauseet ja tuottaa näiden perusteella kannan rakenteen näyttävän kuvaesityksen. Kuvasymbolien sijoitteluun tarvittavan sijoittelualgoritmin pitäisi olla vaihdettavissa. Harri Laine 8/12

Strategy malli Context ContextInterface( ) Strategy Algorithm( ) ConcreteStrategyA Algorithm( ) ConcreteStrategyB Algorithm( ) ConcreteStrategyC Algorithm( ) Strategy sovelle Network AddLayout( ) SelectLayout( ) UseLayout( ) Layout dolayout( ) getname( ) CGD dolayout( ) getname( ) Spring dolayout( ) getname( ) Stt dolayout( ) getname( ) getname() {return 'CGD'}; Harri Laine 9/12

Sovelluskehykset (application frameworks) Sovelluskehyksellä tarkoitetaan uudelleenkäytettäväksi tarkoitettua kokoelmaa yhdessä toimivia yleensä abstrakteja luokkia, jotka tarjoavat perusrakenteen ja -toiminnallisuuden tietyn tyyppiselle sovellukselle käyttöliittymäkehykset yleiset sovelluskehykset (MacApp, Borland OWL, ) sovellusaluekohtaiset kehykset, Sovelluskehykset (application frameworks) Sovelluskehys tarjoaa rungon, johon esim. perintää jä syrjäyttämistä hyväksikäyttäen voidaan liittää sovelluskohtaista toiminnallisuutta. Runkoluokat kutsuvat abstraktien luokkien operaatioita, jotka sitten konkreettisten jälkeläisluokkien oliot toteuttavat hollywood-periaate: don t call us we call you, kirjastosta kutsutaan sovelluskohtaisia rutiineja Harri Laine 10/12

Sovelluskehykset (application frameworks) kirjaston käyttö sovelluskehystä käytettäessä sovelluskehyskerros= kirjastokerros sovelluskerros Sovelluskehykset (application frameworks) normaali aliohjelmakirjaston käyttö sovellustoiminnot function aliohjelmakirjasto Harri Laine 11/12

Sovelluskehykset (application frameworks) Sovelluskehys toteuttaa joitain suunnittelumalleja ja tarjoaa niihin perustuvan yleisrakenteen Sovelluskehys voi tarjota myös joitakin tietylle sovellusalueelle (application domain) tyypillisiä erityispalveluja esim. CASE-kehys voisi tarjota valmiina kaavioikkunoiden hallinnan kaavioelementtien luonnin, poiston ja siirtelyn kaavioelementtien välisten yhteyksien käsittelyn kaavion paperitulostuksen kaavioelementin piirtäminen jäisi kuitenkin sovelluskohtaisen aliluokan tehtäväksi näkymä HYTKY/anycase kehykseen kaavioikkuna suunnitelma kaavio case-tool työkalu kaavioelementti... solmu yhteys luonti_tk siirto_tk tarkentuva solmukuva viiva Harri Laine 12/12