Ohjelmistoarkkitehtuurit, syksy

Samankaltaiset tiedostot
Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

OA:n kanoninen malli III

OA:n kanoninen malli I

Oppimistavoitteet. Koodimalli Code Model. Näkymätyypit. Näkymätyypit Yksi arkkitehtuuri monta näkymää NÄKYMÄTYYPIT

Ohjelmistoarkkitehtuurit kevät

3. Komponentit ja rajapinnat

Ohjelmistoarkkitehtuurit kevät

Komponentit ja rajapinnat

Ohjelmistojen suunnittelu

Ohjelmistoarkkitehtuurit Komponentit Kevät 2014

Oppimistavoitteet. Sovellusaluemalli Domain Model. Esimerkkiohjelmisto Yinzer 1. Sovellusaluemallin käyttö. Sovellusaluemallin käyttö 24.9.

Ohjelmistojen mallintaminen, mallintaminen ja UML

Ohjelmistojen mallintaminen

Ohjelmistojen mallinnus Ohjelmistoarkkitehtuuri Harri Laine 1

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

Ohjelmistoarkkitehtuurit Komponentit Kevät 2016

UML-kielen formalisointi Object-Z:lla

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

1. Olio-ohjelmointi 1.1

Rajapinta (interface)

Ohjelmistojen mallintaminen kertausta Harri Laine 1

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

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

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

3. Komponentit ja rajapinnat

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

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

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

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

Suunnitteluvaihe prosessissa

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

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

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

Ohjelmistotekniikan menetelmät, UML

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

Ohjelmistoarkkitehtuurit

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

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

Olio-ohjelmointi Javalla

Koodimalli Code Model

13/20: Kierrätys kannattaa koodaamisessakin

Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

UML ja luokkien väliset suhteet

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. II Johdanto olio-ohjelmointiin

Sopimuspohjainen olio-ohjelmointi

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

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

Sisällönhallinnan menetelmiä

Viestinvälitysarkkitehtuurit

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

Ohjelmistojen mallintaminen Olioiden yhteistyö Harri Laine 1

812341A Olio-ohjelmointi, I Johdanto

Mikä yhteyssuhde on?

Ohjelmistotekniikan menetelmät, Ohjelmistotuotannon työkaluista

Ohjelmointi 2 / 2010 Välikoe / 26.3

Luokka- ja oliokaaviot

ohjelman arkkitehtuurista.

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

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

Rutiinin muodostaminen. 2. Rutiinin muodostaminen. specification) Määrittely (specification( Määrittelyn osapuolet. Hyvän ohjelman tunnusmerkit

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

15. Ohjelmoinnin tekniikkaa 15.1

Viestinvälitysarkkitehtuurit Lähtökohta:

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset

A TIETORAKENTEET JA ALGORITMIT

Paikkatiedon mallinnus Dokumentoinnin ymmärtäminen. Lassi Lehto

2. Olio-ohjelmoinnin perusteita 2.1

Ohjelmistotuotanto, suunnittelu Syksy Suunnittelu. Suunnittelun tulos. Suunnitteluprosessin työvaiheet. Suunnitteluprosessi.

3. Software components and interfaces

12. Kehysarkkitehtuurit

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

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Osio 4: Graafinen käyttöliittymä

Ohjelmistojen mallintaminen Luokkakaaviot Harri Laine 1

2. Olio-ohjelmoinista lyhyesti 2.1

Sisällys. Ratkaisumallien historia. Ratkaisumalli. Ratkaisumalli [2] Esimerkki: Composite [2] Esimerkki: Composite. Jaakko Vuolasto 25.1.

2 Ohjelmistoarkkitehtuurien kuvaus

15. Ohjelmoinnin tekniikkaa 15.1

6. Suunnittelu. Suunnittelun tulos

Suunnittelun tulos. 6. Suunnittelu. Suunnitteluprosessin työvaiheet. Suunnitteluprosessi. 6.1 Arkkitehtuurisuunnittelu.

Ohjelmistojen mallintaminen Unified Modeling Language (UML)

Järjestelmäarkkitehtuuri (TK081702)

Johdatus sovellussuunnitteluun, s99, osa2 Helsingin yliopisto;/tktl Harri Laine 1. Olioperustaisuus (object oriented)

Johdatus sovellussuunnitteluun, s99, osa2 Helsingin yliopisto;/tktl Harri Laine 1. Olioperustainen ohjelmistokehitys

Ohjelmistotuotanto vs. muut insinööritieteet. (Usein näennäinen) luotettavuus ja edullisuus

16. Javan omat luokat 16.1

Ohjelmoinnin peruskurssien laaja oppimäärä

Hieman lisää malleista ja niiden hyödyntämisestä

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Ohjelmistojen mallintaminen, sekvenssikaaviot

Integrointi. Ohjelmistotekniikka kevät 2003

Copyright by Haikala. Ohjelmistotuotannon osa-alueet

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

5/20: Algoritmirakenteita III

Palveluperustaiset arkkitehtuurityylit

Ohjelmistojen mallintaminen Ohjelmiston suunnittelu Model driven development Harri Laine 1

9. Muunneltavuuden hallinta

Tiedonsiirto- ja rajapintastandardit

Transkriptio:

Ohjelmistoarkkitehtuurit 2 Rajapinnat 24.9.2012 1 Arkkitehtonisen näkymän esittäminen Luonnollinen kieli + vapaamuotoinen grafiikka taustalla on oltava joku malli, jonka mukaisia asioita kuvaukseen otetaan mukaan, - noudatetaanko mallia malli elää - tulkintojen yhdenmukaisuus kyseenalaista, etenkin grafiikan osalta - tuleeko kaikki tarpeellinen mukaan, ohjaava tekijä puuttuu + Esitystapaa voi säätää tarpeen mukaan - havainnollisuus voi olla parempi kuin formaaleissa laatikkoverkoissa 24.9.2012 2 Arkkitehtonisen näkymän esittäminen Johonkin ohjelmiston mallinnustekniikkaan pohjautuva kuvaus esimerkiksi UML-kaaviotekniikat - Ovatko tekniikat oikealla abstraktiotasolla, ohjelmointiläheisyys ongelmana -+ Taustalla on standardoitu malli, mutta ovatko käsitteet tarpeeksi täsmällisiä ja hyvin määriteltyjä - Liiallinen oliokeskeisyys tuottaa ongelmia - Tulkinnat käsitteistä ja niiden käytöstä vaihtelevat + Staattisia ja dynaamisia näkymiä + Käyttö jatkuvasti lisääntymässä + Laajennusmekanismit + Hyvä työkalutuki 24.9.2012 3 Harri Laine 1

Arkkitehtonisen näkymän esittäminen Erityisellä arkkitehtuurikielellä laadittu kuvaus - kielet lähinnä tutkimuskäytössä - ei juuri käytössä teollisuudessa + käsitteet täsmällisesti määriteltyjä + analysointimahdollisuuksia 24.9.2012 4 UML- tekniikat Unified Modeling Language UML-kielen tekniikat painottuvat oliokeskeiseen yksityiskohtaiseen ohjelmistosuunnitteluun Uusimmissa versiossa 2.0 mukana myös ylemmän tason tekniikoita, esimerkiksi komponenttikaaviot Vaativat käsitteiden soveltamista Kuvaukset ensisijaisesti graafisia tulevat helposti isokokoisiksi Raportointimuodot riippuvat työkaluista Kuvaesitystä täydennettävä tekstikuvauksin 24.9.2012 5 UML-komponenttikaavio komponentti vaadittu rajapinta riippuvuus tarjottu rajapinta 24.9.2012 6 Harri Laine 2

UML-komponenttikaavio Komponentin sisärakenne portti Pyynnön ohjaus toteutukseen 24.9.2012 7 UML:n laajennettavuus UML:n perustana yleinen oliopohjainen metamalli, joka kiinnittää mallinnuksen peruskäsitteet Muokattavuus mahdollistaa käsitteiden sovittamisen Käsitteitä voidaan erikoistaa käyttäen stereotyyppejä, leimoja (tagged values) ja semanttisia sääntöjä Miltei mikä tahansa metamallin käsite (esimerkiksi luokka, olio, yhteys, ominaisuus, palvelu) voidaan erikoistaa stereotyypin avulla Stereotyyppi nimeää pääkäsitteen alikäsitteen ja liittää siihen täsmäsemantiikan Periaatteessa stereotyyppiin voisi liittää myös oman graafisen esityksen Sopiva työkalu mahdollistaa laajennusten tekemisen mallinnustilanteessa Leimoilla (nimi-arvo pari) voidaan kiinnittää joitain kohteiden ominaisuuksia Semanttisilla säännöillä voidaan asettaa rajoituksia esimerkiksi käsitteiden kytkennöille. 24.9.2012 8 UML:n laajennettavuus UML-profiilit ovat valmiiksi määriteltyjä laajennoksia SysML järjestelmänkuvauskieli (ohjelmat, laitteet, ihmiset, ympäristö) arkkitehtuuritasoista SoaML palvelukeskeisten järjestelmien kuvaaminen arkkitehtuuritasoista Useita hajautettujen arkkitehtuurien kuvausprofiileja - arkkitehtuuritasoista 24.9.2012 9 Harri Laine 3

Arkkitehtuurikieliä - kiinnitetty käsitteistö, yleiskäyttöisiä Darwin Rapide Wright Arkkitehtuurikieliä sovellusaluekohtaisia Koala (viihdeelektroniikka) Weaves (väylät ja suodattimet) AADL Arkkitehtuurikieliä laajennettava käsitteistö Acme ADML xadl 24.9.2012 10 Perustuvat yleisiin arkkitehtuurielementteihin Komponentit Konnektorit (connector) Portit Rajapinnat (interface) Pitkälti samoja asioita kuin UML:n komponenttimallissa Usein sekä tekstuaalinen että graafinen esitys Kuvauksen riittävyys analysointitarpeisiin Esim. vaadittu ja tarjottu rajapinta yhdenmukaisia Simuloitavuus Kapasiteettilaskelmat 24.9.2012 11 Darwin esimerkki component DataStore{ provide landervalues; component Calculation{ require landervalues; provide calculationservice; component UserInterface{ require calculationservice; require landervalues; component LunarLander{ inst U: UserInterface; C: Calculation; D: DataStore; bind C.landerValues -- D.landerValues; U.landerValues -- D.landerValues; U.calculationService -- C.calculationService; (Taylor..) 24.9.2012 12 Harri Laine 4

Ohjelmistorakennetta voidaan tarkastella komponentteina Komponentti muodostaa toiminnallisen kokonaisuuden, joka tarjoaa joukon loogisesti toisiinsa liittyviä palveluja Palvelut käyttävät samoja tietorakenteita Palveluja käytetään tyypillisesti samassa yhteydessä Toiminnallisuus peruste komponentin olemassaololle Komponentti on työnjaon perusyksikkö kaikissa kehitystyön vaiheissa 24.9.2012 13 Yleinen ohjelmistosuunnittelun periaate: erotetaan se mitä halutaan tehdä siitä miten toiminta toteutetaan Komponentin ei pitäisi riippua tietyistä toisista komponenteista, vaan joukosta (abstrakteja) palveluja, joita muut komponentit tarjoavat Abstrakti palvelu määritellään rajapintana (interface) 24.9.2012 14 Minimaalinen rajapintamäärittely: palveluiden kutsumuodot (signatures) kutsu voi olla muutakin kuin paikallinen tai etäproseduurikutsu Esim. viesti-/tapahtumapohjainen protokolla Muut rajapinnassa määriteltävät asiat: Palveluiden toiminnallinen määrittely mitä tekee Palveluiden ei-toiminnalliset ominaisuudet (esim. tilan ja ajan käyttö) Sivuvaikutukset (= vaikutukset rajapinnan tarjoavan komponentin ulkopuolelle) Mahdolliset palvelupyynnöistä aiheutuvat poikkeukset Riippuvuudet globaaleista resursseista (globaalit muuttujat, tiedostot, tietovarastot) Palveluiden väliset riippuvuudet (esimerkiksi oikea kutsujärjestys) 24.9.2012 15 Harri Laine 5

Rajapinnat määräävät tavat, joilla komponentit kommunikoivat keskenään Myös suurin osa arkkitehtuurityyleistä ja suunnittelumalleista perustuu rajapintojen käyttämiseen Huolellinen rajapintasuunnittelu edellytys työn järkevälle jakamiselle ohjelmiston keskeisten laatuominaisuuksien, kuten testattavuuden, ylläpidettävyyden ja muunneltavuuden varmistamiselle Rajapintasuunnittelu alkaa tyypillisesti heti keskeisten arkkitehtuuriratkaisujen tekemisen (esim. arkkitehtuurityylien valitsemisen) jälkeen 24.9.2012 16 Ohjelmointikielissä rajapinnan käsite on kehittynyt vähitellen Aliohjelmien kutsumuotojen määrittely (esim. Fortran) Moduulit (Modula-2, Ada, Pascal): tietorakenteiden ja niitä käsittelevien operaatioiden kokoaminen; ulospäin näkyvien osien määrittely abstrakti tietotyyppi Olioparadigma Rajapinnan kuvaaminen abstraktina luokkana Rajapinnan (~ abstraktin luokan) laajentaminen uusilla operaatioilla (periytyminen) Rajapinnan toteuttava komponentti konkreettisena luokkana Rajapintojen ja ne toteuttavien komponenttien välinen N:M-suhde moniperiytymisen avulla (huom. luokkien vs. rajapintojen moniperintä) Joissain kielissä rajapinta omana syntaktisena rakenteena: esim. Javan tai C#:n interface (vrt. C++:n kokonaan abstrakti luokka) 24.9.2012 17 Komponentti voi joko tarjota (eli toteuttaa) tai vaatia rajapinnan tarjotut ja vaaditut rajapinnat (provided and required interfaces) Tietty nimetty rajapinta on yleensä toisen komponentin vaatima ja toisen tarjoama Ohjelmointikielet, kuten Java tai C++, eivät tarjoa välineitä vaadittujen rajapintojen eksplisiittiseen kuvaamiseen (pitää kuvata ei-formaalilla dokumentaatiolla) 24.9.2012 18 Harri Laine 6

Rajapinnat UML 2.0:ssa Collection Sorter List Vaadittu rajapinta (required interface) Tarjottu rajapinta (provided interface) 24.9.2012 19 Rajapinnat UML 2.0:ssa Konnektori (connector) Portti (port) 24.9.2012 20 Rajapinnat UML 2.0:ssa Portti Liitoskohta, jonka kautta komponentti on yhteydessä ulospäin Mekanismi, jolla voidaan koota yhteen rajapintoja liittämällä ne samaan porttiin, esim. roolirajapinnaksi Portteja ei välttämättä tarvitse käyttää mallinnuksessa jokaisella rajapinnalla implisiittisesti oma porttinsa 24.9.2012 21 Harri Laine 7

Rajapinnat Nykyaikaisissa ohjelmointikielissä rajapinnat määritellään operaatioiden kutsumuotoina Lisäksi kuvattava palveluiden semantiikka Rajatuilla sovellusalueilla palvelut voidaan määritellä formaalisti Palveluiden ja ohjelmien oikeaksi todistaminen Ei sovellu yleisiin, laajoihin järjestelmiin epäformaalit semantiikan kuvaukset 24.9.2012 22 Palvelun sisältö Palvelun sisältö kuvataan usein tulo- ja jättöehtoina (pre/postconditions) Tuloehto kuvaa ehtoa, jonka on oltava voimassa ennen palvelun suoritusta Jättöehdon on oltava voimassa palvelun suorittamisen jälkeen Tulo- ja jättöehdot voidaan nähdä sopimuksena palvelun tarvitsijan ja palvelun tarjoajan välillä sopimuspohjainen suunnittelu (design-by-contract) Tulo- ja jättöehdot voidaan aina kuvata epäformaalisti Jotkut ohjelmointikielet tarjoavat omat erikoistuneet mekanismit tulo- ja jättöehtojen esittämiseksi (esim. Eiffel) 24.9.2012 23 Palvelun sisältö Tulo- ja jättöehtojen lisäksi palvelua säätelevät invariantit = ehdot, joiden on oltava voimassa tietyissä tilanteissa ohjelman suorituksen aikana Luokkainvariantti: oltava voimassa aina muulloin paitsi luokan operaatioiden suorituksen aikana 24.9.2012 24 Harri Laine 8

Rajapinta ja sen toteutus interface Observable { void addlistener(listener l); boolean islistenerregistered(listener l); class ObservableImpl implements Observable { private Vector _listeners = new Vector(); public void addlistener(listener l) { if (!islistenerregistered(l)) _listeners.addelement(l); else System.err.println( "Listener already registered"); public boolean islistenerregistered(listener l) { return _listeners.contains(l); 24.9.2012 25 Rajapinta ja sen toteutus Observable o = new ObservableImpl(); Listener l = new ListenerImpl(); if (!o.islistenerregistered(l)) { o.addlistener(l); else { // Error handling... Onko rajapinnan määrittelyssä jotain puutteita, jotka aiheuttavat ongelmia? Puutteelliset vastuumäärittelyt, turhia tarkistuksia, käyttäjä ei voi käsitellä virhetilannetta 24.9.2012 26 Rajapinta ja sen toteutus Rajapintamäärittelyn tarkentaminen tulo- ja jättöehdoilla (kuvitteellisessa Javan laajennoksessa): interface Observable { //... void addlistener(listener l) { pre getlistener(l) == null; post getlistener(l)!= null; //... Ehdon rikkoutuminen voi aiheuttaa esimerkiksi poikkeuksen (vrt. Javan assertiot) tämä riippuu kielen toteutuksesta Takaavatko tulo- ja jättöehdot, että palvelu toimii oikein? 24.9.2012 27 Harri Laine 9

Poikkeukset rajapinnassa Standardi-Java tarjoaa mahdollisuuden määritellä rajapintaan poikkeuksia interface Observable { // void addlistener(listener l) throws ListenerRegisteredException; // class ObservableImpl implements Observable { // public void addlistener(listener l) throws ListenerRegisteredException { if (islistenerregistered(l)) { throw new ListenerRegisteredException(l); _listeners.addelement(l); // 24.9.2012 28 Rajapinnat Rajapinnan avulla palvelun käyttäjä voidaan tehdä riippumattomaksi palvelun konkreettisesta toteutuksesta Asiakas Palvelija Palvelut Asiakas Palvelija 24.9.2012 29 Rajapinnat Arkkitehtuurisuunnittelussa järjestelmän komponenttien vastuut tarkennetaan rajapintojen muodossa Jos komponentti A tarvitsee komponentin B palveluita, tulee B:n rajapinnasta A:n vaadittu rajapinta Usein komponentin tarjoama palvelujoukko kannattaa kuitenkin jakaa osiin siten, että komponentti toteuttaa monta erilaista rajapintaa. 24.9.2012 30 Harri Laine 10

Rajapinnat Komponentti tarjoaa palvelujaan toiselle komponentille aina jossain roolissa, joka ei välttämättä kata kaikkia komponentin palveluita Asiakas käyttää komponenttia jossain roolissa, ei välttämättä kaikissa Erillinen rajapinta jokaiselle selkeästi identifioidulle roolille roolirajapinnat Komponentti voi toteuttaa useita roolirajapintoja Useat komponentit voivat toteuttaa saman roolirajapinnan 24.9.2012 31 Roolirajapinnat Actor Button Drawing Observable Actor Button Drawable Drawing 24.9.2012 32 Roolirajapinnat Roolirajapinnat muodostavat hienojakoisen rajapintajoukon Muutos tarjotun rajapinnan määrittelyssä vaikuttaa niihin komponentteihin, jotka käyttävät rajapintaa ei kaikkiin jotka käyttävät komponenttia Muutos vaaditussa rajapinnassa vaikuttaa vain niihin, jotka toteuttavat rajapinnan 24.9.2012 33 Harri Laine 11