Ohjelmistoarkkitehtuurit, syksy

Samankaltaiset tiedostot
Ohjelmistokehykset (software frameworks)

Ohjelmistokehykset (software frameworks)

Ohjelmistokehykset ohjelmistorunkoja uudelleenkäyttö olioperustaisista ohjelmistorunko

Luento 8. Ohjelmistokehykset Tuoteperheet CSM14101 Ohjelmistoarkkitehtuurit

12. Kehysarkkitehtuurit

11. Kehysarkkitehtuurit

8. Kehysarkkitehtuurit

Oliosuunnittelu. Oliosuunnittelu

Kehyksillä toteuttettujen tuotelinjojen rakenteellinen optimointi

Kehyspohjainen ohjelmistokehitys

Uudelleenkäytön jako kahteen

Ohjelmistoarkkitehtuurit

Ohjelmistoarkkitehtuurit. Kevät

Avoimet ohjelmistokehykset

Tuoterunko hajautetussa ympäristössä

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

Ohjelmistojen suunnittelu

Ohjelmistoarkkitehtuurit kehysarkkitehtuurit. Kevät 2014

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

Ylläpito. Ylläpito. Ylläpidon lajeja Ohjelmistotuotanto, syksy 1998 Ylläpito

Harjoitustehtävät ja ratkaisut viikolle 48

Muusta kuin vesisioista

Olio-ohjelmointi Johdanto suunnittelumalleihin. 1. Yleistä

Ohjelmistoarkkitehtuurit, syksy

Ohjelmistojen mallinnus Ohjelmistoarkkitehtuuri Harri Laine 1

Osittavat arkkitehtuurityylit. Palveluihin perustuvat arkkitehtuurityylit. Erikoisarkkitehtuurityylit

Järjestelmäarkkitehtuuri (TK081702)

11. Kehysarkkitehtuurit

Ohjelmistotekniikan menetelmät, suunnittelumalleja

Ohjelmistojen mallintaminen kertausta Harri Laine 1

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

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

11/20: Konepelti auki

Ylläpito. Ylläpidon lajeja

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

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

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

9. Muunneltavuuden hallinta

Ohjelmoinnin peruskurssien laaja oppimäärä, kevät

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

Muutamia peruskäsitteitä

10. Tuoterunkoarkkitehtuurit

7. Tuoterunkoarkkitehtuurit

UML:n yleiskatsaus. UML:n osat:

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

Hirviö. Design Patterns

Johdatus sovellussuunnitteluun, s99, osa3 Helsingin yliopisto;/tktl Harri Laine 1. Olioiden väliset yhteydet. Olioiden väliset yhteydet

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

Plugin-pohjaiset sovellukset arkkitehtuurit

Ohjelmistoarkkitehtuurit. Syksy 2010

Ohjelmistojen mallintaminen, mallintaminen ja UML

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Yhteydelle voi antaa nimen kumpaankin suuntaan Sille ei tarvise antaa lainkaan nimeä Yhteysnimen asemasta tai lisäksi voidaan käyttää roolinimiä


Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset

Johdatus sovellussuunnitteluun, s99, osa3 Helsingin yliopisto;/tktl Harri Laine 1. Olioiden väliset yhteydet. Olioiden väliset yhteydet

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

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Palveluperustaiset arkkitehtuurityylit

Suunnitteluvaihe prosessissa

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

Ohjelmistotuotanto. Luento

Järjestelmäarkkitehtuuri (TK081702) Avoimet web-rajapinnat

Viestinvälitysarkkitehtuurit

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

Ohjelmistoarkkitehtuurit kehysarkkitehtuurit. Kevät 2016

SEPA - Design Patterns

ELM GROUP 04. Teemu Laakso Henrik Talarmo

OHJELMISTOKEHYSTEN ERIKOISTAMISTUTORIAALIT FRED- YMPÄRISTÖSSÄ

Hirviö. Design Patterns

Ohjelmistojen mallintaminen. Luento 11, 7.12.

Ohjelmistoarkkitehtuurit kevät

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

Suunnittelumallien käyttö ohjelmistosuunnittelussa

13/20: Kierrätys kannattaa koodaamisessakin

9 Edistynyt PHP-ohjelmointi

Microsoft Visual J++ ohjelmointiympäristö

Visual Basic -sovelluskehitin Juha Vitikka

Enterprise SOA. Nyt. Systeemi-integraattorin näkökulma

Ohjelmistoarkkitehtuurit. Kevät

6. Arkkitehtuurityylit

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

2. Ohjelmistotuotantoprosessi

Viestinvälitysarkkitehtuurit Lähtökohta:

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

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

3. Komponentit ja rajapinnat

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

Ohjelmistotekniikan menetelmät, kesä 2008

AU Automaatiotekniikka. Toimilohko FB

Ohjelmistojen mallintaminen Luokkakaaviot Harri Laine 1

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

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

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

Ohjelmistojen mallintaminen, kesä 2010

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

Ohjelmistotekniikan menetelmät, Ohjelmistotuotannon työkaluista

TIE Ohjelmistojen suunnittelu

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

Transkriptio:

Ohjelmistoarkkitehtuurit 8.10.2012 1 (software frameworks) Osittain abstraktiksi jätettyjä ohjelmistorunkoja, joita eri tavoin täydentämällä saadaan rakennettua kokonaisia uusia sovelluksia tai sovelluksen osia Suosittu tekniikka tuoterunkoarkkitehtuurien toteuttamiseksi Tavoitteena laajamittainen ja systemaattinen ohjelmistojen (sekä koodin että yleisrakenteen eli arkkitehtuurin) uudelleenkäyttö Olioperustaisissa kehyksissä ohjelmistorunko = kokoelma luokkia, komponentteja ja rajapintoja sisältävät ohjelmakoodia, joten ne ovat sidoksissa ohjelmointikieleen 8.10.2012 2 Ensimmäinen laajalti käytetty ohjelmistokehys: Smalltalk- 80-ympäristön Model-View-Controller Alkuperäisen Model-View-Controller-kehyksen arkkitehtuurin pohjalta määritelty MVC-arkkitehtuurityyli Erityisesti käyttöliittymätoteutukseen on kehitetty useita kehyksiä työasemasovelluksiin, web-sovelluksiin, useille eri ohjelmointikielille, kaupallisia ei kaupallisia 8.10.2012 3 Harri Laine 1

Käyttöliittymäkehysten menestys ja suuri määrä leimasivat ohjelmistokehykset pitkäksi aikaa pelkästään käyttöliittymien toteutukseen soveltuvaksi tekniikaksi Ohjelmistokehyksiä on kuitenkin toteutettu monille sovellusalueille Esimerkiksi: hypermediajärjestelmät, kaavioeditorit, käyttöjärjestelmät, kääntäjät, laskutusjärjestelmät, palohälytysjärjestelmät, laitetuotantolinjojen mittausohjelmistot, elearning, Käyttöliittymäkehykset ovat yleiskehyksiä, jotka keskittyvät käyttöliittymäosan toteutukseen, mutta eivät rajaa sovellusaluetta. Muut kehykset ovat yleensä enemmän sovellusalueesta riippuvia 8.10.2012 4 Kehys voi olla kokonaisvaltainen koko sovellusta hallitseva tai osittaisongelmaan tarkoitettu tukikehys esim. käyttöliittymäkehykset rajautuvat käyttöliittymän toteutukseen, etäkäyttökehykset etäkäytön hallintaan Ohjelmistokehys ei ole valmis ohjelmistototeutus, vaan toteutus saadaan aikaan kehystä täydentämällä tai mukauttamalla 8.10.2012 5 Ohjelmistokehyksen erikoistaminen (framework specialization, framework adaptation) = ohjelmiston (osan) toteuttaminen täydentämällä kehyksen tarjoamaa ohjelmarunkoa Abstraktien luokkien erikoistaminen, Toiminnallisuuden koostaminen kehyksen konkreettisista luokista Sovelluskehys (application framework) = kehys, josta voidaan erikoistaa kokonainen sovellus Komponenttikehys (framelet) = minikehys, jonka erikoistamisen tuloksena syntyy yksittäinen komponentti 8.10.2012 6 Harri Laine 2

Laajennoskohta, variaatiopiste (hot spot, variation point) = kehyksen aukkokohta, jota täydentämällä voidaan sovelluksen puolella varioida ja/tai ottaa käyttöön tietty kehyksen toiminnallisuus/ominaisuus Erikoistamisrajapinta (specialization interface) = laajennoskohtien ja niihin liittyvien vaatimusten kokoelma Kehyksen erikoistamisrajapinta on tyypillisesti paljon monimutkaisempi kuin yksittäisen komponentin rajapinta Erikoistamisrajapinnan laajennoskohtien välillä on riippuvuuksia, joiden ymmärtäminen on edellytys kehyksen oikealle käytölle 8.10.2012 7 Erikoistamiseen voidaan käyttää esim. rajapintojen toteutusta periytymistä ja syrjäyttämistä (jos kieli tarjoaa) olioiden luontia ja kompositiota geneerisiä rakenteita myöhäistä sidontaa ja sitä tukevia rakenteita Sovelluskehyksissä päälogiikasta vastaa kehys ja sovelluskohtaiset erityistoimet toteutetaan täydennyksinä 8.10.2012 8 Sovelluskohtainen koodi täydennys täydennys täydennys kutsu kutsu kutsu periytyminen Sovelluskehys Kutsuissa käytössä ns. käänteinen kutsurakenne = kehys kutsuu dynaamista sidontaa hyväksikäyttäen sovelluskohtaisia täydentäviä moduuleja (Hollywood-periaate: don t call us we call you) 8.10.2012 9 Harri Laine 3

Kehyksissä sovelletaan tyypillisesti suunnittelumalleja (design patterns) erilaisten hyvinä pidettyjen asioiden aikaansaamiseksi Joidenkin mallien soveltaminen on välttämätöntä kehyksen erikoistamismahdollisuuksien kannalta Kehyksen koodi sisältää tyypillisesti useiden suunnittelumallien ilmentymiä Alkuperäiset suunnittelumallit on löydetty analysoimalla olemassa olevia kehyksiä (esimerkiksi Smalltalk, HotDraw) Suunnittelumallit sopivat usein kehysten dokumentointiin [Johnson, 1992] Suunnittelumalleissa on tyypillisesti kehykseen kuuluva osa (esim. abstraktit luokat) ja tuotekohtainen osa (esim. vaihtuvat konkreettiset luokat) 8.10.2012 10 = kehykseen kuuluva osa 8.10.2012 11 Kehykseen kuuluvia Kehys ei määrittele välttämättä pelkästään abstrakteja luokkia 8.10.2012 12 Harri Laine 4

Kehyksissä ohjelman kontrollia ohjaavat vuoroin kehys vuoroin sovellukohtaiset täydennykset kehys Flip-flop sovelluskohtaiset 8.10.2012 13 8.10.2012 14 B A Framework C Application Sovelluskehyksessä (A) Pääkontrolli ( main-silmukka ) kehyksen puolella. (B) Takaisinkutsut sovelluksen puolelle. (C) Kehyksen tarjoamien palveluiden kutsuminen. 8.10.2012 15 Harri Laine 5

Eri tyyppisiä kehyksiä: Abstrakti kehys Muunneltava kehys (white box framework) Pistokekehys (plugin framework) Koottava kehys (black box framework) 8.10.2012 16 Abstrakti kehys: vain abstrakteja luokkia (tai rajapintoja); ei toiminnallisuutta vuorovaikutus on toteutettava sovelluskohtaisesti 8.10.2012 17 Muunneltava kehys: Tarjoaa rajapinnat ja ohjelman päälogiikan Myös periminen ja syrjäyttäminen erikoistamistekniikkoina 8.10.2012 18 Harri Laine 6

Muunneltavan kehyksen yhteydessä kehyksen käyttäjän on oltava hyvin perillä kehyksen toiminnasta kyetäkseen käyttämään sitä Metodien väliset riippuvuudet voivat aiheuttaa ongelmia. Yhden syrjäyttäminen voi edellyttää jonkin toisenkin syrjäyttämistä, jolloin luokkien määrän kasvaa nopeasti. 8.10.2012 19 Pistokekehys: erikoistetaan (miltei yksinomaan) rajapintoja; erikoistus tarjotaan yhtenäisenä plugin-komponenttina, esim Eclipse plugins 8.10.2012 20 Koottava kehys: Koostetaan sovellus kehyksen tarjoamista valmiista komponenteista; ei takaisinkutsuja sovelluskoodiin 8.10.2012 21 Harri Laine 7

Koottavat kehykset perustuvat suoritusaikaisiin olioiden välisiin kytkentöihin ja näitä hyödyntäviin palvelupyyntöjen kohdituksiin kytketylle oliolle (object composition and delegation) olioiden väliset dynaamiset kytkennät korvaavat käännösaikaiset perintäkytkennät. uutta toiminnallisuutta saadaan yhdistelemällä tarjolla olevia olioita uusin tavoin ja säätämällä toimintaa parametrein 8.10.2012 22 Koottavat kehykset Käyttäjän ei tarvitse tuntea kehyksen sisäisiä yksityiskohtia, mutta on tiedettävä millaisia olioita voi luoda ja miten niitä voi kytketään toisiinsa. Luotavien olioiden luokat ovat valmiiksi määriteltyjä. Luotavaan olioon voi vaikuttaa parametreilla. Koottavat kehykset ovat yleensä helpompikäyttöisiä kuin läpinäkyvät kehykset. Toisaalta niitä on vaikeampi kehittää koska kehittämisessä pitää varautua monipuolisemmin eri käyttötilanteisiin. Koska joustavuudella on ennakkomäärittelyn asettamat rajat, eivät koottavat kehykset voi soveltamisalueeltaan olla kovin laaja-alaisia 8.10.2012 23 Roberts: http://st-www.cs.uiuc.edu/~droberts/evolve.html 8.10.2012 24 Harri Laine 8

Kolme esimerkkijärjestelmää kehyksen laatiminen edellyttää hyvää perehtyneisyyttä sovellusalueeseen kukaan ei pysty kehittämään kehystä tyhjästä perehtyneisyys on saavutettavissa vain tekemällä alueelle sovelluksia, joissa kehyksestä voisi ajatella olevan hyötyä - tätä kautta nähdään mikä toistuu sovelluksesta toiseen (siis kuuluu kehykseen) mikä on sovellusspesifiä (kuuluu erikoistukseen) kehys muotoutuu esimerkkien pohjalta 8.10.2012 25 Kolmen esimerkkisovelluksen tarkoitus kolmesta voi jo tehdä yleistyksiä sovellukset hieman toisistaan poikkeavia yksi tiimi voi tehdä ne peräkkäin kokemus heti hyödynnettävissä tai kolme tiimiä voi tehdä ne rinnakkain laajempi näkemys täydellisen sovelluksen asemesta prototyyppikin antaa käsitystä 8.10.2012 26 Yleistämällä on helpointa edetä läpinäkyvään kehykseen. Kun läpinäkyvää kehystä käyttäen kehitetään sovelluksia havaitaan, että joudutaan luomaan samoja aliluokkia useisiin sovelluksiin ->Perustetaan kirjasto kirjastoa perustettaessa ei välttämättä ole tietoa onko jokin komponentti yleiskäyttöinen vai sovelluskohtainen aluksi kirjastoon voidaan ottaa kaikki konkreettiset luokat myöhemmin karsitaan sovelluskohtaisiksi osoittautuneet usein käytetyistä luokista tulisi johtaa kehykseen liitettävä abstraktio 8.10.2012 27 Harri Laine 9

Hot spots (erikoistamiskohdat) Kehystä käytettäessä joudutaan kirjoittamaan samanlaista koodia toistuvasti eri sovelluksiin, osa koodista taas muutuu sovelluskohtaisesti (erikoistamiskohdat ovat kohtia, joissa esiintyy muuttuvaa koodia) - näiden limittyminen aiheuttaa ongelmia ylläpidossa Muuttuva koodi tulisi eristää jä mieluiten kapseloida luokiksi. Samana toistuva koodi tulisi sisällyttää kehykseen Luokkajakoa voidaan joutua hienontamaan 8.10.2012 28 Pluggable Objects (pistokkaat) eri sovellusten yhteydessä luodut aliluokat saattavat erota toisistaan vain vähän, esimerkisi vain yksi syrjäytetty metodi - useat luokat hankaloittavat ratkaisun ymmärtämistä Pienet eroavaisuudet voi hoitaa välittämällä muuttuva koodi (pistokas) oliolle parametrina luonnin yhteydessä - tekniikka riippuu ohjelmointikielestä (viite rajapinnan toteuttavaan olioon, viite funktioon, ) luokkarakenne hienojakoistuu 8.10.2012 29 Black-box framework black-box kehykset ovat käyttäjälle helpompia Suositeltavaa perintähierarkian käyttö komponenttikirjaston jäsentelyssä ja kompositiopohjaiset kytkennät kehyksessä Muuntetaan perintä kompositioksi (perinnän sijaan delegointi) Visual builder Lähtökohtana on black-box kehyksen olemassaolo. Työkalu avustaa kokoamista --> ollaan saatu aikaan sovelluskehitin Language Tools kehitinympäristö edellyttää yhteensopivia välineitä ratkaisun tarkasteluun ja virheiden jäljitykseen 8.10.2012 30 Harri Laine 10

Ohjelmistokehysten riskejä Tekninen vaativuus ja monimutkaisuus Arkkitehdin tunnettava hyvin sovellusalue ja joustavuuteen liittyvät oliotekniikat (esim. suunnittelumallit) Abstraktius voi tehdä kehyksestä erikoistajille hankalasti ymmärrettävän Kehysten yhdistely voi olla ongelma Mitä tehdään, jos halutaan käyttää useampaa kehystä, joista kukin määrittelee pääkontrollisilmukan? 8.10.2012 31 Ohjelmistokehysten riskejä Monoliittisuus Kehys saattaa kasvaa suureksi ja hallitsemattomaksi Laadullinen varianssi Variaatiopisteet liittyvät useimmiten toiminnallisuuden muokkaamiseen Laatuominaisuuksia variointi sen sijaan yleensä hankalaa (esim. tietoturvan lisääminen, suorituskyvyn optimointi, ) Dokumentointi Olennaista on erikoistamisrajapinnan kuvaus Tälle ei kuitenkaan vakiintunutta kuvaustapaa 8.10.2012 32 Ohjelmistokehysten riskejä Toteutuksen ongelmia Joustavien ratkaisujen toteuttaminen edellyttää asiantuntemusta (esim. suunnittelumallit auttavat) Joustavuus monimutkaisuus, abstraktit käsitteet Ylläpito vaativaa Testaus? (vrt. tuoterunkojen testaus) Käytön ongelmia Miten kehysten käyttö pitäisi dokumentoida? Keittokirjat (cookbooks) Suunnittelumallipohjainen dokumentointi Riittääkö pelkkä staattinen dokumentaatio? - EI RIITÄ Työkalutuki sovellusten rakentamiseen 8.10.2012 33 Harri Laine 11