4. komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/ohar4 vuorovaikutus.pdfvoidaan...

49
Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 1 Roolirajapinnat Välittäjät Fasaadit Kutsun siirtäminen Edustajat Takaisinkutsut Tapahtumat Viestit Sovittimet Tehtaat 4. Komponenttien vuorovaikutus

Upload: vuongquynh

Post on 01-Apr-2018

220 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 1

• Roolirajapinnat

• Välittäjät

• Fasaadit

• Kutsun siirtäminen

• Edustajat

• Takaisinkutsut

• Tapahtumat

• Viestit

• Sovittimet

• Tehtaat

4. Komponenttien vuorovaikutus

Page 2: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 2

A B

A B

IB

Toteutusriippuvuuksien poistaminen rajapinnoilla

A ei tunne

mitä

miten

Page 3: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 3

Client1

Server

Services

Client2

Rooliperustaiset rajapinnat

Client1

Server

Role1

Client2 Role2

Client1 käyttää Server:iä

eri roolissa ja siksi eri palveluja

kuin Client2

Page 4: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 4

Esimerkki

Button

VisualComponent

EventSource

Page 5: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 5

Hienojakoiset roolirajapinnat

Asiakkaat Palvelun

tarjoajatRoolit

A

B

C

D

P

Q

X

Y

Z

P:n ”perinteinen” rajapinta

Q:n ”perinteinen” rajapinta

Page 6: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 6

Komponenttien vuorovaikutuksen hallinta

Joukko keskenään kommunikoivia

komponentteja

Ongelmia:• komponenttien väliset riippuvuudet

mutkikkaita ja vaikeita hallita

• jos jokin yhteistoiminta halutaan muuttaa,

joudutaan jokaista osallistujaa muuttamaan

• komponentteja ei voi käyttää toisessa

yhteydessä

Page 7: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 7

Esimerkki

Page 8: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 8

Esimerkki

Ilmanlaadun

hallinta

Ikkunoiden

hallinta

Ilmastoinnin

hallinta

avaa

ikkuna

sulje

ilmastointi

Page 9: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 9

Riippuvuuksien keskittäminen: Välittäjä (Mediator)

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

Page 10: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 10

Esimerkki

Dialog

Coordinator

ListBox

CoordinatorwidgetChange(Widget)

Widgetchanged()

TextField

Button

ButtonIenable()

TextFieldIsetText(str)

ListBoxIgetSelected(): str

Välittäjä

Page 11: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 11

Tyypillinen vuorovaikutus

ListBox DialogCoordinator TextField Button

widgetChange

getSelected

setText

enable

Page 12: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 12

Esimerkki

Ilmanlaadun

hallinta

Ikkunoiden

hallinta

Ilmastoinnin

hallinta

avaa

ikkunasulje

ilmastointi

Page 13: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 13

Kutsun siirtäminen (delegointi)

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

Page 14: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 14

Kutsun siirtäminen: esimerkki

Account

ManagerCustomer

Chargablediscount(int): int

CustomerSupportdiscount(int): int

KeyCustomer

Support

Page 15: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka

Riippuvuuksien kuristaminen: Fasaadi (Facade)

15

alijärjestelmäalijärjestelmä

Fasaadi

Page 16: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka

Fasaadi suunnittelumalli

16

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

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

• Fasaadi 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 fasaadi vain

siirtää kutsun oikealle komponentille (tai mahdollisesti useille

komponenteille)

• Fasaadin käyttöä voidaan edelleen kaventaa roolirajapinnoilla

Page 17: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka

Esimerkki

17

StudentFacade

registerStudent

unregisterStudent

getStudentInfo

StudyRegister

StudentRegister

PaymentSystemregStudentForCourse

unregStudentForCourse

Page 18: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 18

Car

Vehicle

parent

Commodity

printDescription-kutsu

printDescription:

{printName;

... }

”täydellinen" Car olio

Periytymisen toteutus kutsun siirtämisellä

self

parent

parent

Page 19: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 19

”Täydellinen" Car olio

Car

Vehicle

parent

CommodityprintDescription-kutsu

printDescription:

{printName;

... }

Periytymisen toteutus kutsun siirtämisellä

self

parent

parent

Product

parent

Page 20: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 20

Komponenttiriippuvuuksien poistaminen

edustajalla

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

EdustajaAsiakasVarsinainen

komponentti

op op

Page 21: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 21

Sovelluksia

• hajautetut järjestelmät (esim. EJB)

• viivästetty lataaminen (esim. oliokannat)

• älykkäät osoittimet

• ...

Page 22: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 22

Edustaja (Proxy) suunnittelumalli

Client

Proxy

Servicesrequest()

Server

request()

...

actual.request()

actual

Page 23: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 23

Esimerkki: viivästetty lataaminen

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;

Page 24: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 24

Riippuvuuksien poistaminen takaisinkutsuilla

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.

Page 25: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 25

Takaisinkutsu (Callback)

palvelun

kutsu

takaisinkutsu

kirjasto

sovellus

paluu

: Kirjasto : Sovellus

palvelun kutsu

takaisinkutsu

paluu

palvelun paluu

takaisin-

kutsu

sekvenssikaaviona:

Page 26: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 26

Takaisinkutsurajapinta

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

Page 27: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 27

Käytetään poikkeuksia?

Voidaanko poikkeuksilla saada periaatteessa aikaan

sama kuin takaisinkutsuilla?

A Ei koskaan

B Joskus

C Aina

Page 28: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 28

Engine

Car

setup()

warn(str)

...

PowerSourcestart() throws Oilpressure

stop()

setUser(EngineUser)

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

myeng.stop();

run()…

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)

Poikkeuksilla

Page 29: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 29

Riippuvuuksien vähentäminen tapahtumien avulla

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ä

Page 30: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 30

Perinteinen kutsu vs. tapahtuma

Palvelun

kutsuja

Palvelun

tarjoaja

Tapahtuma

Tapahtumaan

reagoivat

Tapahtuman

synnyttäjä

Page 31: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 31

Tapahtumat käyttöliittymissä

GUI

Sovelluslogiikka

Käyttäjän komennot Tilamuutokset

Page 32: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 32

Synkroninen takaisinkutsuihin perustuva

tapahtumankäsittely

Tapahtuman

aiheuttaja

rekisteröinti

ilmoitus tapahtumasta

(takaisinkutsu)

Reagoivat

yksiköt

Page 33: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 33

Tarkkailija (Observer) suunnittelumalli

SourceComp ObserverComp

Observerupdate(Event)

Sourceregister(Observer)

unregister(Observer)

obs src

Page 34: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 34

Tapahtumien käsittely Javassa: Esimerkki

JMenuItem AppComp

ActionListeneractionPerformed(ActionEvent)

AbstractButtonaddActionListener(ActionListener)

obs src

Page 35: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka

Viestipohjainen kommunikointi

35

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

Page 36: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 36

Rajapinnat vs. viestit

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ä

Page 37: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 37

Rajapintariippuvuuksien poistaminen sovittimilla

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ö

Page 38: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 38

Sovitin (Adapter) suunnittelumalli

Client

Adapter

AbstractServices

request()

Server

ConcreteServices

concRequest()

adaptee

request()

...

adaptee.concRequest()

Page 39: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 39

Esimerkki: BeanBox (Sun)

Page 40: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 40

Sovittimien käyttö riippumattomien komponenttien

tapahtumapohjaisessa kommunikoinnissa

Komponentti A Komponentti BSovitin

rekisteröinti

ilmoita

tapahtumasta

palvelu-

kutsu

Page 41: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 41

BeanBox: Java toteutus

Kun ”mouse-click” tapahtuma tulee,

aktivoidaan ”stopJuggling” -operaatio

generoitu sovitin-luokka:

public class ___Hookup_1734b2d565

implements java.awt.event.ActionListener,

java.io.Serializable {

public void setTarget(

sunw.demo.juggler.Juggler t) {

target = t;

}

public void actionPerformed(

java.awt.event.ActionEvent arg0) {

target.stopJuggling();

}

private

sunw.demo.juggler.Juggler target;

}

Page 42: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 42

Luontiriippuvuuksien vähentäminen tehtaalla

Platform

AppFactory

Factorycreate(): Product

Productservice

AppProduct

<<create>>

AppInit

FactoryRegistryregister(Factory)

<<create>>

(alustus)

(käyttö)

Page 43: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 43

Yksinkertainen tehdas: Tehdasmetodi

(Factory Method) suunnittelumalli

factoryMethod

anOperation

product = factoryMethod();

...

factoryMethod return new AppProduct();

Creator

ConcCreator

AppProduct

create

Product

Page 44: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 44

Esimerkki

createDocument()

newDocument()

openDocument()

doc = createDocument();

docs.add(doc);

doc.open();

createDocument() return new MyDocument;

DocManager

MyDocManager

create

use

Documentopen()

close()

MyDocument

open()

close()

Page 45: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 45

Ongelma: Miten varmistaa yhdenmukaiset

oliot?

Alusta

TAIMUTTA EI:

Page 46: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 46

Ratkaisu: yksi tehdasolio luo kaikki oliot

yhdenmukaisesti

Alusta

tehdasolio

luo

TwoDimFac

ThreeDimFac

ilmentymä

ilmentymä

tehdasluokka

factory class

käyttää

ShapeFac

Page 47: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 47

ProductA2

operA

ProductB2

operB

Abstrakti tehdas suunnittelumalli

Alusta

Factory1

AbsFactorycreateProductA(): ProductA

createProductB(): ProductB

ProductA1

<<create>>

ProductB1

ProductA ProductB

operA operB

operA operB

Factory2

<<create>>

Page 48: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 48

Abstrakti tehdas (Abstract Factory)

suunnittelumalli: Esimerkki

Sovellus-

alustaWinFactoryAbsFactory

createButton(): Button

createMenu(): Menu

WinButton

<<create>>

WinMenu

Button Menu

Page 49: 4. Komponenttien vuorovaikutus - cs.tut.fiohar/luennot/luennot2010/Ohar4 Vuorovaikutus.pdfvoidaan muuttaa tai räätälöidä koskematta komponentteihin •tekee komponentit riippumat-

Ohjelmistoarkkitehtuurit Syksy 2010 TTY Ohjelmistotekniikka 49

Yhteenvetoa

• Roolirajapinnoilla täsmällisemmin tyypitetty arkkitehtuuri

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

• Kutsun siirtäminen perusmekanismi monessa ratkaisussa

• Fasaadi 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