11. Kehysarkkitehtuurit

Samankaltaiset tiedostot
Kehyspohjainen ohjelmistokehitys

Ohjelmistoarkkitehtuurit

Ohjelmistoarkkitehtuurit. Kevät

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

12. Kehysarkkitehtuurit

Ohjelmistoarkkitehtuurit kehysarkkitehtuurit. Kevät 2014

Ohjelmistoarkkitehtuurit kehysarkkitehtuurit. Kevät 2016

8. Kehysarkkitehtuurit

11. Kehysarkkitehtuurit

8. Framework architectures

Ohjelmistoarkkitehtuurit kevät Muunneltavuuden hallinta: variaatiopisteet. Ohjelmistot muuntuvat kahdessa dimensiossa

Ohjelmistokehykset ohjelmistorunkoja uudelleenkäyttö olioperustaisista ohjelmistorunko

Ohjelmistokehykset (software frameworks)

Ohjelmistoarkkitehtuurit, syksy

Ohjelmistokehykset (software frameworks)

Luento 8. Ohjelmistokehykset Tuoteperheet CSM14101 Ohjelmistoarkkitehtuurit

TIE Ohjelmistojen suunnittelu

7. Tuoterunkoarkkitehtuurit

10. Tuoterunkoarkkitehtuurit

Muusta kuin vesisioista

Kehyksillä toteuttettujen tuotelinjojen rakenteellinen optimointi

Suunnittelumalleja, MVC. Juha Järvensivu 2008

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

TIE Ohjelmistojen suunnittelu

Ohjelmistoarkkitehtuurit, syksy

4. Komponenttien vuorovaikutus

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

Oliosuunnittelu. Oliosuunnittelu

Osio 4: Graafinen käyttöliittymä

Yksikkötestaus. import org.junit.test; public class LaskinTest public void testlaskimenluonti() { Laskin laskin = new Laskin(); } }

Harjoitustehtävät ja ratkaisut viikolle 48

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmistoarkkitehtuurit. Kevät 2014

Olio-ohjelmointi Javalla

Tuoterunkoarkkitehtuurit. Ohjelmistoarkkitehtuurit kevät Uudelleenkäyttö. Johannes Koskinen.

Osio 4: Graafinen käyttöliittymä

Ohjelmistoarkkitehtuurit. Kevät

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Rajapinta (interface)

Ohjelmistotuotanto. Luento

Metodien tekeminen Javalla

Graafisen käyttöliittymän ohjelmointi Syksy 2013

T Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

4. Komponenttien vuorovaikutus

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

11. Tuoterunkoarkkitehtuurit

9. Muunneltavuuden hallinta

Ohjelmistotekniikan menetelmät, suunnittelumalleja

11. Tuoterunkoarkkitehtuurit

Harjoitus 3: Flash-komponenttiarkkitehtuuri ( )

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

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

Uudelleenkäytön jako kahteen

Ohjelmoinnin peruskurssien laaja oppimäärä

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

3. Komponentit ja rajapinnat

T Henkilökohtainen harjoitus: FASTAXON

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

JUnit ja EasyMock (TilaustenKäsittely)

Mikä yhteyssuhde on?

JReleaser Yksikkötestaus ja JUnit. Mikko Mäkelä

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

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

Web Services tietokantaohjelmoinnin perusteet

UML ja luokkien väliset suhteet

Ohjelmistojen suunnittelu

Viestinvälitysarkkitehtuurit

Roolirajapinnat Välittäjät Fasaadit Kutsun siirtäminen Edustajat Takaisinkutsut Tapahtumat Viestit Sovittimet Tehtaat

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

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

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Avoimet ohjelmistokehykset

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Tietorakenteet ja algoritmit

TIE Ohjelmistojen suunnittelu

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

Viestinvälitysarkkitehtuurit Lähtökohta:

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Ohjelmointi 2 / 2011 Välikoe / 25.3

Osittavat arkkitehtuurityylit. Palveluihin perustuvat arkkitehtuurityylit. Erikoisarkkitehtuurityylit

15. Ohjelmoinnin tekniikkaa 15.1

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

Java kahdessa tunnissa. Jyry Suvilehto

13. Hyvä ohjelmointitapa (osa 1) 13.1

Ohjelmistoarkkitehtuurit. Kevät Johannes Koskinen.

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

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

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

Ohjelmointi 2 / 2010 Välikoe / 26.3

Ohjelmistojen mallintaminen, syksy 2011, laskuharjoitus 2

Ohjelmistoarkkitehtuurit kevät

JAVA-OHJELMOINTI 3 op A274615

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

10. Muunneltavuuden hallinta: variaatiopisteet

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

Jypelin käyttöohjeet» Ruutukentän luominen

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

Transkriptio:

11. Kehysarkkitehtuurit Johdanto Kehystyypit Kehykset ja arkkitehtuuri Kehykset ja suunnittelumallit Kehyspohjainen ohjelmistokehitys Esimerkkikehys Kehysten toteutuksesta Kehysten etuja ja ongelmia Yhteenvetoa 1

Kehykset ja suunnittelumallit Suunnittelumalleilla (GoF) voidaan lisätä järjestelmän joustavuutta sekä tavallisissa sovelluksissa (ylläpito, siirrettävyys) että kehyksissä (uudelleenkäytettävyys) Hyvin suunniteltu oliosovellus voidaan ymmärtää usein (implisiittisen) kehyksen erikoistuksena. 2

Suunnittelumallit kehyksen erikoistamisrajapintana Sovelluskohtainen koodi Kehys Suunnittelumallin ilmentymä 3

Tyypillisiä kehyksissä käytettyjä GoF- suunnittelumalleja Operaatiorunko (Template Method) Strategia (Strategy) Kuorruttaja (Decorator) Tehtaat (Abstract Factory, Factory Method) Tarkkailija (Observer)... 4

Operaatiorunko (Template Method) Ongelma: Metodin sovelluskohtainen staattinen variointi 5

Kehyksessä Kehys Creature draw() move(dx, dy) setcolor(backgr) draw() x = x + dx y = y + dy setcolor(color) draw() Sovellus MyCreature draw() piirretään oma eliö 6

Strategia (Strategy) Ongelma: Metodin dynaaminen sovelluskohtainen variointi (isäntäolion elinaikana) 7

Kehyksessä Kehys setcolor(backgr) drawer.draw() x = x + dx y = y + dy setcolor(color) drawer.draw() Creature setdrawer(drawer) move(dx, dy) Drawer Sovellus dd = new DeadDrawer(); c.setdrawer(dd); piirretään oma eliö elävänä AliveDrawer draw() DeadDrawer draw() 8

Kuorruttaja (Decorator) Ongelma: Miten antaa mahdollisuus liittää sovelluskohtaista toiminnallisuutta tiettyyn kehyksen komponentiin dynaamisesti? 9

Esimerkki 10

Kehyksessä creature.interaction(); Kehys Behavior interaction() Behavioral interaction() DefCreature interaction() append(behavioral) DefWorld Sovellus Behavior::interaction(); if energy < min { host.die(); } Behavior::interaction(); makesound(); MyBehavior2 MyBehavior1 interaction() interaction() Main: c = new DefCreature() b1 = new MyBehavior1(); c.append(b1); b2 = new MyBehavior2(); c.append(b2); 11

Abstrakti tehdas (Abstract Factory) Ongelma: Miten luoda yhdenmukaisesti tietyn sovelluskohtaisen luokkakokoelman olioita kehyksessä? 12

Kehyksessä Kehys Obstacle Creature World simulate() ElemFactory makecreature(): Creature makeobstacle(): Obstacle Sovellus MyObstacle MyCreature MyFactory Main: f = new MyFactory() world = new World(f); world.simulate(); return new MyCreature(); return new MyObstacle(); makecreature() makeobstacle() 13

Kehyksessä AbsFactory createbutton(): Button createmenu(): Menu Kehys GUI-kehys WinFactory Sovellus Button Menu Kehys <<create>> Service WinButton WinMenu 14

Tarkkailija (Observer) Ongelma: Miten antaa sovelluskohtaisille komponenteille mahdollisuus reagoida jonkin kehyksen komponentin tilan muutoksiin? 15

if leader and warning { obs*.notifyherdevent(); } Kehys Creature Kehyksessä DefCreature interaction() HerdObserver notifyherdevent() Sovellus MyCreature move() ; notifyherdevent() 16

if meteorhit { obs*.notifymeteor(); } Kehys MeteorSource register() Kehyksessä DefWorld simulate() register(meteorobserver) MeteorObserver notifymeteor() Creature Sovellus MyCreature notifymeteor() 17

Kehyspohjainen ohjelmistokehitys Sovellusalueen käsitemalli, piirremalli Yhteiset vaatimukset Kehyksen suunnittelu Suunnittelumallit Vaatimusmäärittely Muunneltavuusvaatimukset Kehysarkkitehtuuri Erikoistamisrajapinta Voidaan antaa erikoistamismalleina Alustakehitysprosessi Kehyksen toteutus Kehys Tuote Vaatimusmäärittely Tuotevaatimukset Tuoteen toteutus Erikoistus Tuotekehitysprosessi 18

Flexibility requirement: Creature variation Structure DefaultCreature move show getx gety interact die growold Erikoistamismalli NewCreature move show getx gety interact die growold Explanations DefaultCreature: Default implementation for creatures NewCreature: Application dependent creature type move: Single movement behavior show: Displays creature on screen interact: Interaction between two creatures die: dying of a creature growold: aging of a creature Constraints move: must call "show" die: must remove the creature from the world growold: must increase age Example class NewCreature extends DefaultCreature { int energy; public NewCreature(int x, int y, int e) { super(x, y); energy = e; } public void move() { xcoord = (xcoord+1)%myworld.getsize(); show(); } public void show() {...} } public void interact(abstractcreature c) { if (c!= this && c instanceof NewCreature) { if (((NewCreature)c).energy < energy) { c.die(); } } } 19

Esimerkkikehys riippuvuuksien suunta CoreRoot DefaultRoot EatingRoot Looginen dimensio CoreGui DefaultGui EatingGui CoreManager DefaultManager EatingManager CoreFactories DefaultFactories EatingFactories CoreView DefaultView EatingView CoreModel DefaultModel EatingModel Erikoistamis-dimensio 20

Kerrosanalyysi: looginen dimensio rivi riippuu Root Gui Manager Factories View Model sarakkeesta Root X X X Gui X Manager X X X Factories X X View X Model 21

Kerrosanalyysi: erikoistamis-dimensio rivi riippuu sarakkeesta Eating Default Core Eating X X Default X Core 22

Luokkakategoriat ja nimeämisk miskäytännöt Base Pakollisen toiminnallisuuden toteutus, oletetaan kaikille sovelluksille (final methods) Sijoitettu core-paketteihin yhdessä abstraktin kehyksen (rajapintojen) kanssa Default Valinnaisen ja vaihtoehtoisen toiminnallisuuden toteutus, oletetaan useille sovelluksille Sijoitettu default-paketteihin Eating Sovelluskohtainen (Eating-sovellus) toteutus Sijoitettu eating-paketteihin 23

Kehysten toteutuksesta Varo tuoterunkojen painovoimalakia: onko tämä core-kerroksen toiminnallisuus todella yhteistä kaikille? Oletustoteutusten tulisi antaa tyypillinen minimitoiminnallisuus, ei kaikille välttämätöntä toteutusta. Tee todennäköinen variaatio helpoksi toteuttaa, harvinaisempi voi olla vaikeampaa toteuttaa. Säikeistämistä voi käyttää useamman kehyksen yhdistämiseen. Jaa pitkät metodirungot suojattujen metodien kutsuiksi, joiden toteutus on varioitavissa (alkuperäinen metodi määrää asioiden suoritusjärjestyksen, mutta ei sisältöä). Käytä final metodeja ei-varioituvaan toiminnallisuuteen. Laita oletusarvojen asetukset erillisiin suojattuihin metodeihin (helposti muutettavissa). Älä alusta suoraan muuttujien määrittelyssä (ei voi ylimääritellä aliluokissa). 24

Kehysten etuja ja ongelmia Kehysten etuja tuotealustojen toteutustekniikkana: Paljon kokemusta (esim. GUI-kehykset) Soveltaa yleistä, tunnettua OO teknologiaa (vrt. DSL) Tukee avointa erikoistamista (vrt. DSL) Tukee hyvin kerroksittaisia/hierarkkisia tuotealustoja 25

Kehysten ongelmia Teknisesti vaativa tapa tehdä ohjelmistoja, prosessi usein hyvin iteratiivinen Kehysten yhdistäminen usein vaikeaa Kehyksistä tulee helposti suuria, mutkikkaita ja vaikeasti hallittavia ohjelmistoja (pienentää yrityksen rekkakerrointa) Sovellusten testaaminen voi olla vaikeaa ilman kehyksen koodia 26

Älä ryhdy tekemää ään n kehystä,, jos et ymmärrrä hyvin sovellusaluetta; et ole aikaisemmin tehnyt sovelluksia tälle sovellusalueelle; sinulla ei ole hyvää kokemusta oliomenetelmien, -kielten ja suunnittelumallien käytöstä; johto ei ole sitoutunut pitkään ja haastavaan projektiin. 27

Yhteenvetoa Kehys on OO tapa toteuttaa tuotealusta Kehysarkkitehtuureja käytetään paljon yrityksissä, kokemukset valtaosalta positiivisia Kehyksen tekeminen on huomattavasti vaativampaa kuin yksittäisen sovelluksen Vältä suurien muunneltavien (white-box) kehysten tekemistä 28

Koe 5 tehtävää + jokeri, a 5p, yht. max 30p 1 tehtävä suoraan viikkoharjoituksista 1 tehtävä teoriakysymys (suoraan kalvoista) 3 tehtävää viikkoharjoitusten tyyppisiä soveltamisia jokeri: kysymys vierailuluentojen sisällöstä valmistautuminen: käy läpi luentokalvot ja tarkista ymmärrätkö sisällön jos et ymmärrä, tarkista luentovideoilta/kirjasta käy läpi viikkoharjoitukset + ratkaisut mene oluelle kavereitten kanssa 29