Kehyspohjainen ohjelmistokehitys

Samankaltaiset tiedostot
11. Kehysarkkitehtuurit

12. Kehysarkkitehtuurit

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

Ohjelmistoarkkitehtuurit

Ohjelmistoarkkitehtuurit. Kevät

11. Kehysarkkitehtuurit

8. Framework architectures

8. Kehysarkkitehtuurit

Ohjelmistoarkkitehtuurit kehysarkkitehtuurit. Kevät 2014

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

Ohjelmistokehykset ohjelmistorunkoja uudelleenkäyttö olioperustaisista ohjelmistorunko

Ohjelmistoarkkitehtuurit kehysarkkitehtuurit. Kevät 2016

Ohjelmistokehykset (software frameworks)

10. Tuoterunkoarkkitehtuurit

Ohjelmistoarkkitehtuurit, syksy

Luento 8. Ohjelmistokehykset Tuoteperheet CSM14101 Ohjelmistoarkkitehtuurit

Ohjelmistokehykset (software frameworks)

TIE Ohjelmistojen suunnittelu

7. Tuoterunkoarkkitehtuurit

Suunnittelumalleja, MVC. Juha Järvensivu 2008

Muusta kuin vesisioista

4. Komponenttien vuorovaikutus

TIE Ohjelmistojen suunnittelu

Ohjelmistoarkkitehtuurit, syksy

Kehyksillä toteuttettujen tuotelinjojen rakenteellinen optimointi

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

Ohjelmistotekniikan menetelmät, suunnittelumalleja

Ohjelmistoarkkitehtuurit. Kevät

Oliosuunnittelu. Oliosuunnittelu

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

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

11. Tuoterunkoarkkitehtuurit

11. Tuoterunkoarkkitehtuurit

Ohjelmistoarkkitehtuurit. Kevät 2014

Osio 4: Graafinen käyttöliittymä

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

Viestinvälitysarkkitehtuurit

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

Rajapinta (interface)

Graafisen käyttöliittymän ohjelmointi Syksy 2013

4. Komponenttien vuorovaikutus

Viestinvälitysarkkitehtuurit Lähtökohta:

Sunnittelumallit Harjoitustehtävät syksy 2015 / Simo Silander

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

Ohjelmistojen mallintaminen, suunnittelumalleja

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

3. Komponentit ja rajapinnat

Ohjelmistotuotanto. Luento

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

9. Muunneltavuuden hallinta

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Metodien tekeminen Javalla

UML ja luokkien väliset suhteet

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Ohjelmoinnin peruskurssien laaja oppimäärä

Osio 4: Graafinen käyttöliittymä

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

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

TIE Ohjelmistojen suunnittelu

Ohjelmoinnin peruskurssien laaja oppimäärä

Uudelleenkäytön jako kahteen

Muutamia peruskäsitteitä

Osittavat arkkitehtuurityylit. Palveluihin perustuvat arkkitehtuurityylit. Erikoisarkkitehtuurityylit

Web Services tietokantaohjelmoinnin perusteet

15. Ohjelmoinnin tekniikkaa 15.1

Arkkitehtuurikuvaus. Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy. Ryhmä 14

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

Graafisen käyttöliittymän ohjelmointi

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

4 Managing component interactions

Ohjelmistoarkkitehtuurit kevät

Ohjelmistoarkkitehtuurit kevät

Microsoft Visual J++ ohjelmointiympäristö

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

10. Muunneltavuuden hallinta: variaatiopisteet

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Jypelin käyttöohjeet» Ruutukentän luominen

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

Object Framework - One. OF-1 is a high-productive Multi-UI OpenEdge data driven development framework. Veli-Matti Korhonen

Ohjelmistojen suunnittelu

10. Muunneltavuuden hallinta: variaatiopisteet

Ohjelmistotuotanto. Luento

9. Periytyminen Javassa 9.1

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

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

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

JUnit ja EasyMock (TilaustenKäsittely)

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

Olio-ohjelmointi Javalla

Avoimet ohjelmistokehykset

Ohjelmistoarkkitehtuurit Johannes Koskinen.

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Ohjelmistoarkkitehtuurit

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

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

Palveluperustaiset arkkitehtuurityylit

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

Ohjelmistoarkkitehtuurit kevät

Ohjelmistoarkkitehtuurit

Transkriptio:

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 1

Flexibility requirement: Creature variation Structure DefaultCreature move show get gety interact die growold Erikoistamismalli NewCreature move show get 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(); } } } 2

Kehykset ja suunnittelumallit AbsFactory createbutton(): Button createmenu(): Menu Kehys GUI-kehys WinFactory Sovellus Button Menu Kehys <<create>> Service WinButton WinMenu 3

Kehys vs. sovellus Hyvin suunniteltu oliosovellus on usein (implisiittisen) kehyksen erikoistus. Uudelleenkäytettävyys ylläpidettävyys - siirrettävyys 4

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

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

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

Vastuuketju (Chain of Responsibility) Ongelma: Miten voi antaa monille sovelluskohtaisille olioille/komponenteille mahdollisuuden käsitellä kehykseltä tuleva palvelukutsu? 8

Esimerkki Kehys Client handle Sovellus h1 = new Handler1; join h1 to Client; h2 = new Handler2; join h2 to Client+h1; Handler3 Handler2 Handler1 9

Esimerkki 10

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

Esimerkki Kehys Registering Default Sovellus d1 = new Decorator1; join d1 to Default; register d1; d2 = new Decorator2; join d2 to d1; register d2; Decorator Decorator1 Decorator1 12

Esimerkki 13

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

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

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 16

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

Kerrosanalyysi: erikoistamis-dimensio rivi riippuu sarakkeesta Eating Default Core Eating Default Core 18

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 19

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 protected metodeihin (helposti muutettavissa). Älä alusta suoraan muuttujien määrittelyssä (ei voi ylimääritellä aliluokissa). 20

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 21

Sovellusalue: videopelit Perinteinen Taloudellinen näkökulman kulma 1. peli 2. peli 3. peli työtuntia 0 100 200 300 400 500 600 700 800 900 Kehykseen perustuva Kehyksen rakentaminen + koulutus 1. peli 2. peli 3. peli Suorituskyky: aika +70% tila +200% 22

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 23

Ä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. 24

Yhteenvetoa Kehys on 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ä 25