Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Ohjelmistoarkkitehtuurit
Kevät 2016
Arkkitehtuurityylit vol 2
Samuel Lahtinen
http://www.cs.tut.fi/~ohar/
9.2.2016 1Ohjelmistoarkkitehtuurit 2016
Aikaisempaa & tänään
• Arkkitehtuurityylit
– Tuttua kamaa pipes & filters jne.
• Tänään viestinvälitys, asiakas-palvelin, tulkki…
9.2.2016Ohjelmistoarkkitehtuurit 2016 2
Viestinvälitysarkkitehtuurit
3
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
9.2.2016Ohjelmistoarkkitehtuurit 2016
Viestinvälitysarkkitehtuuri: perusidea
4
Viesti
3) päätä vastaanottaja(t)
ja välitä viesti sille/niille
1) luo viesti
4) vastaanota
rekisteröidyt
komponentitKomponenttien
yhteinen rajapinta:
receive(Message)
Viestinvälittäjä
rekisteröidyt
komponentit
2) lähetä välittäjälle
5) tulkitse/
prosessoi
viesti
9.2.2016Ohjelmistoarkkitehtuurit 2016
Rajapinnat vs. viestit
5
Palvelun
pyytäjä
Rajapinta
Viesti
Palvelun
tarjoaja
toteuttaa
Palvelun
tarjoaja
lukee
Palvelun
tarjoaja
Rajapinta kertoo mitä tehdään ja millä tiedolla, viesti voi kertoa mitä tahansa (mitä
tehdään, kuka tekee, millä tiedolla).
Viestin
välittäjä
Viestinvälitysarkkitehtuurit,
palveluväylät (ESB)
Komponentit,
Asiakas-palvelin,
Web palvelut (SOA),
C++, Java
func A(X…)
ACTION = A
PAR1 = X
9.2.2016Ohjelmistoarkkitehtuurit 2016
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
9.2.2016Ohjelmistoarkkitehtuurit 2016 6
Palveluperustainen
viestinvälitysarkkitehtuuri
7
Asiakas Viestinvälittäjä Palvelija
Palvelupyyntö Palvelupyyntö
Palvelun tulosPalvelun tulos
Viestinvälittäjä huolehtii siitä, että
tulos menee oikealle komponentille
9.2.2016Ohjelmistoarkkitehtuurit 2016
Esimerkki: Auton viestiväylä
8
moottorinohjausajotietokone
vaihdelaatikko
jarrut
CAN väylä (Controller Area Network)
9.2.2016Ohjelmistoarkkitehtuurit 2016
Auto ja johdotukset ennen
väylää
9.2.2016Ohjelmistoarkkitehtuurit 2016 9
Väylän kera
9.2.2016Ohjelmistoarkkitehtuurit 2016 10
Auton huoltotarkkailujärjestelmä:
komponenttikaavio
11
MessageDispatcher
send(Msg)
register(MsgType,Component)
ServiceComponentreceive(Msg)
BrakeAdapter
CANBusExaminer
Messenger
EngineMonitor
recordUsage()
getState()
Sovitin muuntaa viestin
palvelukutsuksi
EngineAdapter
returnState
9.2.2016Ohjelmistoarkkitehtuurit 2016
Viestinvälitys ja viestit
9.2.2016Ohjelmistoarkkitehtuurit 2016 12
• 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
9.2.2016Ohjelmistoarkkitehtuurit 2016 13
https://eewiki.net/download/attachments/27295747/CAN_Network.jpg?version=2&modificationDate=1382572042097&api=v2
CAN-viestit, esimerkki
9.2.2016Ohjelmistoarkkitehtuurit 2016 14
• 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)
Esihistoriaa, sulautettujen
ohjelmistojen
simulointiympäristö
9.2.2016Ohjelmistoarkkitehtuurit 2016 15
kattilakattila
Pohja-
venttiili
Pohja-
venttiili
Prosessin
ohjaus
Prosessin
ohjaus
Kattilan
ctrl
Kattilan
ctrl
lämmityslämmitys
lämmitinlämmitinanturianturi
Simulaation
ohjaus
Simulaation
ohjaus
Liitin (output)
Liitin (inpout)
laitelaite
prosessiprosessi
pumppupumppu
poltinpoltin
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
9.2.2016Ohjelmistoarkkitehtuurit 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)
9.2.2016Ohjelmistoarkkitehtuurit 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
9.2.2016Ohjelmistoarkkitehtuurit 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)
9.2.2016Ohjelmistoarkkitehtuurit 2016 19
Harjoitus
20
Topologia
Rajapinnat
Lineaarinen Keskitetty
Riippuu
palvelusta
1 2
Ei riipu
palvelusta
3 4
Täytä arkkitehtuurityylien nimillä
9.2.2016Ohjelmistoarkkitehtuurit 2016
Kysyttävää?
Malli-näkymä-ohjain arkkitehtuurit
(Model-View-Controller, MVC)
Interaktiivisten järjestelmien
arkkitehtuuriratkaisu, jolla käyttöliittymä
erotetaan sovelluslogiikasta.
9.2.2016Ohjelmistoarkkitehtuurit 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
9.2.2016Ohjelmistoarkkitehtuurit 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
9.2.2016Ohjelmistoarkkitehtuurit 2016 25
MVC vuorovaikutus
26
Controller Model View
handle-
Event
service
notify
updatedisplay
getData
suorita toiminto
9.2.2016Ohjelmistoarkkitehtuurit 2016
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ä)
9.2.2016Ohjelmistoarkkitehtuurit 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)
9.2.2016Ohjelmistoarkkitehtuurit 2016 29
Tulkkiarkkitehtuurin perusidea
30
Jokin toiminnallinen
kuvaus
(teksti, XML, graafinen,
ym.)
Tulkki
Syöte
Tuloste
Konkreettinen
suoritusalusta
Kielen määritys
noudattaa
toimintakuvauksen
sisäinen esitys
kutsuu
toteutus
9.2.2016Ohjelmistoarkkitehtuurit 2016
Esimerkki 1: Java
31
Java-ohjelma JVM
Ohjelman
syöte
Ohjelman
tulokset
Javan määritys
noudattaa
toimintakuvauksen
sisäinen esitys
kutsuu
Tavukoodi
Suoritusalusta
(C ympäristö)
toteutus
käännös
(C-ohj)
9.2.2016Ohjelmistoarkkitehtuurit 2016
Esimerkki 2: Taulukkolaskenta
32
Taulukkoskripti Skripti-
tulkki
Taulukon
alkion arvo
Laskettu
taulukko
Taulukko-
laskenta
Skriptikielen
määritys
noudattaatoteutus
sis.esitys
9.2.2016Ohjelmistoarkkitehtuurit 2016
Esimerkki 3: SQL kyselyt
33
SQL-kyselySQL-
tulkki
Kyselyn
tulos
Tietokanta
Sovellus
DBMS
9.2.2016Ohjelmistoarkkitehtuurit 2016
Esimerkki 4: Tulkitseva DSL
34
Sovelluksen kuvaus
DSL-kielellä Tulkki
Syöte
Tuloste
API
DSL-kielen
määritys
noudattaa
toimintakuvauksen
sisäinen esitys
kutsuuAlusta
DSL = Domain-Specific Language
toteutus
9.2.2016Ohjelmistoarkkitehtuurit 2016
Esimerkki 4: modattavissa
olevat pelit
35
Pelin data,
toimintaskriptitSkripti-
tulkki
Pelimoottori
Skriptikielen
Määritys
datatyypit
Häk-häk toteutus
sis.esitys
9.2.2016Ohjelmistoarkkitehtuurit 2016
Pelien modaus ja laajennokset
• Skyrim: http://www.creationkit.com/Main_Page
– työkalut karttojen, henkilöiden, tarinoiden, jne. luomiseen, Papyrus-
skriptit
– (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
9.2.2016Ohjelmistoarkkitehtuurit 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
9.2.2016Ohjelmistoarkkitehtuurit 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
9.2.2016Ohjelmistoarkkitehtuurit 2016 39
Tulkin suunnittelu: Tulkki-
suunnittelumalli (Interpreter)
40
InterpreterInterpreter
AbstractStruct
TerminalStruct CompositeStruct
interpret(rep) interpret(rep)
interpret(rep)
*
Ongelma: miten esittää tulkittava ohjelma olioina?
Mikä suunnittelumalli on samanlainen?
Ratkaisu:
9.2.2016Ohjelmistoarkkitehtuurit 2016
Tulkki-suunnittelumallin
johtaminen: Kielen rakenteiden
esitys luokkina
41
Ongelma: Miten esittää kielen rakenteet luokkina?
Esimerkiksi:
Script ::= "SCRIPT" Action {";" Action} "END"
Action ::= "IF" Expr "THEN" Action "END" | identifier "(" Expr ")”
Expr ::= ...
Luokkamalli?
9.2.2016Ohjelmistoarkkitehtuurit 2016
Välisymbolit ja rakenteiset
loppusymbolit esitetään luokkina
42
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)
9.2.2016Ohjelmistoarkkitehtuurit 2016
Mitä tuotossääntö merkitsee
luokkien kannalta?
43
Ehdotus: Tuotossääntö merkitsee sitä, että oikean puolen luokat ovat
osa-suhteessa vasemman puolen luokkiin.
A
A ::= B C tarkoittaa:
C
B
1
1
9.2.2016Ohjelmistoarkkitehtuurit 2016
Mitä tuotossääntö merkitsee
luokkien kannalta?
44
Ehdotus: Tuotossääntö merkitsee sitä, että oikean puolen luokat ovat
osa-suhteessa vasemman puolen luokkiin.
entä A ::= B C | D E ?
A
C
B
ED
0..1
0..1
0..10..1
9.2.2016Ohjelmistoarkkitehtuurit 2016
Vaihtoehtoiset rakenteet
aliluokiksi
45
A ::= B C | D E => A ::= A1 | A2 A1 ::= B C A2 ::= D E
A
B C
A2A1
D E
9.2.2016Ohjelmistoarkkitehtuurit 2016
Rekursiiviset rakenteet
46
Statement ::= CompoundStatement | AssignmentStatement
CompoundStatement ::= ”{” StatementList ”}”
StatementList ::= {Statement ”;”}
Statement
AssignmentStatement CompoundStatement
*
Rekursiokooste
9.2.2016Ohjelmistoarkkitehtuurit 2016
Esim.
47
Script
Action
1..*
CondAction PrimAction Expr
Identifier
val(): floatinterpret()interpret()
interpret()
interpret()
name(): String
1
1
1
1
Script ::= "SCRIPT" Action {";" Action} "END"
Action ::= CondAction | PrimAction
CondAction ::= "IF" Expr "THEN" Action "END"
PrimAction ::= identifier "(" Expr ")"
Expr ::= ...
9.2.2016Ohjelmistoarkkitehtuurit 2016
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)
9.2.2016Ohjelmistoarkkitehtuurit 2016 48
Ääripäästä toiseen
• Hard-coding vs. soft-coding
9.2.2016Ohjelmistoarkkitehtuurit 2016 49
Yhteenvetoa
50
Arkkitehtuuri ~ Domain-tietämys + Tekninen tietämys
Domain-tietämys ~ domain-malli
Tekninen tietämys ~ arkkitehtuurityylit, suunnittelumallit, yleiset hyvät
käytännöt
9.2.2016Ohjelmistoarkkitehtuurit 2016
Kysyttävää?