Ohjelmistoarkkitehtuurit Kevät 2016 Arkkitehtuurityylit vol 2

Samankaltaiset tiedostot
Ohjelmistoarkkitehtuurit kevät

Viestinvälitysarkkitehtuurit

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

Ohjelmistoarkkitehtuurit

Viestinvälitysarkkitehtuurit Lähtökohta:

Ohjelmistoarkkitehtuurit Kevät 2014 Arkkitehtuurityylit vol 2

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

Järjestelmä koostuu keskenään kommunikoivista komponenteista, mahdollisesti hajautettuja. Komponenttien palveluja ei tiedetä tarkasti etukäteen

Viestinvälitysarkkitehtuurit

7 Viestipohjaisten yritysjärjestelmien suunnittelumallit

6. Architectural styles

Ohjelmistojen mallinnus Ohjelmistoarkkitehtuuri Harri Laine 1

Ohjelmistoarkkitehtuurit. Kevät

Ohjelmistoarkkitehtuurit kevät

Palveluperustaiset arkkitehtuurityylit

Ohjelmistoarkkitehtuurit

Ohjelmistoarkkitehtuurit Johannes Koskinen. Osittavat arkkitehtuurityylit

Osittavat arkkitehtuurityylit. Palveluihin perustuvat arkkitehtuurityylit. Erikoisarkkitehtuurityylit

14. Luento: Kohti hajautettuja sulautettuja järjestelmiä. Tommi Mikkonen,

6. Arkkitehtuurityylit

Graafisen käyttöliittymän ohjelmointi Syksy 2013

6. Arkkitehtuurityylit

Ohjelmistoarkkitehtuurit. Kevät

Ohjelmistojen mallintaminen kertausta Harri Laine 1

Ohjelmistoarkkitehtuurit. Kevät 2014 Kertausta

Harjoitustehtävät viikolle 42

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Ohjelmistoarkkitehtuurit

Ohjelmistoarkkitehtuuri


XPages käyttö ja edut Jarkko Pietikäinen toimitusjohtaja, Netwell Oy

Graafinen käyttöliittymä, osa 1

TIE Ohjelmistojen suunnittelu

Testidatan generointi

Suunnittelumalleja, MVC. Juha Järvensivu 2008

Hakemistojen sisällöt säilötään linkitetyille listalle.

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

AJAX-konsepti AJAX. Asynkronisuus. Nykyisten web-ohjelmien ongelmia. Asynchronous JavaScript And XML

Tuoterunkoarkkitehtuurit. Ohjelmistoarkkitehtuurit kevät Uudelleenkäyttö. Johannes Koskinen.

HOJ J2EE & EJB & SOAP &...

Järjestelmäarkkitehtuuri (TK081702)

Arkkitehtuurityylejä ja ratkaisumalleja

Ohjelmistoarkkitehtuurit. Kevät

Sovellusarkkitehtuurit

Ohjelmistoarkkitehtuurit. Kevät 2014

Android ohjelmointi. Mobiiliohjelmointi 2-3T5245

Ohjelmistoarkkitehtuurit Kevät Johannes Koskinen Esimerkki: Auton toiminnan monitorointijärjestelmä

Ohjelmistoarkkitehtuurit. Kevät

Paikkatiedot palveluväylässä kehityksen tilanne Väylän varrelta - Kansallisen palveluväylän kehitystilanne -seminaari

Action Request System

Esimerkki: Auton toiminnan monitorointijärjestelmä

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

Ohjelmistojen suunnittelu

Hirviö. Design Patterns

Nspire CAS - koulutus Ohjelmiston käytön alkeet Pekka Vienonen

OHJELMISTOKEHITYS -suuntautumisvaihtoehto

in condition monitoring

10. Tuoterunkoarkkitehtuurit

Harjoitustehtävät ja ratkaisut viikolle 48

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

11. Tuoterunkoarkkitehtuurit

Paikkatietorajapinnat IT arkkitehtuurin näkökulmasta

Suunnitteluvaihe prosessissa

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

HSMT J2EE & EJB & SOAP &...

Harjoitustyön testaus. Juha Taina

Linkitetystä listasta perittyä omaa listaa käytetään muun muassa viestiin liittyvien vastausten säilömiseen.

Arkkitehtuurityylejä ja suunnittelutaktiikoita

Copyright Observis Oy All rights reserved. Observis Oy Ville Kanerva, CTO Heikki Isotalus, COO Datasta tietoa

T Hypermediadokumentin laatiminen. Sisältö. Tavoitteet. Mitä on www-ohjelmointi? Arkkitehtuuri (yleisesti) Interaktiivisuuden keinot

Aurinkoenergiajärjestelmien etäseurantajärjestelmä

TermBase NET versio (Beta)

Tietotekniikan koulutusohjelman suuntautumisvaihtoehdot

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

Ajattelemme tietokonetta yleensä läppärinä tai pöytäkoneena

Perusarkkitehtuurin ja vuorovaikutuksen mallintamisen perusteita.

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

Tiedonsiirto- ja rajapintastandardit

Sokkelon sisältö säilötään linkitetyille listalle ja tekstitiedostoon. Työ tehdään itsenäisesti yhden hengen ryhmissä. Ideoita voi vaihtaa koodia ei.

Harjoitustyö: virtuaalikone

Ohjelmistotuotanto. Luento

Windows Server 2012 asentaminen ja käyttöönotto, Serverin pyörittämisen takia tarvitaan

8. Näppäimistöltä lukeminen 8.1

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

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

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

11. Tuoterunkoarkkitehtuurit

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

Ohjelmiston testaus ja laatu. Ohjelmistotekniikka elinkaarimallit

Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä:

9. Muunneltavuuden hallinta

Hammastankohissin modernisointi. Heikki Laitasalmi

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

TIETOKANNAN SUUNNITTELU

TIE Ohjelmistojen suunnittelu

ELM GROUP 04. Teemu Laakso Henrik Talarmo

RECO irtaimiston- ja omaisuuden hallinta

The OWL-S are not what they seem

Kehitysohje. ETL-työkalu. ExtraTerrestriaLs / Aureolis Oy

Projektisuunnitelma. Radio-ohjattavan pienoismallin mekatroniikan ja ohjelmiston kehitys

Transkriptio:

Ohjelmistoarkkitehtuurit Kevät 2016 Arkkitehtuurityylit vol 2 Samuel Lahtinen http://www.cs.tut.fi/~ohar/ Ohjelmistoarkkitehtuurit 2016 9.2.2016 1

Aikaisempaa & tänään Arkkitehtuurityylit Tuttua kamaa pipes & filters jne. Tänään viestinvälitys, asiakas-palvelin, tulkki Ohjelmistoarkkitehtuurit 2016 9.2.2016 2

Viestinvälitysarkkitehtuurit Lähtökohta: Järjestelmä koostuu keskenään kommunikoivista komponenteista, mahdollisesti hajautettuja Komponenttien palveluja ei tiedetä tarkasti etukäteen Komponentteja ja niiden lukumäärää ei tiedetä tarkasti etukäteen Järjestelmässä liikkuvan tiedon laatua ei tunneta tarkasti etukäteen Ohjelmistoarkkitehtuurit 2016 9.2.2016 3

Viestinvälitysarkkitehtuuri: perusidea rekisteröidyt komponentit 1) luo viesti 2) lähetä välittäjälle Komponenttien yhteinen rajapinta: receive(message) 3) päätä vastaanottaja(t) ja välitä viesti sille/niille rekisteröidyt komponentit 4) vastaanota Viesti Viestinvälittäjä 5) tulkitse/ prosessoi viesti Ohjelmistoarkkitehtuurit 2016 9.2.2016 4

Rajapinnat vs. viestit Komponentit, Asiakas-palvelin, Web palvelut (SOA), C++, Java func A(X ) Rajapinta toteuttaa Palvelun tarjoaja Palvelun pyytäjä Viestinvälitysarkkitehtuurit, palveluväylät (ESB) Viesti ACTION = A PAR1 = X lukee Viestin välittäjä Palvelun tarjoaja Palvelun tarjoaja Rajapinta kertoo mitä tehdään ja millä tiedolla, viesti voi kertoa mitä tahansa (mitä tehdään, kuka tekee, millä tiedolla). Ohjelmistoarkkitehtuurit 2016 9.2.2016 5

Esimerkkejä Koneiden ohjausjärjestelmät Iot-himmelit Multimodaalisia järjestelmiä, komentokeskeiset arkkitehtuurit (WPF, Qt:n osat) Yrityksen liiketoimintojen hallintajärjestelmä Yleisesti: hajautetut järjestelmät, löyhää integrointia vaativat järjestelmät Ohjelmistoarkkitehtuurit 2016 9.2.2016 6

Palveluperustainen viestinvälitysarkkitehtuuri Palvelupyyntö Palvelupyyntö Asiakas Viestinvälittäjä Palvelija Palvelun tulos Palvelun tulos Viestinvälittäjä huolehtii siitä, että tulos menee oikealle komponentille Ohjelmistoarkkitehtuurit 2016 9.2.2016 7

Esimerkki: Auton viestiväylä moottorinohjaus ajotietokone jarrut vaihdelaatikko CAN väylä (Controller Area Network) Ohjelmistoarkkitehtuurit 2016 9.2.2016 8

Auto ja johdotukset ennen väylää Ohjelmistoarkkitehtuurit 2016 9.2.2016 9

Väylän kera Ohjelmistoarkkitehtuurit 2016 9.2.2016 10

Auton huoltotarkkailujärjestelmä: komponenttikaavio CANBusExaminer Messenger ServiceComponent receive(msg) MessageDispatcher send(msg) register(msgtype,component) recordusage() getstate() Sovitin muuntaa viestin palvelukutsuksi BrakeAdapter EngineAdapter EngineMonitor returnstate Ohjelmistoarkkitehtuurit 2016 9.2.2016 11

Viestinvälitys ja viestit Viestisisältö/muoto olennaisessa asemassa Suoritusohjeita, dataa, paluupyyntö Kenelle tarkoitettu Komponenteilla ID, id:n perusteella tehtävä priorisointi Mahdollisuus useampiin eri väyliin, viihdelaitteet, ajoneuvon hallinta, mukavuuslaitteet Ohjelmistoarkkitehtuurit 2016 9.2.2016 12

https://eewiki.net/download/attachments/27295747/can_network.jpg?version=2&modificationdate=1382572042097&api=v2 Ohjelmistoarkkitehtuurit 2016 9.2.2016 13

CAN-viestit, esimerkki SOF-start of frame Message id viestin tunniste, mitä pienempi, sen korkeampi prioriteetti Control protokollaan ja viestin sisällön pituuteen liittyvää tietoa Data (field) viestisisältö, esim. 0-8 tavua CRC (cyclic redundance check) tarkistearvo(15 bittinen) ACK joku node on käsitellyt viestin (ei välttämättä tarkoitettu kohde) EOF (end of frame) Ohjelmistoarkkitehtuurit 2016 9.2.2016 14

Esihistoriaa, sulautettujen ohjelmistojen simulointiympäristö kattila Pohjaventtiili pumppu poltin Kattilan ctrl lämmitys Prosessin ohjaus lämmitin anturi prosessi Simulaation ohjaus Liitin (output) Liitin (inpout) laite Ohjelmistoarkkitehtuurit 2016 9.2.2016 15

Esihistoriaa Sisäinen toteutus, viestinvälittäjä jokaisessa prosessissa, laitteet rekisteröityvät sille (viestilähteet & vastaanottajat), nämä kertovat olemassaolostaan ohjaukselle Simulaation ohjaus luo simulaatiomaailman, hallitsee sitä (esim. Ajanhallinta), tekee yhteydet (simulation kuvauksen perusteella) Viestinvälitys kaikessa kommunikaatiossa, viestit Ohjelmistoarkkitehtuurit 2016 9.2.2016 16

Viestityyppien & sisällön määritys Viestinvälitysarkkitehtuurit viestejä Tärkeä määritellä viestien rakenne, sisältö, mahdollinen virheiden hallinta jne. Erilaisia viestejä: Tapahtumaviestit, pyyntö-vastaus-viestit, komentoviestit (remote procedure), dataviestit (tiedon siirtoa) Ohjelmistoarkkitehtuurit 2016 9.2.2016 17

Viestinvälitysarkkitehtuurin etuja Helppo muuttaa, lisätä ja poistaa komponentteja tai sovelluksia Vikasietoinen (esim. jos viestillä ei vastaanottajaa), voidaan esim. toistaa viestin lähettämistä Joustava järjestelmäkonfiguraatio Sallii heterogeeniset järjestelmät, sovellusintegraation Sallii sekä synkronisen että asynkronisen kommunikoinnin Ohjelmistoarkkitehtuurit 2016 9.2.2016 18

Viestinvälitysarkkitehtuurin haittoja Tehokkuus: viestien kirjoittaminen ja lukeminen Vaikeampi toteuttaa, testata ja ymmärtää kuin perinteinen Jotkut tavalliset asiat vaativat erityistukea (esim. tuloksen palautus, synkronisuus) Syntyy helposti implisiittisiä riippuvuuksia yksiköiden välille, näennäisesti toisistaan riippumattomat komponentit vaikeita ylläpitää, muuttaa (erityisesti jos riippuvuuksia ei dokumentoitu) Ohjelmistoarkkitehtuurit 2016 9.2.2016 19

Harjoitus Topologia Lineaarinen Keskitetty Rajapinnat Riippuu palvelusta Ei riipu palvelusta 1 2 3 4 Täytä arkkitehtuurityylien nimillä Ohjelmistoarkkitehtuurit 2016 9.2.2016 20

Kysyttävää?

Malli-näkymä-ohjain arkkitehtuurit (Model-View-Controller, MVC) Interaktiivisten järjestelmien arkkitehtuuriratkaisu, jolla käyttöliittymä erotetaan sovelluslogiikasta. Ohjelmistoarkkitehtuurit 2016 9.2.2016 23

Malli-näkymä-ohjain arkkitehtuurit (Model-View-Controller, MVC) Lähtökohdat: Sovelluksen tilasta pitäisi pystyä antamaan erilaisia näkymiä Käyttöliittymän pitäisi välittömästi heijastaa sovelluksen tilan muutoksia Käyttöliittymää pitäisi olla helppo muuttaa Sovellus pitäisi voida kohtuullisella työllä siirtää toiselle graafiselle alustalle Ohjelmistoarkkitehtuurit 2016 9.2.2016 24

Vastuut Malli Tarjoaa sovellukseen liittyvät loogiset toiminnot ja tiedot Rekisteröi sovelluksen tilasta kiinnostuneet näkymäkomponentit Ilmoittaa rekisteröityneille komponenteille tilan muutoksista Näkymä Huolehtii sovelluksen tilan näyttämisestä näytöllä Ohjain Ottaa vastaan käyttäjän komentoja Muuntaa komennot sovelluksen toiminnoiksi Ohjelmistoarkkitehtuurit 2016 9.2.2016 25

MVC vuorovaikutus Controller Model View handle- Event service suorita toiminto notify update getdata display Ohjelmistoarkkitehtuurit 2016 9.2.2016 26

MVC:n edut ja ongelmat Etuja Helppo toteuttaa useita näkymiä samaan tietoon Kaikki näkymät ovat automaattisesti synkronoituja Uusia näkymiä voidaan ajoaikana liittää järjestelmään Käyttöliittymän ulkoasu suhteellisen helposti vaihdettavissa Ongelmia Mahdollisesti turhia näkymien päivityskutsuja Mallidatan kyselyt voivat lisätä suoritusaikaa (yksinkertaiset sovellukset, paljon ylimääräistä työtä) Ohjelmistoarkkitehtuurit 2016 9.2.2016 27

Kysyttävää?

Tulkkiarkkitehtuurit Tarve antaa toiminnallisia kuvauksia syötteenä järjestelmälle, esimerkiksi: tarve yhdistellä primitiivisiä toimintoja eri tavoin, jotka eivät ole tiedossa etukäteen tarve erottaa looginen, abstrakti suoritusalusta konkreettisesta (esim. jälkimmäisen vaihtamisen helpottamiseksi) Ohjelmistoarkkitehtuurit 2016 9.2.2016 29

Tulkkiarkkitehtuurin perusidea toimintakuvauksen sisäinen esitys Tuloste Jokin toiminnallinen kuvaus (teksti, XML, graafinen, ym.) Tulkki kutsuu Konkreettinen suoritusalusta noudattaa toteutus Syöte Kielen määritys Ohjelmistoarkkitehtuurit 2016 9.2.2016 30

Esimerkki 1: Java käännös toimintakuvauksen sisäinen esitys Tavukoodi Ohjelman tulokset Java-ohjelma JVM (C-ohj) kutsuu Suoritusalusta (C ympäristö) noudattaa toteutus Ohjelman syöte Javan määritys Ohjelmistoarkkitehtuurit 2016 9.2.2016 31

Esimerkki 2: Taulukkolaskenta Laskettu taulukko sis.esitys Taulukkoskripti Skriptitulkki Taulukkolaskenta noudattaa toteutus Skriptikielen määritys Taulukon alkion arvo Ohjelmistoarkkitehtuurit 2016 9.2.2016 32

Esimerkki 3: SQL kyselyt DBMS SQL-kysely SQLtulkki Tietokanta Kyselyn tulos Sovellus Ohjelmistoarkkitehtuurit 2016 9.2.2016 33

Esimerkki 4: Tulkitseva DSL toimintakuvauksen sisäinen esitys Tuloste Sovelluksen kuvaus DSL-kielellä Tulkki kutsuu API Alusta noudattaa toteutus Syöte DSL-kielen määritys DSL = Domain-Specific Language Ohjelmistoarkkitehtuurit 2016 9.2.2016 34

Esimerkki 4: modattavissa olevat pelit sis.esitys Pelin data, toimintaskriptit Skriptitulkki Pelimoottori Häk-häk toteutus Skriptikielen Määritys datatyypit Ohjelmistoarkkitehtuurit 2016 9.2.2016 35

Pelien modaus ja laajennokset Skyrim: http://www.creationkit.com/main_page työkalut karttojen, henkilöiden, tarinoiden, jne. luomiseen, Papyrusskriptit (myös Fallout 3/New Vegas, Oblivion) Medieval Total War 2: http://medieval2.heavengames.com/m2tw/mod_portal/tutorials/inde x.shtml Joukkojen, rakennusten määrittely tekstiasetustiedostojen avulla Civilization 5: http://modiki.civfanatics.com/index.php/main_page XML, Lua-skriptit Ohjelmistoarkkitehtuurit 2016 9.2.2016 36

Qt ja QtScript (Javascript) http://doc.qt.io/qt-5/qtscript-index.html QML-puoli c++:n ja QML-maailman, jossa myös JavaScript-tuki, yhdisteleminen Ohjelmistoarkkitehtuurit 2016 9.2.2016 37

Kysyttävää?

Huom. Oman kielen ja tulkkijärjestelmän teko ei välttämättä järkevin vaihtoehto, tarkasta aina kelpaako joku olemassa oleva Ohjelmistoarkkitehtuurit 2016 9.2.2016 39

Tulkin suunnittelu: Tulkkisuunnittelumalli (Interpreter) Ongelma: miten esittää tulkittava ohjelma olioina? Mikä suunnittelumalli on samanlainen? Ratkaisu: Interpreter AbstractStruct interpret(rep) * TerminalStruct interpret(rep) CompositeStruct interpret(rep) Ohjelmistoarkkitehtuurit 2016 9.2.2016 40

Tulkki-suunnittelumallin johtaminen: Kielen rakenteiden esitys luokkina Ongelma: Miten esittää kielen rakenteet luokkina? Esimerkiksi: Script ::= "SCRIPT" Action {";" Action} "END" Action ::= "IF" Expr "THEN" Action "END" identifier "(" Expr ") Expr ::=... Luokkamalli? Ohjelmistoarkkitehtuurit 2016 9.2.2016 41

Välisymbolit ja rakenteiset loppusymbolit esitetään luokkina Esimerkiksi: Script, Action, Expr, identifier => luokkia Ei-rakenteiset loppusymbolit (avainsanat, erikoismerkit ym.): SCRIPT END IF THEN ; ( ) Näitä tarvitaan vain jäsennyksen (ja lukemisen) tueksi, eivät olennaisia (nk. konkreettinen syntaksi) Ohjelmistoarkkitehtuurit 2016 9.2.2016 42

Mitä tuotossääntö merkitsee luokkien kannalta? Ehdotus: Tuotossääntö merkitsee sitä, että oikean puolen luokat ovat osa-suhteessa vasemman puolen luokkiin. A ::= B C tarkoittaa: 1 B A 1 C Ohjelmistoarkkitehtuurit 2016 9.2.2016 43

Mitä tuotossääntö merkitsee luokkien kannalta? Ehdotus: Tuotossääntö merkitsee sitä, että oikean puolen luokat ovat osa-suhteessa vasemman puolen luokkiin. entä A ::= B C D E? A 0..1 0..1 B C 0..1 D 0..1 E Ohjelmistoarkkitehtuurit 2016 9.2.2016 44

Vaihtoehtoiset rakenteet aliluokiksi A ::= B C D E => A ::= A1 A2 A1 ::= B C A2 ::= D E A A1 A2 B C D E Ohjelmistoarkkitehtuurit 2016 9.2.2016 45

Rekursiiviset rakenteet Statement ::= CompoundStatement AssignmentStatement CompoundStatement ::= { StatementList } StatementList ::= {Statement ; } Statement * AssignmentStatement CompoundStatement Rekursiokooste Ohjelmistoarkkitehtuurit 2016 9.2.2016 46

Esim. Script interpret() 1..* Action interpret() 1 Script ::= "SCRIPT" Action {";" Action} "END" Action ::= CondAction PrimAction CondAction ::= "IF" Expr "THEN" Action "END" PrimAction ::= identifier "(" Expr ")" Expr ::=... CondAction PrimAction Expr interpret() interpret() 1 1 val(): float 1 Identifier name(): String Ohjelmistoarkkitehtuurit 2016 9.2.2016 47

Tulkkiarkkitehtuurin edut ja ongelmat Edut: Ajoaikainen looginen suoritusympäristö omassa hallinnassa Tulkittavaa kieltä suhteellisen helppo muuttaa Kielen merkitystä suhteellisen helppo muuttaa Alla oleva ympäristö voidaan helposti vaihtaa Ongelmat: Suorituskyky (epäsuora, ei-natiivi suoritus; sisäisen esityksen muodostaminen) Tilankäyttö (ohjelman sisäinen esitys esim. Tulkki-mallilla voi vaatia paljon tilaa) Tulkkiosuuden toteutus ja suunnittelu, työläys, vaativuus (tulevaisuuden ennustaminen) Ohjelmistoarkkitehtuurit 2016 9.2.2016 48

Ääripäästä toiseen Hard-coding vs. soft-coding Ohjelmistoarkkitehtuurit 2016 9.2.2016 49

Yhteenvetoa Arkkitehtuuri ~ Domain-tietämys + Tekninen tietämys Domain-tietämys ~ domain-malli Tekninen tietämys ~ arkkitehtuurityylit, suunnittelumallit, yleiset hyvät käytännöt Ohjelmistoarkkitehtuurit 2016 9.2.2016 50

Kysyttävää?