Ohjelmistokehykset (software frameworks)

Samankaltaiset tiedostot
Ohjelmistoarkkitehtuurit, syksy

Ohjelmistokehykset (software frameworks)

Ohjelmistokehykset ohjelmistorunkoja uudelleenkäyttö olioperustaisista ohjelmistorunko

Luento 8. Ohjelmistokehykset Tuoteperheet CSM14101 Ohjelmistoarkkitehtuurit

12. Kehysarkkitehtuurit

11. Kehysarkkitehtuurit

8. Kehysarkkitehtuurit

Kehyksillä toteuttettujen tuotelinjojen rakenteellinen optimointi

Oliosuunnittelu. Oliosuunnittelu

Uudelleenkäytön jako kahteen

Ohjelmistoarkkitehtuurit

Ohjelmistoarkkitehtuurit. Kevät

Kehyspohjainen ohjelmistokehitys

Avoimet ohjelmistokehykset

Tuoterunko hajautetussa ympäristössä

Ohjelmistoarkkitehtuurit kehysarkkitehtuurit. Kevät 2014

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

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

Ohjelmistojen suunnittelu

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

Harjoitustehtävät ja ratkaisut viikolle 48

Ohjelmistoarkkitehtuurit, syksy

Ohjelmistojen mallinnus Ohjelmistoarkkitehtuuri Harri Laine 1

Ylläpito. Ylläpidon lajeja

Ohjelmistojen mallintaminen kertausta Harri Laine 1

Osittavat arkkitehtuurityylit. Palveluihin perustuvat arkkitehtuurityylit. Erikoisarkkitehtuurityylit

Olio-ohjelmointi Johdanto suunnittelumalleihin. 1. Yleistä

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

11. Kehysarkkitehtuurit

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

9. Muunneltavuuden hallinta

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

Muusta kuin vesisioista

Järjestelmäarkkitehtuuri (TK081702)

11/20: Konepelti auki

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

10. Tuoterunkoarkkitehtuurit

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset

7. Tuoterunkoarkkitehtuurit

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

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

Suunnitteluvaihe prosessissa

Ohjelmistotekniikan menetelmät, suunnittelumalleja

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

Muutamia peruskäsitteitä

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

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Ohjelmistojen mallintaminen, mallintaminen ja UML

Hirviö. Design Patterns

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

SEPA - Design Patterns

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

OHJELMISTOKEHYSTEN ERIKOISTAMISTUTORIAALIT FRED- YMPÄRISTÖSSÄ

Ohjelmistotuotanto. Luento

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

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

Plugin-pohjaiset sovellukset arkkitehtuurit

Ohjelmistoarkkitehtuurit kehysarkkitehtuurit. Kevät 2016

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

Ohjelmistotekniikan menetelmät, kesä 2008

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Hirviö. Design Patterns

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

9 Edistynyt PHP-ohjelmointi

Palveluperustaiset arkkitehtuurityylit

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Ohjelmistojen mallintaminen Luokkakaaviot Harri Laine 1

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

Ohjelmistojen mallintaminen, kesä 2010

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

Viestinvälitysarkkitehtuurit

Ohjelmistoarkkitehtuurit. Syksy 2010

6. Arkkitehtuurityylit

2. Ohjelmistotuotantoprosessi

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

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

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

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

Ohjelmistotekniikan menetelmät Luokkamallit ohjelmiston mallintamisessa Harri Laine 1

AU Automaatiotekniikka. Toimilohko FB


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)

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

Ohjelmistojen mallintaminen. Luento 11, 7.12.

Ohjelmistotekniikan menetelmät, kevät 2008

13/20: Kierrätys kannattaa koodaamisessakin

Ohjelmistotekniikan menetelmät, Ohjelmistotuotannon työkaluista

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

TIE Ohjelmistojen suunnittelu

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus:

Mikä on avoimen tuotteen hallintamalli perustiedot ja taustoitus. Jukka Kääriäinen, Tapio Matinmikko, Raija Kuusela

Ohjelmistoarkkitehtuurit. Kevät

Viestinvälitysarkkitehtuurit Lähtökohta:

Mitä on periytyminen?

UML:n yleiskatsaus. UML:n osat:

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

Suunnittelumallien käyttö ohjelmistosuunnittelussa

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

Transkriptio:

Ohjelmistoarkkitehtuurit 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 2 Harri Laine 1

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 3 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 4 Harri Laine 2

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 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 6 Harri Laine 3

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 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 Harri Laine 4

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) 9 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) 10 Harri Laine 5

= kehykseen kuuluva osa 11 Kehykseen kuuluvia Kehys ei määrittele välttämättä pelkästään abstrakteja luokkia 12 Harri Laine 6

Kehyksissä ohjelman kontrollia ohjaavat vuoroin kehys vuoroin sovellukohtaiset täydennykset kehys Flip-flop sovelluskohtaiset 13 14 Harri Laine 7

B A Framework C Application Sovelluskehyksessä (A) Pääkontrolli ( main-silmukka ) kehyksen puolella. (B) Takaisinkutsut sovelluksen puolelle. (C) Kehyksen tarjoamien palveluiden kutsuminen. 15 Eri tyyppisiä kehyksiä: Abstrakti kehys Muunneltava kehys (white box framework) Pistokekehys (plugin framework) Koottava kehys (black box framework) 16 Harri Laine 8

Abstrakti kehys: vain abstrakteja luokkia (tai rajapintoja); ei toiminnallisuutta vuorovaikutus on toteutettava sovelluskohtaisesti 17 Muunneltava kehys: Tarjoaa rajapinnat ja ohjelman päälogiikan Myös periminen ja syrjäyttäminen erikoistamistekniikkoina 8.10.2013 18 581358 Ohjelmistoarkkitehtuurit Harri Laine 9

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. 19 Pistokekehys: erikoistetaan (miltei yksinomaan) rajapintoja; erikoistus tarjotaan yhtenäisenä plugin-komponenttina, esim Eclipse plugins 20 Harri Laine 10

Koottava kehys: Koostetaan sovellus kehyksen tarjoamista valmiista komponenteista; ei takaisinkutsuja sovelluskoodiin 21 Koottavat kehykset Uutta toiminnallisuutta saadaan yhdistelemällä tarjolla olevia olioita uusin tavoin ja säätämällä toimintaa parametrein Perintä korvataan toimintojen delegoinnilla ja parametroinnilla 22 Harri Laine 11

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 (black-box) 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 23 Ohjelmistokehyksen evoluutio Kehyksen elinkaaren aikana tyypillisesti esiintyviä patterneja Roberts: http://st-www.cs.illinois.edu/users/droberts/evolve.html 24 Harri Laine 12

Ohjelmistokehyksen evoluutio 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 25 Ohjelmistokehyksen evoluutio 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ä 26 Harri Laine 13

Ohjelmistokehyksen evoluutio 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 27 Ohjelmistokehyksen evoluutio 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 28 Harri Laine 14

Ohjelmistokehyksen evoluutio 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 29 Ohjelmistokehyksen evoluutio 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 30 Harri Laine 15

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? 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 32 Harri Laine 16

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ö tavanomainen dokumentaatio erikoistamisrajapinnan kuvaukseen? Työkalutuki sovellusten rakentamiseen 33 Harri Laine 17