Kehyksillä toteuttettujen tuotelinjojen rakenteellinen optimointi

Samankaltaiset tiedostot
11. Kehysarkkitehtuurit

8. Kehysarkkitehtuurit

12. Kehysarkkitehtuurit

Ohjelmistokehykset (software frameworks)

Ohjelmistoarkkitehtuurit, syksy

Oliosuunnittelu. Oliosuunnittelu

Ohjelmistokehykset (software frameworks)

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

Ohjelmistokehykset ohjelmistorunkoja uudelleenkäyttö olioperustaisista ohjelmistorunko

Luento 8. Ohjelmistokehykset Tuoteperheet CSM14101 Ohjelmistoarkkitehtuurit

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

Uudelleenkäytön jako kahteen

Kehyspohjainen ohjelmistokehitys

Avoimet ohjelmistokehykset

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

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

10. Tuoterunkoarkkitehtuurit

Microsoft Visual J++ ohjelmointiympäristö

Visual Basic -sovelluskehitin Juha Vitikka

Ohjelmistoarkkitehtuurit

Ohjelmistoarkkitehtuurit. Kevät

7. Tuoterunkoarkkitehtuurit

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

9. Muunneltavuuden hallinta

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

Käyttäjien tunnistaminen ja käyttöoikeuksien hallinta hajautetussa ympäristössä

Sovellusarkkitehtuurit

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

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Rajapinta (interface)

Ohjelmistoarkkitehtuurit, syksy

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

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

Software product lines

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

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

Ohjelmistotekniikan menetelmät, suunnittelumalleja

Harjoitustehtävät ja ratkaisut viikolle 48

Graafinen käyttöliittymä, osa 1

TIE Ohjelmistojen suunnittelu

Testausdokumentti. Kivireki. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

OHJELMISTOKEHYSTEN ERIKOISTAMISTUTORIAALIT FRED- YMPÄRISTÖSSÄ

Ylläpitodokumentti. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Avointen ohjelmistojen käyttö ohjelmistokehityksessä

10. Muunneltavuuden hallinta: variaatiopisteet

Ohjelmistojen suunnittelu

10. Muunneltavuuden hallinta: variaatiopisteet

Ohjelmistoarkkitehtuurit. Kevät 2014

13/20: Kierrätys kannattaa koodaamisessakin

Java kahdessa tunnissa. Jyry Suvilehto

Ohjelmistotuotanto. Luento

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Oliot ja tyypit. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho. Jyväskylän yliopisto Tietotekniikan laitos

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

Tuoterunko hajautetussa ympäristössä

11. Kehysarkkitehtuurit

Järjestelmäarkkitehtuuri (TK081702) Järjestelmäarkkitehtuuri. Järjestelmäarkkitehtuuri

Muusta kuin vesisioista

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

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Suunnittelumallien käyttö ohjelmistosuunnittelussa

CT50A2601 Käyttöjärjestelmät Androidin ja Symbianin vertailu Seminaarityö

Antitammirobotti. Antti Meriläinen Martin Pärtel 29. toukokuuta 2009

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

Olio-ohjelmointi Johdanto suunnittelumalleihin. 1. Yleistä

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

15. Ohjelmoinnin tekniikkaa 15.1

T Henkilökohtainen harjoitus: FASTAXON

Osittavat arkkitehtuurityylit. Palveluihin perustuvat arkkitehtuurityylit. Erikoisarkkitehtuurityylit

Ohjelmistoarkkitehtuurit. Kevät

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset

Eclipse ja JUnit-ohjelmoijatestit

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 27. lokakuuta 2009

Ohjelmistojen mallintaminen. Luento 11, 7.12.

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

11. Tuoterunkoarkkitehtuurit

3. Komponentit ja rajapinnat

Plugin-pohjaiset sovellukset arkkitehtuurit

Qt kaikkialla?

XPages käyttö ja edut Jarkko Pietikäinen toimitusjohtaja, Netwell Oy

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

Käännös, linkitys ja lataus

Muunneltavuuden hallinta (Variability management):

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

Muunneltavuuden hallintaa Kevät 2016 Samuel Lahtinen. Ohjelmistoarkkitehtuurit 2016

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

Malliperustainen ohjelmistokehitys - MDE Pasi Lehtimäki

17/20: Keittokirja IV

Ohjelmistoarkkitehtuurit kevät

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

Hajautettujen järjestelmien rakentaminen - Jini. Ohjelmistotuotantovälineet-seminaarin esitelmä

P e d a c o d e ohjelmointikoulutus verkossa

Ohjelmointi II. Erkki Pesonen Luennot ja harjoitukset. Itä-Suomen yliopisto Tietojenkäsittelytieteen laitos 2015

9 Edistynyt PHP-ohjelmointi

Rich Web Applications in Server-side Java without Plug-ins or JavaScript

Solidity älysopimus ohjelmointi. Sopimus suuntautunut ohjelmointi

Groovy. Niko Jäntti Jesper Haapalinna Group 31

6. Arkkitehtuurityylit

Ohjelmistoarkkitehtuuri

Transkriptio:

Kehyksillä toteuttettujen tuotelinjojen rakenteellinen optimointi Pietu Pohjalainen Geneerinen metaohjelmointi Syksy 2004 Tietojenkäsittelytieteen laitos Helsingin yliopisto

Esityksen sisältö Oliopohjaiset kehykset Tuoteperhe-arkkitehtuurit Ongelmakohtia mobiiliohjelmointiin sovellettaessa Ratkaisuehdotus Empiirisiä havaintoja

Oliopohjaiset kehykset Oliopohjaisia kehyksiä käytetään ohjelmakoodin uudelleenkäyttöön Jako sovelluskehyksiin (application framework) ja kehyskomponentteihin (framework component) Sovelluskehystä käyttäessä kehyksen erikoistus vastaa täydellistä sovellusta Kehyskomponenttia käyttäessä erikoistettuja ohjelmia käytetään muiden ohjelmien osana

Muunneltavat kehykset Tavallinen muoto on muunneltava kehys (white-box framework) Käyttö tapahtuu perimällä kehysluokkia ja/tai toteuttamalla kehyksen rajapintoja

Muita kehyksien jaotteluita Myös muita kehyksien jaotteluita nähdään, esim [Taligent 1995], Sovelluskehyksiin, Ongelma-alue kehyksiin (domain frameworks) Tukikehyksiin (support or utility frameworks) Joidenkin mielestä jopa MVC on kehys

Hollywood-periaate Perinnän kautta erikoistetuissa kehyksissä Hollywood-periaate Don't call us, we'll call you Sovellus Uudelleenkäytettäviä moduuleita Sovelluskehys Sovelluskohtainen koodi Uudelleenkäytettävä koodi

Tapa toteuttaa tuotelinjaarkkitehtuuri Esimerkkejä sovelluskehyksistä Javan AWT ja Swing Esimerkkejä kehyskomponenteista Javan Collections Oliopohjaisella sovelluskehyksellä voidaan toteuttaa tuotelinjaarkkitehtuuri

Tuotelinja-arkkitehtuuri Engl. product-line architecture Tavoitellaan systemaattista uudelleenkäyttöä suunnittelemalla sovellusaluetta ns. domain-mallinnuksella Sovellusten välinen variaatio kiinnitetään variaatiopisteisiin

Nokian tuotelinja Perusplatform SymbianOS Laajennokset NokiaUI 1.0 NokiaUI 2.0 NokiaSound Series 60 Series 40 Series 80 Tuoteplatformikohtaiset lisäykset (UI-kerros) Tuoteohjelmat (A-P Tuovinen)

Siirrettävän sovelluksen tuottaminen? Nokia Siemens Oma sovellus Motorola

Perustetaan oma tuotelinja Domainmallinnuksessa käydään läpi olemassa olevat tuotteet joille oma sovellus tulisi olla siirrettävissä Ratkaisu:

Huonoja puolia Huonona puolena oliokehys tuottaa turhia väliluokkia Koskimies huomauttaa Oliokirjassa (s. 266) Kehyksellä voi olla myös vaikea tuottaa pieni, riisuttu sovellus (esimerkiksi rajoitetulla muistilla varustettuun suoritusympärisöön): sovelluskehyksellä tuotetettu sovellus saattaa sisältää kehyksen perusvälineistön, vaikka sitä ei käytettäisikään.

Turhat välirajapinnat MIDI- ja tavalliset äänet eristävä rajapinta kätevä tapa toteuttaa Lopullisessa levityspaketissa kuitenkin valitaan vain toinen toteutus

.. voidaan poistaa Samaan tapaan kuin funktioita ja vakioita voidaan laventaa Voidaan myös rajapintamäärittelyitä laventaa

Milloin Soveltamalla levityspaketin kokoamisen yhteydessä ohjelmatason analyysiä (Whole-program analysis) Voidaan luokkahierarkiaa tutkia (Classhierarchy analysis) Löydettäessä rajapintaluokka, jolla on vain yksi toteuttava konkreettinen luokka Voidaan rajapintaluokka poistaa

Miten Täsmällisemmät algoritmit esitetään paperissa Ideana vaihtaa tyyppimäärittely kaikista käyttöpaikoista Käyttöpaikkoja Paluuarvot Argumentit Jäsenkentät Kutsukohdat Kenttien käyttökohdat Lisäksi peittyvien kenttien kanssa oltava tarkkana

Laajennettavissa myös abstrakteihin luokkiin Samaan tapaan voidaan analyysiä soveltaa abstrakti luokka konkreettinen luokka -yhteyteen Jos abstraktin luokan toteuttaa vain yksi konkreettinen luokka, Voidaan ne laventaa yhdeksi

Entä onko käytännöllinen Alustavasti kyllä: Suunnittelumallit Abstract Factory Template Method tuottavat tällaisia rakenteita oikeasti?

Toteutus Idean kokeilemiseksi tehty optimoinnin toteuttava prototyyppi Javan luokkatiedostojen käsittelemiseen käytetään Apache BCEL -kirjastoa Yhteensä noin 7,000 riviä koodia Josta itse optimointien toteutus noin 2,000 riviä

Paljonko tilaa säästyy? Rajapintojen laventamisessa tilaa säästyy: Pienentyneen luokkahierarkian ansiosta Asiakasluokkien symbolitaulun pienentymisessä Jokaisessa kutsukohdassa Abstraktin luokan laventamisessa lisäksi Syrjäytettyjen metodien pois jättämisellä

Empiirinen kokeilu Tilanvienti riippuu pääasiassa symbolitaulun koosta Testissä 64kB kokoinen J2MEpeli, jossa neljä rajapintaa Säästöä 2,200 tavua

Huomattavaa Menetelmän käyttöaika oleellinen Voidaan toteuttaa vasta kokoonpanovaiheessa, kun koko ohjelman toimintaa koskeva 'wholeprogram analysis' mahdollista Vaatii lisäksi 'closed world'-oletuksen: Käyttäjän määrittelemien luokkalataajien tulee olla kiellettyjä Tämä pitää paikkansa J2ME/MIDP:issä

Jatkosuunnitelmia & yhteenveto Tällä hetkellä käytössä osana käännösprosessia suomalaisessa pelitalossa Abstraktien luokkien laventamisen toteutus vielä kesken Analyysien tarkkuutta voi parantaa, kirjallisuudesta löytyy mielenkiintoisia esimerkkejä Harmittavasti laitoksella ei näitä asioita enää ymmärretä :-(

Seminaaritekstin lisäksi lähteitä [Taligent 1995]: Adair, Deborah: Building Object-Oriented Frameworks, Taligent Inc. [Oliokirja 2000]: Koskimies, Kai: Oliokirja