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

Samankaltaiset tiedostot
Koodimalli Code Model

OA:n kanoninen malli III

Ohjelmistoarkkitehtuurit, syksy

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

Ohjelmistojen suunnittelu

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

Ohjelmistojen mallintaminen, mallintaminen ja UML

OA:n kanoninen malli II

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

2 Ohjelmistoarkkitehtuurien kuvaus

Malliperustainen ohjelmistokehitys - MDE Pasi Lehtimäki

OA:n kanoninen malli I

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

Arkkitehtuurin mallintaminen

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

8/20: Luokat, oliot ja APIt

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

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

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

UML:n yleiskatsaus. UML:n osat:

3. Komponentit ja rajapinnat

11/20: Konepelti auki

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

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

Suunnitteluvaihe prosessissa

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Ohjelmistoarkkitehtuurit

Arkkitehtuurin mallintaminen

Analyysi, staattinen mallintaminen, kohdealueen malli ja luokkakaavio

ohjelman arkkitehtuurista.

Harjoitustehtävät ja ratkaisut viikolle 48

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

ELM GROUP 04. Teemu Laakso Henrik Talarmo

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

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

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

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

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

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

2. Olio-ohjelmoinnin perusteita 2.1

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

Ohjelmistotekniikka - Luento 2

Ohjelmistojen mallintaminen kertausta Harri Laine 1

Sovellusalue- ja suunnittelumallit Domain Model, Design Model

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

Ohjelmistoarkkitehtuurit kevät

Ohjelmistoarkkitehtuurit Komponentit Kevät 2014

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

Tiedonsiirto- ja rajapintastandardit

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset

Viestinvälitysarkkitehtuurit

Ohjelmistoarkkitehtuurin suunnittelu

Ohjelmistotekniikka - Luento 2 Jouni Lappalainen

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

Ohjelmistojen mallintaminen. Luento 11, 7.12.

15. Ohjelmoinnin tekniikkaa 15.1

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

Ohjelmointi 1 / syksy /20: IDE

Ohjelmistoarkkitehtuuri

Ohjelmistotekniikan menetelmät, UML

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

SEPA - Design Patterns

Viestinvälitysarkkitehtuurit Lähtökohta:

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

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

Dynaaminen analyysi I

UML-kielen formalisointi Object-Z:lla

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

TOIMINNALLINEN MÄÄRITTELY MS

ITKP102 Ohjelmointi 1 (6 op)

Ohjelmistotekniikan menetelmät, suunnittelumalleja

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

9. Periytyminen Javassa 9.1

13/20: Kierrätys kannattaa koodaamisessakin

1 Johdanto. TTY Ohjelmistotekniikka. Ohjelmistoarkkitehtuurit Syksy 2008

Suorituskyky ja ohjelmistokehitys Suorituskykymallit

Järjestelmäarkkitehtuuri (TK081702)

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

Älysopimusten kehittäminen. Sopimus suuntautunut ohjelmointi

1. Olio-ohjelmointi 1.1

Ohjelmistojen mallintaminen

Ohjelmistojen mallintaminen Ohjelmiston suunnittelu Model driven development Harri Laine 1

Ohjelmistoarkkitehtuurit, syksy

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

7/20: Paketti kasassa ensimmäistä kertaa

Osittavat arkkitehtuurityylit. Palveluihin perustuvat arkkitehtuurityylit. Erikoisarkkitehtuurityylit

Uudelleenkäytön jako kahteen

Analyysi, dynaaminen mallintaminen, yhteistoimintakaavio ja sekvenssikaavio

Javan perusteita. Janne Käki

Analyysi on tulkkaamista

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

D-OHJELMOINTIKIELI. AA-kerho, 33. Antti Uusimäki. Arto Savolainen

Unified Modeling Language

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

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

Analyysi, dynaaminen mallintaminen, yhteistoimintakaavio ja sekvenssikaavio

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Suunnittelumallien käyttö ohjelmistosuunnittelussa

Transkriptio:

Oppimistavoitteet Koodimalli Code Model Luento 10 Näkymätyypit (suunnittelumalliasiaa) Koodimalli Arkkitehtuurisuunnittelun ja implementaation välinen kuilu Arkkitehtuurin tekeminen näkyväksi koodissa Arkkitehtuurikielet (ADL) 1.10.2015 581385 Ohjelmistoarkkitehtuurit 1 1.10.2015 581385 Ohjelmistoarkkitehtuurit 2 Yksi arkkitehtuuri monta näkymää Järjestelmän konkreettinen arkkitehtuurimalli: kokoelma (arkkitehtuuri-)näkymiä NÄKYMÄTYYPIT Järjestelmä 1.10.2015 581385 Ohjelmistoarkkitehtuurit 3 1.10.2015 581385 Ohjelmistoarkkitehtuurit 4 Näkymätyypit Näkymätyypit Näkymätyyppi on helposti yhteen sovitettavien ja yhdessä ymmärrettävien mutta erilaisten näkymien joukko Esim. toiminnallinen skenaario ja komponenttikokoonpano suunnittelumallissa! Käytetään jaottelemaan suunnittelu- ja koodimallien näkymiä Kolme standardinäkymätyyppiä Moduulinäkymätyyppi (module viewtype, staattinen olomuoto) Käännösaikana näkyvät elementit Ajonaikainen näkymätyyppi (runtime viewtype, dynaaminen ol.) Suorituksen aikana näkyvät elementit ja niiden suhteet Sijoittelunäkymätyyppi (allocation viewtype, operatiivinen ol.) Ohjelmiston ja sen osien suoritusympäristö ja -laitteisto Usean näkymätyypin yli menevät näkymät (spanning viewtype) Laatuominaisuudet ja niiden tasapainottelu (trade offs) Ylläpidettävyys vs. suorituskyky 1.10.2015 581385 Ohjelmistoarkkitehtuurit 5 1.10.2015 581385 Ohjelmistoarkkitehtuurit 6 1

Näkymätyypit Yinzer -suunnittelumallin näkymät 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, tradeoffs (laatuominaisuudet, liiketoiminnan tavoitteisiin liittyvät näkökohdat) Tyyppi Moduuli Ajonaikainen Sijoittelu Ylimenevät Näkymät Moduulikaavio Komponentti-,konnektori-ja porttityypit Käyttötapauskaavio Komponenttien vastuut Systeemikontekstikaavio Toiminnallisetskenaariot Komponentti-,konnektori-ja portti-instanssit Komponenttikokoonpanot Sijoittelukaavio Suoritusympäristön elementtien kuvaus Laatuattribuuttiskenaariot Ominaisuuksien ja vaatimusten tasapainottelut (trade off) 1.10.2015 581385 Ohjelmistoarkkitehtuurit 7 1.10.2015 581385 Ohjelmistoarkkitehtuurit 8 Näkökohtia Ohjelman suoritusaikaista 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ä KOODIMALLI 1.10.2015 581385 Ohjelmistoarkkitehtuurit 9 1.10.2015 581385 Ohjelmistoarkkitehtuurit 10 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 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.2015 581385 Ohjelmistoarkkitehtuurit 11 1.10.2015 581385 Ohjelmistoarkkitehtuurit 12 2

Mallien ja koodin erot - kieli Monilla suunnittelumallin käsitteillä ei ole suoraa vastinetta koodissa Laatuominaisuus, arkkitehtuurityyli, rajoite, komponentti (riippuu tilanteesta), vastuu, Jotkin käsitteet ovat lähellä toisiaan Moduuli ja pakkaus Koodi puhuu luokista, metodeista, funktioista, parametreista, muuttujista, kentistä, lauseista, lausekkeista jne. 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.2015 581385 Ohjelmistoarkkitehtuurit 13 1.10.2015 581385 Ohjelmistoarkkitehtuurit 14 Mallien ja koodin erot - suunittelupäätökset Arkkitehtuurimallissa voidaan päättää käyttää tiettyjä teknologioita, mutta 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, algoritmit ja prosessikonfiguraation, joilla tavoite saavutetaan Mallien ja koodin erot ekstensionaalisuus ja intensionaalisuus Ekstensionaalinen vain tiettyjä, erikseen nimettyjä elementtejä koskeva asia tai väite Intensionaalinen kaikkia tietynlaisia elementtejä koskeva asia tai väite 1.10.2015 581385 Ohjelmistoarkkitehtuurit 15 1.10.2015 581385 Ohjelmistoarkkitehtuurit 16 Ekstensionaalisuus ja intensionaalisuus Mallien ja koodin erot 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 Vastinekoodissa voidaan yleensä osoittaa, joskin arkkitehtuurikuvaus on yleensä abstraktimpi Koodinpitää noudattaa näitä, mutta yleensä ei ole suoraa tapaa ilmaista niitä koodissa. 1.10.2015 581385 Ohjelmistoarkkitehtuurit 17 1.10.2015 581385 Ohjelmistoarkkitehtuurit 18 3

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 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.2015 581385 Ohjelmistoarkkitehtuurit 19 1.10.2015 581385 Ohjelmistoarkkitehtuurit 20 Strategia Älä välitä poikkeamista Adhocmallinnus Vain korkean tason malleja Syknronointi elinkaaren virstanpylväissä Kun hätä on kädessä Jatkuva synkronointi Erojen hallintastrategiat 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 Arkkitehtuurin kaikkein perustavimmat ratkaisut muuttuvat yleensä hitaasti, joten niitten mallit pysyvät parhaiten ajan tasalla Mallienja 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.2015 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.2015 581385 Ohjelmistoarkkitehtuurit 22 Arkkitehtuuria korostava ohjelmointityyli Olio-ohjelmoinnin tunnettu perusperiaate on, että ohjelmiston luokkien (tyyppien) ja suoritusaikaisten oliorakenteiden ja vuorovaikutusten tulisi heijastaa sovellusalueen käsitteitä ja prosesseja Sovellusaluetta tuntevan (ulkopuolisen) kehittäjän on helpompi ymmärtää, miten ohjelmisto toimii ja mitä eri oliot tekevät tai tietävät (vastuut) Jos sovellusalueen käsitteet ovat vakaita ja niiden muutokset ovat paikallisia, myös ohjelmiston toteutus on niiden osalta vakaa ja muutokset ovat paikallisia 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.2015 581385 Ohjelmistoarkkitehtuurit 23 1.10.2015 581385 Ohjelmistoarkkitehtuurit 24 4

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 suoritusaikana Ohjelmointikielten laajentaminen tukemaan rajoitteiden ja muiden ehtojen noudattamisen automaattista valvontaa 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.2015 581385 Ohjelmistoarkkitehtuurit 25 1.10.2015 581385 Ohjelmistoarkkitehtuurit 26 Mitä asioita koodissa pitäisi (yrittää) kertoa? Mitkä arkkitehtuurimallien kertomat asiat on vaikea päätellä suoraan koodista ilman apuja? Moduulinäkymissä Moduulien (pakkausten) väliset riippuvuudet Mistä luokista/tietorakenteista + funktioista komponentti- tai konnektorityypit muodostuvat? Luokkien tarjoamat rajapinnat on usein helppo tunnistaa mutta niiden muilta vaatimia rajapintoja/palveluja on työläämpää nähdä koodista Protokollien toimintalogiikka ja osallistuvat elementit Mitä asioita koodissa pitäisi (yrittää) kertoa? Ajonaikaisissa näkymissä Suorituksen kulkua ja suoritusaikaisia tietorakenteita on usein vaikea kuvitella mielessään koodia lukiessaan 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.2015 581385 Ohjelmistoarkkitehtuurit 27 1.10.2015 581385 Ohjelmistoarkkitehtuurit 28 Mitä asioita koodin pitäisi (yrittää) 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 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, perittävinä luokkina tai annotaatioina Esim. Command -design pattern tekee suoritettavasta operaatiosta olion, jolla on execute() -metodi 1.10.2015 581385 Ohjelmistoarkkitehtuurit 29 1.10.2015 581385 Ohjelmistoarkkitehtuurit 30 5

Suunnittelukäsite Patternit Suunnittelukäsite Patternit Komponentti Konnektori Portti 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 vastaavat luokat; luokan nimentä ( Required/ProvidedPort); abstraktin yliluokan tai rajapinnan käyttäminen tunnisteena. Protokolla Ominaisuudet/ Property Tyylit ja suunnittelumallit Invariantitja rajoitteet 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.2015 581385 Ohjelmistoarkkitehtuurit 31 1.10.2015 581385 Ohjelmistoarkkitehtuurit 32 Anti-Pattern 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. Haudattu aarre (buried treasure) Koodi tekee jotain muuta kuin mitä koodiin lisätyt vihjeet antavat ymmärtää Esim olion getpropertyx() tyyppisellä attribuutin arvon saantimetodilla on yllättävä olion tilaa muuttava sivuvaikutus 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.2015 581385 Ohjelmistoarkkitehtuurit 33 1.10.2015 581385 Ohjelmistoarkkitehtuurit 34 Arkkitehtuurin määrittelykielet ADL Architecture Description Language Perustuvat yleisiin arkkitehtuurielementteihin Komponentit Konnektorit (connector) Portit Rajapinnat (interface) ARKKITEHTUURIKIELET 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.2015 581385 Ohjelmistoarkkitehtuurit 35 1.10.2015 36 6

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 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.2015 37 1.10.2015 38 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 DSL Domain Specific Language Sovellusaluekohtainen, usein graafinen kieli, josta generoidaan sovelluksen toteutus arkkitehtuureineen kaikkineen (yleensä suppea erikoisalue) MDE:tä laajemmin käytössä (esim suomal. MetaEdit+) 1.10.2015 581385 Ohjelmistoarkkitehtuurit 39 7