ohjelmistoarkkitehtuurit kevät 2016 komponenttien...

73
Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien vuorovaikutus & suunnittelumallit Samuel Lahtinen http://www.cs.tut.fi/~ohar/ 1.2.2016 1 Ohjelmistoarkkitehtuurit 2016

Upload: others

Post on 23-Sep-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Ohjelmistoarkkitehtuurit

Kevät 2016

Komponenttien vuorovaikutus &

suunnittelumallit

Samuel Lahtinen

http://www.cs.tut.fi/~ohar/

1.2.2016 1Ohjelmistoarkkitehtuurit 2016

Page 2: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

4. Komponenttien

vuorovaikutus

2

• Roolirajapinnat

• Välittäjät

• Fasaadit

• Kutsun siirtäminen

• Edustajat

• Takaisinkutsut

• Tapahtumat

• Viestit

• Sovittimet

• Tehtaat

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 3: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Suunnittelumalleista yleisesti

31.2.2016Ohjelmistoarkkitehtuurit 2016

Page 4: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Toteutusriippuvuuksien

poistaminen rajapinnoilla

4

A B

A B

IB

A ei tunne

mitä

miten

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 5: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Rooliperustaiset rajapinnat

5

Client1

Server

Services

Client2

Client1

Server

Role1

Client2 Role2

Client1 käyttää Server:iä

eri roolissa ja siksi eri palveluja

kuin Client2

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 6: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Esimerkki

6

Button

VisualComponent

EventSource

1.2.2016Ohjelmistoarkkitehtuurit 2016

Vs. Qt

Qobject (eventit)-Qwidget-QabstractButton-QPushButton

Page 7: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

1.2.2016Ohjelmistoarkkitehtuurit 2016 7

Page 8: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Hienojakoiset roolirajapinnat

8

Asiakkaat Palvelun

tarjoajatRoolit

A

B

C

D

P

Q

X

Y

Z

P:n ”perinteinen” rajapinta

Q:n ”perinteinen” rajapinta

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 9: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Komponenttien

vuorovaikutuksen hallinta

9

Joukko keskenään kommunikoivia

komponentteja

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 10: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Komponenttien

vuorovaikutuksen hallinta

10

Ongelmia:• komponenttien väliset riippuvuudet mutkikkaita

ja vaikeita hallita

• jos jokin yhteistoiminta halutaan muuttaa,

joudutaan jokaista osallistujaa muuttamaan

• komponentteja ei voi käyttää helposti toisessa

yhteydessä

• Ohjelman toiminnallisuuden seuranta vaikeutuu

• Komponenttikaavion suhteet muistuttavat black

metal -bändin logoa/levynkantta (mikä bändi?)

• Dynaamiset kirjastot ja komponentit, vaikea

hallita jne.

1.2.2016Ohjelmistoarkkitehtuurit 2016

(ja tärkeänä vastauksena kysymykseen: kuvassa vähän siistitty versio laulu- ja soitantayhtye Venomin esikoislevyn kannesta,

Jokunen vuosi myöhemmin myös Pentagram niminen solistiyhtye koristeli Relentless-levynsä kanta lähes identtisellä taiteella.

Toki vastaavaa kuvitusta löytyy lähes jokatoiselta black metal-yhtyeeltä…)

Page 11: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Esimerkki komponenteista

11

ListBox

TextField Button

1.2.2016Ohjelmistoarkkitehtuurit 2016

File dialog Tooltip

Page 12: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Esimerkki

12

Ilmanlaadun

hallinta

Ikkunoiden

hallinta

Ilmastoinnin

hallinta

avaa

ikkuna

sulje

ilmastointi

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 13: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Riippuvuuksien keskittäminen:

Mediator

13

Etuja:

• vuorovaikutus omana

kokonaisuutena (välittäjä),

voidaan muuttaa tai räätälöidä

koskematta komponentteihin

• tekee komponentit riippumat-

tomiksi toisistaan

• yksinkertaistaa kommunikaatiota

(yksi-moneen, ei moni-moneen)

Ongelma: keskitetty kontrolli voi

kasvaa itsessään monimutkaiseksi

Keskitetään vuorovaikutuksen

kontrolli rajoittamalla komponenttien

vastuut ja ottamalla käyttöön uusi

komponentti, jonka vastuulla on

vuorovaikutuksen hallinta

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 14: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

1.2.2016Ohjelmistoarkkitehtuurit 2016 14

http://www.codeproject.com/Articles/186187/Mediator-Design-Pattern

Page 15: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Esimerkki

15

Dialog

Coordinator

ListBox

CoordinatorwidgetChange(Widget)

Widgetchanged()

TextField

Button

ButtonIenable()

TextFieldIsetText(str)

ListBoxIgetSelected(): str

Välittäjä

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 16: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Tyypillinen vuorovaikutus

16

:ListBox :DialogCoordinator :TextField :Button

widgetChange

getSelected

setText

enable

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 17: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Esimerkki

17

Ilmanlaadun

hallinta

Ikkunoiden

hallinta

Ilmastoinnin

hallinta

avaa

ikkunasulje

ilmastointi

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 18: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Kysyttävää?

181.2.2016Ohjelmistoarkkitehtuurit 2016

Page 19: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Kutsun siirtäminen (delegointi)

19

op B

op()

op B

op()

Bimp

imp

imp.opimp();

opimp()

palvelun

varsinainen

suorittajaB saa palvelupyynnön:

Voi olla erilaisia syitä:

- halutaan tehdä oheistoimintaa, joka ei näy palvelun pyytäjälle

- halutaan pystyä helposti vaihtamaan toteutus dynaamisesti

- halutaan muuttaa kutsumuotoa

- halutaan piilottaa varsinainen suorittaja

Yleinen perusmekanismi

monessa standardiratkaisussa

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 20: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Kutsun siirtäminen: esimerkki

20

Account

ManagerCustomer

Chargablediscount(int): int

CustomerSupportdiscount(int): int

KeyCustomer

Support

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 21: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Delegate esim. C#

1.2.2016Ohjelmistoarkkitehtuurit 2016 21

delegate osana kieltä, funktio-osoitin, delgaatti ja tapahtumien sitominen siihen jne.

http://www.csharp-station.com/Tutorial/CSharp/Lesson14

public class WorkerClass{

public delegate void LogHandler(string message);

public void process(LogHandler logHandler){

if (logHandler != null){

logHandler("Process() begin");}if (logHandler != null){

logHandler("Process() end");}

}}

public class TestApplication{

static void logger(string s){

Console.WriteLine(s);}

static void Main(string[] args){

WorkerClass myClass = new WorkerClass();WorkerClass.LogHandler myLogger = new WorkerClass.LogHandler(logger);myClass.process(myLogger);

}}

Page 22: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Mikä suunnittelumalli?

1.2.2016Ohjelmistoarkkitehtuurit 2016 22

Page 23: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Riippuvuuksien kuristaminen:

Fasadi (Facade)

23

alijärjestelmäalijärjestelmä

Fasaadi

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 24: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Fasadia

24

Luentojen aloittaminen (laitteisiin liittyvät asiat):

• Tarkasta puhelin, aseta äänettömälle jos äänellinen

• Räplää luentosalihallintaa, valitse valaistus ja kuvalähde ja käynnistä

tykkeilymoodi

• Kirjaudu luentosalin koneeseen

• Läppäri auki, kirjaudu sisään

• Avaa selain

• Kytke kamera, kytke mikkihärveli

• Pistä mikkihärveli pois äänettömästä tilasta

• Avaa Adobe Connect, kirjaudu sisään

• (Käynnistä uudelleen, kun Flash kaatuu)

• Käynnistä Connect myös luentosalikoneella

• Avaa molempiin koneisiin Slack, kirjaudu sisään, valitse luennot-kanava

• Kirjaudu google formsiin (etusivu, sposti, salasana…) *2

• Takaisin läppärille (kytke vga-piuha) & valitse extend to second screen

• Avaa Powerpoint ja käynnistä esitystila

• valitse Connectin kuvalähteeksi kakkosnäyttö, käynnistä esitys

• Varmista että kuva näkyy luentosalin koneella

• Valitse kamera, aktivoi se

• Valitse mikrofoni, aktivoi

• Aloita tallennus

• Aloita luento

…1.2.2016Ohjelmistoarkkitehtuurit 2016

Fasadin kanssa:

Aloita luento

Keskeytä luento

Jatka luentoa

Lopeta luento

tallennustenHallinta

pääsy

Echo/connect-

rajapintaan

Page 25: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Fasadi suunnittelumalli

25

• Käytetään antamaan yksinkertainen, useimmille käyttäjille

riittävä oletusliittymä monimutkaiseen alijärjestelmään,

tekemään korkeamman tason palveluita, joilla voi yhdistää

useampia toimintoja

• Fasadi ei kuitenkaan täysin piilota alijärjestelmän komponentteja

suoralta käytöltä

• Voidaan käyttää esimerkiksi kerrosarkkitehtuurissa antamaan

kullekin kerrokselle yksinkertainen sisääntulokohta (ja rajapinta)

• Vrt. Välittäjä: yksisuuntainen palvelu, tyypillisesti fasadi vain

hoitaa palvelukutsut oikealle komponentille/oikeille

komponenteille

• Fasadin käyttöä voidaan edelleen kaventaa roolirajapinnoilla (eri

fasadi eri käyttäjille)

• Fasadin perusideaa käytössä esim. MVC ja rajapinnat: esim.

kontrolleri hoitaa mallin kanssa kommunikoinnin, voi kutsua

usean eri osan palveluita

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 26: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Esimerkki

26

StudentFacade

registerStudent

removeStudent

getStudentInfo

StudyRegister

StudentRegister

PaymentSystemregStudentToCourse

removeStudentFromCourse

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 27: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Esimerkki: Sports tracker -

kopio

• Käyttäjälle ja käyttöliittymän suuntaan haluttuja toimintoja,

aloita, lopeta, pysäytä, treeniyhteenvedot

• Erilaisia alijärjestelmiä:

– Sijaintitieto, ajanotto/ajastus, datayhteydet, treenitiedot, autentikointi …

– Fasadirajapintaan toimintojen mukaiset palvelut, jotka hoitavat esim.

Aloita-osassa GPS:n päälle, karttapalvelun käynnistämisen, ajastuksen

aloittamisen, jne.

– Lopeta, pysäyttää ajastuksen, kerää tiedot karttaosiolta, pyrkii

käynnistämään datayhteyden, hoitaa autentinkoinnin ja lisää

treenitiedot palvelimelle

1.2.2016Ohjelmistoarkkitehtuurit 2016 27

Page 28: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Periytymisen toteutus kutsun

siirtämisellä

29

Car

Vehicle

parent

Commodity

printDescription-kutsu

printDescription:

{printName;

... }

”täydellinen" Car olio

self

parent

parent

1.2.2016Ohjelmistoarkkitehtuurit 2016

https://developer.mozilla.org/en/docs/Web/JavaScript/Inheritance_and_the_prototype_chain

http://www.sitepoint.com/simple-inheritance-javascript/

https://medium.com/javascript-scene/common-misconceptions-about-inheritance-in-javascript-d5d9bab29b0a#.cnacombkk

Page 29: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Periytymisen toteutus kutsun

siirtämisellä

30

”Täydellinen" Car olio

Car

Vehicle

parent

CommodityprintDescription-kutsu

printDescription:

{printName;

... }

self

parent

parent

Product

parent

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 30: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Komponenttiriippuvuuksien

poistaminen edustajalla

(proxy)

31

Edustaja: komponentti, joka edustaa toista komponenttia jossain

yhteydessä ilman, että komponentin asiakkaat tietävät tätä. Tyypillisesti

edustaja tekee palvelupyynnön yhteydessä jotain oheistoimintaa.

EdustajaAsiakasop op Palvelun

tarjoaja

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 31: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Sovelluksia

32

Kun halutaan estää asiakkaan suora pääsy resurssiin

•hajautetut järjestelmät

• viivästetty lataaminen (esim. oliokannat), ositettu lataaminen

• älykkäät osoittimet

•Turvallisuus, asiakkaiden varmentaminen

•Älykkäät edustajat (smart proxy), palvelun suorittajan älykäs

valinta

• ...

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 32: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Edustaja (Proxy)

suunnittelumalli

33

Client

Proxy

Servicesrequest()

Server

request()

...

actual.request()

actual

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 33: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

1.2.2016Ohjelmistoarkkitehtuurit 2016 34

Page 34: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Esimerkki: viivästetty lataaminen

35

if not loaded then

map = loadFromFile();

loaded = true

end;

map->getRoute()

varsinainen

getRoute

palveluNavigator

MapProxy

MapgetName()

getRoute(from,to)

getName

getRoute

CityMap

getName

getRoute

return mapName;

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 35: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Esimerkki: viivästetty lataaminen

36

varsinainen

kuvaViewer

Proxy

PicturegetPic()

applyEffect()

ready()

+getPic()

+applyEffect()

+ready()

SmallPic

+getPic()

+applyEffect()

1.2.2016Ohjelmistoarkkitehtuurit 2016

FinalPic

+getPic()

+applyEffect()

Page 36: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Erilaisia edustajia,

käyttötarkoituksia

37

• Virtual proxy: viivästetty lataaminen, jne. Toimii

välissä ja varmistaa, ettei raskaita operaatiota

käynnistellä turhaan

• Protection proxy: käyttäjä ei pääse käyttämään

suoraan palvelua tai resurssia, proxy välissä sisältää

esimerkiksi autentikointia

• Remote proxy: verkkoresurssien käyttö rajapinnan

kautta, proxy hoitaa yhteysjutut (esim. ohjaa kutsut

oikeaan paikkaan, tuo lisäturvallisuutta jne.)

(vertaa proxy palvelimet)

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 37: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Proxy vs. Mediator vs. Broker

• Proxy kätkee palvelun sen käyttäjältä (syitä…)

• Mediator, toimii keskitettynä yhteyksien hallitsijana

• Broker, kuten yllä, mutta käsitteellinen ero, resurssit

hajautettuja, voivat vaihdella paikkaa jne.

– Broker tietää mistä palvelut löytyvät

– Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

kirjastona, anna tähän liittyvä palvelu..

• Broker ja proxyt, adapterit jne. yhteistoimminnassa

• Useampia brokereita, voivat tuntea toisensa

1.2.2016Ohjelmistoarkkitehtuurit 2016 38

Page 38: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Broker

1.2.2016Ohjelmistoarkkitehtuurit 2016 39

Page 39: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Broker

1.2.2016Ohjelmistoarkkitehtuurit 2016 40

Page 40: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

1.2.2016Ohjelmistoarkkitehtuurit 2016 41

Page 41: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

1.2.2016Ohjelmistoarkkitehtuurit 2016 42

https://msdn.microsoft.com/en-us/library/ff648096.aspx

Page 42: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Kysyttävää?

431.2.2016Ohjelmistoarkkitehtuurit 2016

Page 43: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Riippuvuuksien poistaminen

takaisinkutsuilla

44

Takaisinkutsu

Palvelun tarjoajalta sen pyytäjälle kesken palvelun tuleva kutsu.

Tekniikka, jonka avulla palvelun pyytäjä voi saada kontrollin

kesken palvelun suorituksen.

Tavallisesti palvelu kuuluu johonkin yleiskäyttöiseen kirjastoon,

joka ei saa tulla riippuvaksi kirjastoa käyttävistä sovelluksista.

Takaisinkutsu mahdollistaa sovelluskohtaisen räätälöinnin

yleiskäyttöisille palveluille ilman, että ne tulevat riippuviksi

sovelluksista.

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 44: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Takaisinkutsu (Callback)

45

palvelun

kutsu

takaisinkutsu

kirjasto

sovellus

paluu

: Kirjasto : Sovellus

palvelun kutsu

takaisinkutsu

paluu

palvelun paluu

takaisin-

kutsu

sekvenssikaaviona:

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 45: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Takaisinkutsurajapinta

46

Engine

Car

EngineUserwarn(str)

setup()

warn(str)

...

PowerSourcestart()

stop()

setUser(EngineUser)

log.output("Oil pressure low");

myeng.stop();

run()

if (oilpressure<limit) {

user.warn();

...

myeng = new Engine();

myeng.setUser(this);

myeng.start();

Yleiskäyttöinen

Sovelluskohtainen

Takaisinkutsurajapinta

1.2.2016Ohjelmistoarkkitehtuurit 2016

HUOM! Oikeassa ajoneuvonohjausjärjestelmässä

moottorinohjaus jne. ovat omina erillisinä itsenäisinä fyysisinä ohjainyksikköinä (viestintä viesteillä väylän avulla)

Page 46: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Käytetään poikkeuksia?

47

Voidaanko poikkeuksilla saada periaatteessa aikaan

sama kuin takaisinkutsuilla?

A Ei koskaan

B Joskus

C Aina

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 47: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Poikkeuksilla

48

Engine

Car

setup()

warn(str)

...

PowerSourcestart() throws Oilpressure

stop()

setUser(EngineUser)

screen.output(str+": Oil pressure low");

myeng.stop();

start()…

if (oilpressure<limit) {

...

throw new Oilpressure();

}

...

setup(): ...

myeng = new Engine();

myeng.setUser(this);

try {

myeng.start();

} catch (Oilpressure op) {warn("...");}

Yleiskäyttöinen

Sovelluskohtainen

Erot: - ei takaisinkutsurajapintaa

- käyttävän yksikön (Car) tulee varautua

poikkeukseen

Edut: - yksinkertaisempi

- kirjastoyksikön ei tarvitse tietää mitään

käyttävän yksikön operaatioista (edes takaisin-

kutsurajapintaa)

Haitat: - kirjastoyksikkö ei voi jatkaa

tapahtuman käsittelyn jälkeen (tässä tosin

ei ilmeisesti tarvitsekaan)

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 48: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Kysyttävää?

491.2.2016Ohjelmistoarkkitehtuurit 2016

Page 49: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Riippuvuuksien vähentäminen

tapahtumien avulla

50

Tapahtuma on ohjelman ajoaikainen tietoalkio,

• jonka synnyttää jokin komponentti,

• jonka syntymiseen reagoi yksi tai useampi komponentti ja

• joka häviää sen jälkeen kun ei ole olemassa enää komponenttia,

jonka tulisi reagoida sen syntymiseen.

• Tapahtuman synnyttäjä ei tunne tapahtuman syntymään

reagoivia yksiköitä

• Tapahtumat poistavat näkyvän riippuvuuden, mutta eivät väärin käytettynä

muuta ohjelman toiminnallista riippuvuusrakenneta (toiminnan

ymmärtäminen ja muuttaminen voi olla vielä vaikeampaa)1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 50: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Perinteinen kutsu vs. tapahtuma

51

Palvelun

kutsuja

Palvelun

tarjoaja

Tapahtuma

Tapahtumaan

reagoivat

Tapahtuman

synnyttäjä

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 51: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Tapahtumat käyttöliittymissä

52

GUI

Sovelluslogiikka

Käyttäjän komennot Tilamuutokset

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 52: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Synkroninen takaisinkutsuihin

perustuva tapahtumankäsittely

53

Tapahtuman

aiheuttaja

rekisteröinti

ilmoitus tapahtumasta

(takaisinkutsu)

Reagoivat

yksiköt

Synkroninen =

tapahtuman aiheuttaja

odottaa tapahtuman käsittelyä

ennen kuin jatkaa.

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 53: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Asynkroninen tapahtumien

käsittely

54

• Mitä vaatimuksia verrattuna synkroniseen?

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 54: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Tarkkailija (Observer)

suunnittelumalli

55

SourceComp ObserverComp

Observerupdate(Event)

Sourceregister(Observer)

unregister(Observer)

obs src

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 55: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Tapahtumien käsittely Javassa:

Esimerkki

56

JMenuItem AppComp

ActionListeneractionPerformed(ActionEvent)

AbstractButtonaddActionListener(ActionListener)

obs src

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 56: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Tapahtumaesimerkki Qt:ssa

1.2.2016Ohjelmistoarkkitehtuurit 2016 57

QTimer *timer = new QTimer( this );

// takaisinkutsutyylillätimer->singleShot( timertime_.getTimeInMilliseconds(), this, SLOT( alarm() ) );

// yleisemmin tapahtumien yhdistelemisen avullaconnect( timer, SIGNAL( timeout() ), this, SLOT( alarm() ) );QObject::connect( QTimer, &QTimer::timeout, this, &MainWindow::alarm );

Mitä eroa näillä kahdella on? (jos esimerkiksi ajastus asetetaan uudestaan?)

Page 57: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Viestipohjainen kommunikointi

58

Komponentti 1 Komponentti 2

receive(Message m)

• Komponentit toteuttavat geneerisen viestin vastaanottorajapinnan (ja käyttävät sitä

suoraan tai viestinvälittäjän kautta)

• Komponentit kommunikoivat keskenään viestejä lähettämällä

• Viestien välittämisestä huolehtii usein erityinen komponentti (message dispatcher)

Viesti

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 58: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Rajapinnat vs. viestit

59

Palvelun

pyytäjä

Rajapinta

Viesti

Palvelun

tarjoaja

toteuttaa

Palvelun

tarjoaja

lukee ja

toteuttaa

Rajapinta kertoo mitä tehdään ja millä tiedolla, viesti voi kertoa mitä tahansa (mitä tehdään,

kuka tekee, millä tiedolla).

Viestinvälitysarkkitehtuurit,

palveluväylät (ESB),

Smalltalk

Komponentit,

Asiakas-palvelin,

Web palvelut (SOA),

C++, Java

func A(X…)

ACTION = A

PAR1 = X

Viestin

välittäjä

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 59: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Rajapintariippuvuuksien

poistaminen sovittimilla

60

Sovitin

Komponentti 1 Komponentti 2

Rajapinnan A mukainen

palvelupyyntö

Sovitin: palvelun pyytäjän ja tarjoajan välillä oleva ohjelmayksikkö,

joka tekee palvelun pyytäjän riippumattomaksi palvelun tarjoajan

rajapinnasta.

Rajapinnan B mukainen

palvelupyyntö

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 60: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Sovitin (Adapter) suunnittelumalli

61

Client

Adapter

AbstractServices

request()

Server

ConcreteServices

concRequest()

adaptee

request()...

adaptee.concRequest()

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 61: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Sovitin ja tapahtumat

62

Komponentti A Komponentti BSovitin

rekisteröinti

ilmoita

tapahtumasta

palvelu-

kutsu

1.2.2016Ohjelmistoarkkitehtuurit 2016

Sovittimien käyttö riippumattomien komponenttien tapahtumapohjaisessa kommunikoinnissa

Page 62: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Kysyttävää?

631.2.2016Ohjelmistoarkkitehtuurit 2016

Page 63: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Luontiriippuvuuksien

vähentäminen tehtaalla

Ongelma:

Miten ohjelmistoalusta tai yleiskäyttöiset komponentit

voivat luoda sovelluskohtaisia olioita/komponentti-

ilmentymiä tulematta riippuvaisiksi sovelluskohtaisista

luokista/komponenteista?

1.2.2016 64Ohjelmistoarkkitehtuurit 2016

Page 64: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Luontiriippuvuuksien

vähentäminen tehtaalla

65

Platform

AppFactory

Factorycreate(): Product

Productservice

AppProduct

<<create>>

AppInit

FactoryRegistryregister(Factory)

<<create>>

(alustus)

(käyttö)

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 65: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Yksinkertainen tehdas:

Tehdasmetodi (Factory Method)

suunnittelumalli

66

factoryMethod

anOperation

product = factoryMethod();

...

factoryMethod return new AppProduct();

Creator

ConcCreator

AppProduct

create

Product

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 66: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Esimerkki

67

createDocument()

newDocument()

openDocument()

doc = createDocument();

docs.add(doc);

doc.open();

createDocument() return new MyDocument;

DocManager

MyDocManager

create

use

Documentopen()

close()

MyDocument

open()

close()

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 67: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Ongelma: Miten varmistaa

yhdenmukaiset oliot?

68

Alusta

TAIMUTTA EI:

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 68: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Ratkaisu: yksi tehdasolio luo kaikki oliot

yhdenmukaisesti

69

Alusta

tehdasolio

luo

TwoDimFac

ThreeDimFac

ilmentymä

ilmentymä

tehdasluokka

factory class

käyttää

ShapeFac

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 69: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Abstrakti tehdas

suunnittelumalli

70

ProductA2

operA

ProductB2

operB

Alusta

Factory1

AbsFactorycreateProductA(): ProductA

createProductB(): ProductB

ProductA1

<<create>>

ProductB1

ProductA ProductB

operA operB

operA operB

Factory2

<<create>>

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 70: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Abstrakti tehdas (Abstract

Factory) suunnittelumalli:

Esimerkki

71

Sovellus-

alustaWinFactoryAbsFactory

createButton(): Button

createMenu(): Menu

WinButton

<<create>>

WinMenu

Button Menu

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 71: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Yhteenvetoa

72

• Roolirajapinnoilla täsmällisemmin tyypitetty arkkitehtuuri

• Välittäjän käyttö keskitettyyn vuorovaikutukseen

• Kutsun siirtäminen perusmekanismi monessa ratkaisussa

• Fasadi keskittää alijärjestelmän käytön

• Edustajalla voidaan liittää palveluun oheistoimintaa

• Takaisinkutsulla kontrolli palautetaan väliaikaisesti kutsujalle

• Tarkkailija yleinen ratkaisu tapahtumapohjaiseen vuorovaikutukseen

• Viestipohjainen kommunikointi löyhentää sidoksia

• Sovittimilla voidaan muuntaa rajapintoja

• Tehtailla voidaan luoda ilmentymiä, vaikka niiden tyyppiä ei tunneta

1.2.2016Ohjelmistoarkkitehtuurit 2016

Page 72: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Linkkejä ja luettavaa

• Iso kasa patterneja (Javalle): http://www.java-forums.org/ocmjea/57996-

tutorial-review-java-design-patterns-java-architect-exam.html

• Broker-mallista: Pattern-oriented Software architecture for dummies (luku

12)

• Mediator- ja viestinvälitysesimerkki Java Message Service

http://docs.oracle.com/javaee/6/tutorial/doc/bncdr.html

• Mediator, yksinkertainen esimerkkikoodi:

http://www.journaldev.com/1730/mediator-design-pattern-in-java-example-

tutorial

• Proxy pattern: http://www.oodesign.com/proxy-pattern.html

1.2.2016Ohjelmistoarkkitehtuurit 2016 73

Page 73: Ohjelmistoarkkitehtuurit Kevät 2016 Komponenttien ...ohar/materiaali2016/luento05_vuorovaikutus.pdf · – Voi joko suorittaa palvelut ja palauttaa tuloksen asiakkaalle tai toimia

Kysyttävää?

741.2.2016Ohjelmistoarkkitehtuurit 2016