OA:n kanoninen malli III

Samankaltaiset tiedostot
Koodimalli Code Model

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

Ohjelmistoarkkitehtuurit, syksy

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

Ohjelmistojen suunnittelu

OA:n kanoninen malli II

Oppimistavoitteet. Suunnittelumalli Design Model. Suunnittelumalli. Suunnittelumalli. Suunnittelumalli SUUNNITTELUMALLI.

Ohjelmistojen mallintaminen, mallintaminen ja UML

OA:n kanoninen malli I

Arkkitehtuurin mallintaminen

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

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

2 Ohjelmistoarkkitehtuurien kuvaus

Arkkitehtuurin mallintaminen

3. Komponentit ja rajapinnat

Suunnitteluvaihe prosessissa

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

Oppimistavoitteet. Arkkitehtuurin mallintaminen. Malleista ja niiden käytöstä. Malleista ja niiden käytöstä. Kommutatiivinen kaavio 22.9.

UML:n yleiskatsaus. UML:n osat:

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Ohjelmistoarkkitehtuurit

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

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

8/20: Luokat, oliot ja APIt

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

Ohjelmistojen mallintaminen kertausta Harri Laine 1

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

ohjelman arkkitehtuurista.

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Arkkitehtuurien tutkimus Outi Räihä. OHJ-3200 Ohjelmistoarkkitehtuurit. Darwin-projekti. Johdanto

Harjoitustehtävät ja ratkaisut viikolle 48

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

.NET ajoympäristö. Juha Järvensivu 2007

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset

11/20: Konepelti auki

Oliotietokannat. Nääsvillen Oliopäivät Pekka Kähkipuro Kehitysjohtaja, FT

Sovellusalue- ja suunnittelumallit Domain Model, Design Model

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

Suorituskyky ja ohjelmistokehitys Suorituskykymallit

Ohjelmistotekniikka - Luento 2

Web-palvelu voidaan ajatella jaettavaksi kahteen erilliseen kokonaisuuteen: itse palvelun toiminnallisuuden toteuttava osa ja osa, joka mahdollistaa k

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

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Ohjelmistoarkkitehtuurin suunnittelu

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

Ohjelmistotekniikka - Luento 2 Jouni Lappalainen

Ohjelmistoarkkitehtuurit Komponentit Kevät 2014

Ohjelmistoarkkitehtuurit kevät

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

Ohjelmistoarkkitehtuurit, syksy

TOIMINNALLINEN MÄÄRITTELY MS

Malliperustainen ohjelmistokehitys - MDE Pasi Lehtimäki

Viestinvälitysarkkitehtuurit

Ohjelmistojen mallintaminen. Luento 11, 7.12.

15. Ohjelmoinnin tekniikkaa 15.1

Testaustyökalut. Luento 11 Antti-Pekka Tuovinen. Faculty of Science Department of Computer Science

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

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

2. Olio-ohjelmoinnin perusteita 2.1

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

Ohjelmistotekniikan menetelmät, suunnittelumalleja

1 Johdanto. TTY Ohjelmistotekniikka. Ohjelmistoarkkitehtuurit Syksy 2008

ITKP102 Ohjelmointi 1 (6 op)

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

13/20: Kierrätys kannattaa koodaamisessakin

9. Periytyminen Javassa 9.1

Viestinvälitysarkkitehtuurit Lähtökohta:

SUD SUD. Haasteet. Haasteet Esimerkki riskilähtöisestä arkkitehtuurityöstä ja mallinnuksesta. Esimerkkitapauksen rajaukset ja oletukset

Unified Modeling Language

Tiedonsiirto- ja rajapintastandardit

Ohjelmistoarkkitehtuuri

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

Ohjelmistoarkkitehtuurit, syksy

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

Javan perusteita. Janne Käki

UML-kielen formalisointi Object-Z:lla

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

Tietojärjestelmän osat

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Ohjelmointi 1 / syksy /20: IDE

Ohjelmistojen mallintaminen Ohjelmiston suunnittelu Model driven development Harri Laine 1

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

Muutamia peruskäsitteitä

1. Olio-ohjelmointi 1.1

Ohjelmistotekniikan menetelmät, UML

Suunnittelumallien käyttö ohjelmistosuunnittelussa

7/20: Paketti kasassa ensimmäistä kertaa

Älysopimusten kehittäminen. Sopimus suuntautunut ohjelmointi

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

Yhteentoimivuusalusta: Miten saadaan ihmiset ja koneet ymmärtämään toisiaan paremmin?

Ohjelmistojen mallintaminen

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

2. Olio-ohjelmoinnin perusteita 2.1

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

Dynaaminen analyysi I

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

Uudelleenkäytön jako kahteen

Transkriptio:

OA:n kanoninen malli III Luento 9 1.10.2013 581385 Ohjelmistoarkkitehtuurit 1 Näkymätyypit Koodimalli Oppimistavoitteet Arkkitehtuurisuunnittelun ja implementaation välinen kuilu Arkkitehtuurin tekeminen näkyväksi koodissa Arkkitehtuurikielet (ADL) 1.10.2013 581385 Ohjelmistoarkkitehtuurit 2 1

NÄKYMÄTYYPIT 1.10.2013 581385 Ohjelmistoarkkitehtuurit 3 Yksi arkkitehtuuri monta näkymää Järjestelmän konkreettinen arkkitehtoninen malli: kokoelma (arkkitehtuuri-)näkymiä Järjestelmä 1.10.2013 581385 Ohjelmistoarkkitehtuurit 4 2

Näkymätyypit Näkymätyyppi on helposti yhdessä ymmärrettävien mutta erilaisten näkymien joukko Esim. toiminnallinen skenaario ja komponenttikokoonpano Kolme standardinäkymätyyppiä Moduulinäkymätyyppi (module viewtype) Käännösaikana näkyvät elementit Ajonaikainen näkymätyyppi (runtime viewtype) Suorituksen aikana näkyvät elementit ja niiden suhteet Sijoittelunäkymätyyppi (allocation viewtype) Ohjelmiston ja sen osien suoritusympäristö ja -laitteisto 1.10.2013 581385 Ohjelmistoarkkitehtuurit 5 Näkymätyypit Usean näkymätyypin poikki menevät näkymät (spanning viewtype) Laatuominaisuudet ja niiden tasapainottelu (trade offs) Ylläpidettävyys vs. suorituskyky 1.10.2013 581385 Ohjelmistoarkkitehtuurit 6 3

Näkymätyypit Näkymätyyppi Moduulinäkymät Ajonaikaiset näkymät Sijoittelunäkymät Poikkimenevät näkymät Esimerkkejä tyypin näkymien sisällöstä Moduulit, kerrokset, riippuvuudet, vastuut (CRC), tietokantaskeema, rajapinnat, luokat, komponenttityypit, konnektorityypit Olio-instanssit,komponentti-instanssit, konnektori-instanssit, käyttäytymismallit (tilamallit, skenaariot), Ohjelmiston sijoittelu, maantieteellinen sijainti, verkkotopologia, laitteet (nodes) Laatuattribuuttiskenaariot, trade offs (laatuominaisuudet, liiketoiminnan tavoitteisiin liittyvät näkökohdat) 1.10.2013 581385 Ohjelmistoarkkitehtuurit 7 Yinzer -suunnittelumallin näkymät Tyyppi Moduuli Ajonaikainen Sijoittelu Ylimenevät Näkymät Moduulikaavio Komponentti-,konnektori- ja porttitypit Käyttötapauskaavio Komponenttien vastuut Systeemikontekstikaavio Toiminnalliset skenaariot Komponentti-, konnektori- ja portti-instanssit Komponenttikokoonpanot Sijoittelukaavio Suoritusympäristön elementtien kuvaus Laatuattribuuttiskenaariot Ominaisuuksien ja vaatimusten tasapainottelut (trade off) 1.10.2013 581385 Ohjelmistoarkkitehtuurit 8 4

Näkökohtia Ohjelman suoritusaikasta käyttäytymistä on vaikea päätellä koodia lukemalla Koodi kannattaa kirjoittaa niin, että arkkitehtuuriratkaisut ja tyyli näkyvät koodissa Helpottaa analysoijaa ylittämään ohjelman staattisen koodin ja sen suoritusaikaisen dynaamisen olomuodon välinen kuilu Älä yritä päätellä asioita näkymistä, joiden tyyppi ei siihen sovi Ohjelmiston jonkin tietyn suunnitteluratkaisun ymmärtämiseksi on yleensä tarpeen tutkia (joitain) näkymiä kaikista näkymätyypeistä 1.10.2013 581385 Ohjelmistoarkkitehtuurit 9 KOODIMALLI 1.10.2013 581385 Ohjelmistoarkkitehtuurit 10 5

Koodimalli Koodimalli = implementoidun ohjelmiston koodi Tarkentaa (refinement) suunnittelumallin Fairbanks keskittyy koodin ja suunnittelun suhteen tarkasteluun kolmesta näkökulmasta Mallien ja koodin väliset erot Mallien ja koodin erojen hallinta Arkkitehtuuria korostava ohjelmointityyli 1.10.2013 581385 Ohjelmistoarkkitehtuurit 11 Mallien ja koodin erot Ohjelmiston koodi on kehitysprojektin varsinainen lopputuote Suunnitteluratkaisut on aina lopulta ilmaistava ohjelmointikiel(t)en keinoin Mallit ovat hyödyllisiä vain, jos niiden välittämä kuva on riittävän yhdenmukainen koodin ilmaiseman todellisuuden kanssa Huom: MDE Model Driven Engineering menetelmissä malleista generoidaan implementaatio tai sen osa automaattisesti Eivät vielä laajasti käytössä 1.10.2013 581385 Ohjelmistoarkkitehtuurit 12 6

Mallien ja koodin erot - kieli Monilla suunnittelumallin käsitteillä ei ole suoraa vastinetta koodissa Laatuominaisuus, arkkitehtuurityyli, rajoite, komponentti, vastuu, Jotkin käsitteet ovat lähellä toisiaan Moduuli ja pakkaus Koodi puhuu luokista, metodeista, funktioista, parametreista, muuttujista, kentistä, lauseista, lausekkeiseta jne. 1.10.2013 581385 Ohjelmistoarkkitehtuurit 13 Mallien ja koodin erot - abstraktisuus Yksi arkkitehtuurielementti suunnittelumallissa vastaa usean koodielementin yhteenliittymää Palvelinkomponentti suunnittelumallissa vs. sen toteutuksen muodostavat Java-luokat (projektin itse koodaamat + kehysten/alustan mukana tulevat) Tietyn elementin arkkitehtuurikuvauksessa on vähemmän yksityiskohtia kuin saman elementin toteutuksessa Koodin oltava yksityiskohdiltaan täydellinen, jotta sitä voi suorittaa tietokoneessa 1.10.2013 581385 Ohjelmistoarkkitehtuurit 14 7

Mallien ja koodin erot - suunittelupäätökset Arkkitehtuurimallissa voidaan päättää käyttää tiettyjä teknologioita, mutta yleensä jätetään koodauksen asiaksi yksityiskohtaiset päätökset siitä, miten teknologiaa käyttäen implementoidaan komponentit ja konnektorit Malli voi määrätä rajoitteita ja esimerkiksi konkreettisia suorituskykytavoitteita, mutta lähdekoodi määrittelee tietorakenteet ja algoritmit, joilla tavoite saavutetaan 1.10.2013 581385 Ohjelmistoarkkitehtuurit 15 Mallien ja koodin erot ekstensionaalisuus ja intensionaalisuus Ekstensionaalinen tiettyjä erikseen lueteltuja elementtejä koskeva asia tai väite Intensionaalinen kaikkia tietynlaisia elementtejä koskeva asia tai väite 1.10.2013 581385 Ohjelmistoarkkitehtuurit 16 8

Ekstensionaalisuus ja intensionaalisuus Intensionaalinen / Ekstensionaalinen Ekstensionaalinen Intensionaalinen Arkkitehtuurimallin elementti Moduulit, komponentit, konnektorit, portit, komponenttikokoonpanot Arkkitehtuurityylit,invariantit ja rajoitteet, vastuut, suunnittelupäätökset, perustelut, protokollat, laatuominaisuudet Vastaavuus lähdekoodissa Vastine koodissa on yleensä helppo osoittaa, joskin arkkitehtuurikuvaus on yleensä abstraktimpi Koodin pitää noudattaa näitä, mutta yleensä ei ole suoraa tapaa ilmaista niitä koodissa. 1.10.2013 581385 Ohjelmistoarkkitehtuurit 17 Mallien ja koodin erot 1.10.2013 581385 Ohjelmistoarkkitehtuurit 18 9

Mallien ja koodin erot Kuilu on nykyteknologioilla väistämätön Arkkitehtuurimallit auttavat hallitsemaan järjestelmän monimutkaisuutta ja laajuutta, koska ne ovat abstrakteja ja intensionaalisia Koodi voidaan suorittaa tietokoneessa, koska se on konkreettista ja ekstensionaalista Erojen kanssa on opeteltava tulemaan toimeen Mallit ja koodi on ajoittain synkronoitava ohjelmiston elinkaaren aikana 1.10.2013 581385 Ohjelmistoarkkitehtuurit 19 Erojen hallinta Mallien ja koodin erot pyrkivät yleensä kasvamaan ohjelmistojen evoluution myötä Uudet piirteet ja bugikorjaukset lisätään kyllä implementaatioon, mutta malleja ei aina välitetä päivittää Yleensä halutaan välttää mallien ja toteutuksen välisiä harhaanjohtavia tai suorastaan haitallisia ristiriitaisuuksia 1.10.2013 581385 Ohjelmistoarkkitehtuurit 20 10

Erojen hallintastrategiat Strategia Älä välitä poikkeamista Ad hoc - mallinnus Vain korkean tason malleja Syknronointi elinkaaren virstanpylväissä Kun hätä on kädessä Jatkuva synkronointi Selitys Käytetään vanhentunutta mallia mutta muistetaan, mitkä asiat ovat muuttuneet Pidetään malli mielessä ja tehdään siitä uusi instanssi (jokin näkymä) vasta tarpeen vaatiessa Arkkitehtuurinkaikkein perustavimmat ratkaisut muuttuvat yleensä hitaasti, joten niitten mallit pysyvät parhaiten ajan tasalla Mallien ja koodin erot sovitetaan elinkaaren virstanpylväissä/merkkikohdissa (milestone), esimerkiksi iteraation lopussa tai ohjelmistoversion toimituksen yhteydessä Sovitetaan erot, kun jotain menee pahasti pieleen, tai kun valmistaudutaan katselmointiin (pakon edessä). Yllättävän yleinen strategia. Kallista ja hyvin harvinaista. 1.10.2013 581385 Ohjelmistoarkkitehtuurit 21 Strategian valintaan vaikuttavia tekijöitä Työkalutuki Esimerkiksi takaisinmallinnustyökalujen ja korkean tason ohjelmointikielten (koodin generointi) käyttö voi kaventaa kuilua ja vähentää synkronointikustannuksia Yksityiskohtaisuus Paljon yksityiskohtia sisältävä malli happanee nopeammin ja vaati enemmän synkronointityötä Poikkeavuuksien sietokyky Missä tilanteissa mallien on tärkeää heijastaa toteutusta oikein, ja kuka niitä käyttää? 1.10.2013 581385 Ohjelmistoarkkitehtuurit 22 11

Arkkitehtuuria korostava ohjelmointityyli Olio-ohjelmoinnin eräs perusperiaate on, että ohjelmiston luokkien (tyyppien) ja suoritusaikaisten oliorakenteiden tulisi heijastaa sovellusalueen käsitteitä Sovellusaluetta ymmärtävän (ulkopuolisen) kehittäjän on helpompi ymmärtää, miten ohjelmisto toimii ja mitä eri oliot tekevät tai tietävät Jos sovellusalueen käsitteet ovat vakaita ja niiden muutokset ovat paikallisia, myös ohjelmiston toteutus on niiden osalta vakaa ja muutokset ovat paikallisia 1.10.2013 581385 Ohjelmistoarkkitehtuurit 23 Arkkitehtuuria korostava ohjelmointityyli Sovellusalueen lisäksi koodi voi heijastaa myös arkkitehtuurisuunnittelua Ohjelmoijat voivat upottaa koodiin vinkkejä, jotka auttavat ylittämään mallin ja implementaation välisen kuilun Model-in-code periaate Etuja Arkkitehtuurin rapautumisen ehkäiseminen Helpottaa suunnitteluratkaisujen tunnistamista Vähentää dokumentointitaakkaa Madaltaa uusien kehittäjien oppimiskynnystä 1.10.2013 581385 Ohjelmistoarkkitehtuurit 24 12

Suunnittelun ilmaiseminen koodissa Pehmeät mekanismit Esimerkiksi metodien nimeäminen niin, että nimi kuvaa metodin tarkoitusta (miksi) eikä vain toimintaa (miten) Kovat mekanismit Luokkien ja metodien invariantit sekä esi- ja jättöehdot, jotka voidaan automaattisesti tarkistaa souritusaikana Ohjelmointikielten laajentaminen tukemaan rajoitteiden ja muiden ehtojen noudattamisen automaattista valvontaa 1.10.2013 581385 Ohjelmistoarkkitehtuurit 25 Teknisen velan hallinta Tekninen velka tarkoittaa (mm.) korkoa korolle kasvavaa toteutuksen erkaantumista parhaan ymmärryksen mukaisesta ratkaisusta Tekninen velka on helpompaa havaita ja korjata, jos koodi heijastaa arkkitehtuurisuunnittelua Koodia voi helpommin verrata malliin 1.10.2013 581385 Ohjelmistoarkkitehtuurit 26 13

Mitä asioita koodin pitäisi kertoa? Mitkä arkkitehtuurimallien kertomat asiat ovat vaikeita päätellä koodista? Moduulinäkymissä Moduulien (pakkausten) väliset riippuvuudet Mistä luokista/tietorakenteisat+funktioista komponentti- tai konnektorityypit muodostuvat Luokkien tarjoamat rajapinnat on usein helppo tunnistaa mutta niiden vaatimia rajapintoja/palveluja on vaikeampi päätellä koodista Protokolliin osallistuvat elementit 1.10.2013 581385 Ohjelmistoarkkitehtuurit 27 Mitä asioita koodin pitäisi kertoa? Ajonaikaisissa näkymissä Suorituksen kulkua ja suoritusaikaisia tietorakenteita on usein vaikea kuvitella koodia lukiessa Implementaatio näyttää oliomassalta, josta on vaikea hahmottaa komponentteja ja konnektorien toimintaa on vaikea erottaa muusta olioiden välisestä kommunikaatiosta Komponenttien ja konnektorien ajonaikaista käyttäytymistä ja konfiguraatioita koskevat intensionaaliset rajoitteet (tyylit) Protokollien tilakäyttäytyminen 1.10.2013 581385 Ohjelmistoarkkitehtuurit 28 14

Mitä asioita koodin pitäisi kertoa? Sijoittelunäkymissä Ohjelmistokomponenttien allokointia suoritusympäristöön ja laitteistolle on lähes mahdotonta nähdä lähdekoodista Ajatellaan esimerkiksi palvelimien virtualisointia pilvipalveluissa Suoritusympäristön ja tietoliikenneväylien ja topologian vaikutusta ohjelmiston suoritusaikaiseen käyttäytymiseen on hyvin vaikea päätellä koodista 1.10.2013 581385 Ohjelmistoarkkitehtuurit 29 Ratkaisumalleja (design pattern) arkkitehtuurin ilmaisemiseen Seuraavat patternit olettavat, että toteutuksessa käytetään valtavirran olio-ohjelmointikieliä Patternien käyttö lisää toteutukseen ylimääräistä koodia, joka ei sinänsä ole tarpeen ohjelman oikean toiminnan kannalta (suhteessa vaatimuksiin) mutta joka ei tuo liikaa lisärasitetta suorituskyvyn tai resurssien käytön kannalta Monen patternin perusperiaate on käsitteen (abstraktin mallielementin tai piirteen) konkretisointi (reification) oliona, luokkina tai annotiaatioina 1.10.2013 581385 Ohjelmistoarkkitehtuurit 30 15

Ratkaisumalleja (design pattern) arkkitehtuurin ilmaisemiseen Suunnittelukäsite Komponentti Konnektori Portti Patternit Määrittele komponenttia vastaava luokka, jolla on abstrakti yläluokka tai rajapinta tunnisteena (tag). Liitä luokan nimeen sana Component. Käytä instanssimuuttujia edustamaan portteja ja määrittele komponentti-invarianteista metodeja. Nimeä moduulit / hakemistot komponenttien mukaan. Määrittele konnektoria vastaava luokka; luokan nimentä ( Connector); abstraktin yliluokan tai rajapinnan käyttäminen tunnisteena. Ohjaa kaikki komponentin ulkopuolelle menevä kommunikaatio porttien kautta. Määrittele tarjottua porttia vastaava rajapinta. Määrittele tarjottuja ja vaadittuja portteja vataavat luokat; luokan nimentä ( Required/ProvidedPort); abstraktin yliluokan tai rajapinnan käyttäminen tunnisteena. 1.10.2013 581385 Ohjelmistoarkkitehtuurit 31 Ratkaisumalleja (design pattern) arkkitehtuurin ilmaisemiseen Suunnittelukäsite Protokolla Ominaisuudet / Property Tyylit ja suunnittelumallit Invariantit ja rajoitteet Patternit Kytke protokollan tilakone portti-luokkaan. Käytä staattista analyysiä protokollan noudattamisen varmistamiseen, annotaatioita, kommentteja Käytä annotaatioita ja staattista analyysiä. Käytä nimentää: AsynchronousSend Käytä tyylin ilmaisevaa nimentää: FeatureExtractFilter Sijoita tyylin elementtien yliluokat/tunnisterajapinnat tyylin mukaan nimettyyn pakkaukseen. Kirjoita API:t niin, että ne estävät invarianttien rikkomisen. Käytä assert-lausekkeita tai muita rajoitteiden määrittely- ja tarkastusformalismeja. Kommentoi. 1.10.2013 581385 Ohjelmistoarkkitehtuurit 32 16

Ratkaisumalleja (design pattern) arkkitehtuurin ilmaisemiseen Suunnittelukäsite Moduulien riippuvuudet Moduulien käytön rajoittaminen Suoritusaikaiset rakenteet Patternit Käytä kielen ja sovelluskehyksen/alustan tarjoamia keinoja riippuvuuksien ilmaisemiseen (tarjotut ja vaaditut palvelut/rajapinnat/moduulit). Käytä ulkoisia työkaluja riippuvuuksien analysointiin, annotaatioita, staattista analyysiä. Nimentä: InternalFoo Sovellukehysten/alustojen tarjoama vivutus. Jos mahdollista, keskitä komponenttien luonti, alustaminen ja kytkentä toisiinsa yhteen tiettyyn paikkaan koodissa. Vivuta järjestelmän käynnistys ja alustus; mielellään niin, että halutun konfiguraation voi ilmaista deklaratiivisesti (esim XML) proseduraalisen koodin (esim skripti) sijaan. 1.10.2013 581385 Ohjelmistoarkkitehtuurit 33 Anti-Pattern Haudattu aarre (buried treasure) Koodi tekee jotain muuta kuin mitä koodiin lisätyt vihjeet antavat ymmärtää Esim getx() tyyppisellä attribuutin arvon saantimetodilla on yllättäviä sivuvaikutuksia Asian voi ajatella myös toisinpäin: jos epäilet, että koodin lukija saattaa yllättyä siitä, mitä koodi tekee, liitä siihen riittävä vihje 1.10.2013 581385 Ohjelmistoarkkitehtuurit 34 17

ARKKITEHTUURIKIELET 1.10.2013 581385 Ohjelmistoarkkitehtuurit 35 Arkkitehtuurin määrittelykielet ADL Architecture Description Language 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 1.10.2013 36 18

Arkkitehtuurin määrittelykieliä 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 1.10.2013 37 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..) 1.10.2013 38 19

Arkkitehtuurikielet Erityisellä arkkitehtuurikielellä laadittu kuvaus - kielet lähinnä tutkimuskäytössä - ei juuri käytössä teollisuudessa + käsitteet täsmällisesti määriteltyjä + analysointimahdollisuuksia MDE Model Driven Engineering Aktiivista tutkimusta, toistaiseksi vähän käytännön sovelluksia 1.10.2013 581385 Ohjelmistoarkkitehtuurit 39 20