Roolirajapinnat Välittäjät Fasaadit Kutsun siirtäminen Edustajat Takaisinkutsut Tapahtumat Viestit Sovittimet Tehtaat

Samankaltaiset tiedostot
4. Komponenttien vuorovaikutus

4. Komponenttien vuorovaikutus

Ohjelmistoarkkitehtuurit kevät

Ohjelmistoarkkitehtuurit

Ohjelmistoarkkitehtuurit Johannes Koskinen.

4 Managing component interactions

Ohjelmistoarkkitehtuurit Kevät 2014

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

3. Komponentit ja rajapinnat

12. Kehysarkkitehtuurit

Kehyspohjainen ohjelmistokehitys

Ohjelmistoarkkitehtuurit kevät

Viestinvälitysarkkitehtuurit

Osittavat arkkitehtuurityylit. Palveluihin perustuvat arkkitehtuurityylit. Erikoisarkkitehtuurityylit

Ohjelmistoarkkitehtuurit kevät

Komponentit ja rajapinnat

Viestinvälitysarkkitehtuurit Lähtökohta:

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. VII Suunnittelumallit Adapter ja Composite

6. Arkkitehtuurityylit

Ohjelmistoarkkitehtuurit kevät

6. Arkkitehtuurityylit

Ohjelmistotekniikan menetelmät, suunnittelumalleja

Ohjelmistojen mallinnus Ohjelmistoarkkitehtuuri Harri Laine 1

Osio 4: Graafinen käyttöliittymä

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

Ohjelmistoarkkitehtuurit

Ohjelmistoarkkitehtuurit kevät

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2007

11. Kehysarkkitehtuurit

Graafisen käyttöliittymän ohjelmointi Syksy 2013

7 Viestipohjaisten yritysjärjestelmien suunnittelumallit

Rajapinta (interface)

Suunnittelumalleja, MVC. Juha Järvensivu 2008

TIE Ohjelmistojen suunnittelu

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

Ohjelmistoarkkitehtuurit

Ohjelmistoarkkitehtuurit Johannes Koskinen. Osittavat arkkitehtuurityylit

Ohjelmistojen mallintaminen, suunnittelumalleja

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

Olio-ohjelmointi Suunnittelumallit Proxy, Factory Method, Prototype ja Singleton. 1. Proxy (Edustaja)

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Osio 4: Graafinen käyttöliittymä

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. VIII Suunnittelumallit Observer ja State

Ohjelmistoarkkitehtuurit Kevät 2014 Arkkitehtuurityylit vol 2

Ohjelmistoarkkitehtuurit Komponentit Kevät 2014

Graafisen käyttöliittymän ohjelmointi

JAVA-OHJELMOINTI 3 op A274615

Ohjelmistotekniikan menetelmät, arkkitehtuuria ja rajapintoja

Oliosuunnittelu. Oliosuunnittelu

Graafinen käyttöliittymä, osa 1

Java-API, rajapinnat, poikkeukset, UML,...

Web Services tietokantaohjelmoinnin perusteet

T Henkilökohtainen harjoitus: FASTAXON

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

Ohjelmistojen mallintaminen, sekvenssikaaviot

3. Komponentit ja rajapinnat

Tapahtumapohjainen ohjelmointi

Olio-ohjelmointi Käyttöliittymä

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2008

Ohjelmistoarkkitehtuurit, syksy

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Ohjelmistoarkkitehtuurit Komponentit Kevät 2016

Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:

Harjoitustehtävät viikolle 42

Integrointi. Ohjelmistotekniikka kevät 2003

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

Harjoitustyö (TKO_2023)

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

3. Software components and interfaces

Palveluperustaiset arkkitehtuurityylit

Olio-ohjelmointi Suunnittelumallit Adapter ja Composite. 1. Adapter

Ohjelmistoarkkitehtuurit. Kevät

Ohjelmistoarkkitehtuurit

Ohjelmistoarkkitehtuurit. Kevät

Ohjelmistotuotanto. Luento

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

JavaRMI 1 JAVA RMI. Rinnakkaisohjelmoinnin projekti 1 osa C Tekijät: Taru Itäpelto-Hu Jaakko Nissi Mikko Ikävalko

18. Abstraktit tietotyypit 18.1

Java ja grafiikka. Ville Sundberg

Olio-ohjelmointi Javalla

A TIETORAKENTEET JA ALGORITMIT

15. Ohjelmoinnin tekniikkaa 15.1

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. X Poikkeusten käsittelystä

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

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

JReleaser Yksikkötestaus ja JUnit. Mikko Mäkelä

Luento 6. T Ohjelmoinnin jatkokurssi T1 & T Ohjelmoinnin jatkokurssi L1. Luennoitsija: Otto Seppälä

Microsoft Visual Studio 2005

TIE Ohjelmistojen suunnittelu

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

OHJ-5010 Hajautettujen järjestelmien perusteet

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

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

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

Ohjelmistojen mallintaminen Olioiden yhteistyö Harri Laine 1

Transkriptio:

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

Toteutusriippuvuuksien poistaminen rajapinnoilla A B A ei tunne A IB B miten mitä Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 2

Rooliperustaiset rajapinnat Client1 Services Server Client1 käyttää Server:iä eri roolissa ja siksi eri palveluja kuin Client2 Client2 Client1 Role1 Server Client2 Role2 Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 3

Esimerkki VisualComponent Button EventSource Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 4

Hienojakoiset roolirajapinnat Asiakkaat X Y Z Roolit A B C D Palvelun tarjoajat P:n perinteinen rajapinta P Q Q:n perinteinen rajapinta Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 5

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ä Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 6

Esimerkki Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 7

Esimerkki Ilmanlaadun hallinta avaa ikkuna Ikkunoiden hallinta sulje ilmastointi Ilmastoinnin hallinta Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 8

Riippuvuuksien keskittäminen: Välittäjä (Mediator) Keskitetään vuorovaikutuksen kontrolli rajoittamalla komponenttien vastuut ja ottamalla käyttöön uusi komponentti, jonka vastuulla on vuorovaikutuksen hallinta Etuja: vuorovaikutus omana kokonaisuutena (välittäjä), voidaan muuttaa tai räätälöidä koskematta komponentteihin tekee komponentit riippumattomiksi toisistaan yksinkertaistaa kommunikaatiota (yksi-moneen, ei moni-moneen) Ongelma: keskitetty kontrolli voi kasvaa itsessään monimutkaiseksi Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 9

Coordinator widgetchange(widget) Esimerkki ListBox ListBoxI getselected(): str Dialog Coordinator Välittäjä TextField TextFieldI settext(str) Widget changed() Button ButtonI enable() Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 10

Tyypillinen vuorovaikutus ListBox DialogCoordinator TextField Button widgetchange getselected settext enable Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 11

Esimerkki Ilmanlaadun hallinta avaa ikkuna sulje ilmastointi Ikkunoiden hallinta Ilmastoinnin hallinta Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 12

Kutsun siirtäminen (delegointi) Yleinen perusmekanismi monessa standardiratkaisussa B saa palvelupyynnön: palvelun varsinainen suorittaja Bimp opimp() imp op op() B op op() B 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 imp.opimp(); Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 13

Kutsun siirtäminen: esimerkki Chargable discount(int): int CustomerSupport discount(int): int Account Manager Customer KeyCustomer Support Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 14

Riippuvuuksien kuristaminen: Fasaadi (Facade) Fasaadi alijärjestelmä alijärjestelmä Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 15

Fasaadi suunnittelumalli 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 Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 16

Esimerkki StudyRegister registerstudent unregisterstudent getstudentinfo StudentFacade StudentRegister regstudentforcourse unregstudentforcourse PaymentSystem Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 17

Periytymisen toteutus kutsun siirtämisellä täydellinen" Car olio printdescription-kutsu self Car parent Vehicle parent Commodity parent printdescription: {printname;... } Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 18

Periytymisen toteutus kutsun siirtämisellä Täydellinen" Car olio printdescription-kutsu self Car parent Vehicle parent Product parent Commodity parent printdescription: {printname;... } Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 19

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 Asiakas op Edustaja op Varsinainen komponentti Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 20

Sovelluksia hajautetut järjestelmät (esim. EJB) viivästetty lataaminen (esim. oliokannat) älykkäät osoittimet... Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 21

Edustaja (Proxy) suunnittelumalli Client Services request()... actual.request() Proxy request() actual Server Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 22

Esimerkki: viivästetty lataaminen Navigator Map getname() getroute(from,to) varsinainen getroute palvelu return mapname; MapProxy CityMap if not loaded then map = loadfromfile(); loaded = true end; map->getroute() getname getroute getname getroute Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 23

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. Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 24

Takaisinkutsu (Callback) kirjasto sekvenssikaaviona: : Kirjasto : Sovellus palvelun kutsu palvelun kutsu paluu takaisinkutsu takaisinkutsu paluu palvelun paluu sovellus takaisinkutsu Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 25

Takaisinkutsurajapinta EngineUser warn(str) Takaisinkutsurajapinta if (oilpressure<limit) { user.warn();... run() Engine myeng = new Engine(); myeng.setuser(this); myeng.start(); PowerSource start() stop() setuser(engineuser) Car setup() warn(str)... Yleiskäyttöinen Sovelluskohtainen log.output("oil pressure low"); myeng.stop(); Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 26

Käytetään poikkeuksia? Voidaanko poikkeuksilla saada periaatteessa aikaan sama kuin takaisinkutsuilla? A Ei koskaan B Joskus C Aina Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 27

Poikkeuksilla Engine run() if (oilpressure<limit) {... throw new Oilpressure(); }... PowerSource start() throws Oilpressure stop() setuser(engineuser) setup():... myeng = new Engine(); myeng.setuser(this); try { myeng.start(); } catch (Oilpressure op) {warn("...");} Erot: Edut: Haitat: Yleiskäyttöinen Car setup() warn(str)... - ei takaisinkutsurajapintaa - käyttävän yksikön (Car) tulee varautua poikkeukseen - yksinkertaisempi - kirjastoyksikön ei tarvitse tietää mitään käyttävän yksikön operaatioista (edes takaisinkutsurajapintaa) - kirjastoyksikkö ei voi jatkaa tapahtuman käsittelyn jälkeen (tässä tosin ei ilmeisesti tarvitsekaan) Sovelluskohtainen log.output(str+": Oil pressure low"); myeng.stop(); Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 28

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ä Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 29

Palvelun kutsuja Perinteinen kutsu vs. tapahtuma Tapahtuman synnyttäjä Palvelun tarjoaja Tapahtuma Tapahtumaan reagoivat Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 30

Tapahtumat käyttöliittymissä GUI Käyttäjän komennot Tilamuutokset Sovelluslogiikka Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 31

Synkroninen takaisinkutsuihin perustuva tapahtumankäsittely rekisteröinti Reagoivat yksiköt Tapahtuman aiheuttaja ilmoitus tapahtumasta (takaisinkutsu) Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 32

Tarkkailija (Observer) suunnittelumalli Observer update(event) SourceComp obs src ObserverComp Source register(observer) unregister(observer) Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 33

Tapahtumien käsittely Javassa: Esimerkki ActionListener actionperformed(actionevent) JMenuItem obs src AppComp AbstractButton addactionlistener(actionlistener) Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 34

Rajapintariippuvuuksien poistaminen sovittimilla Rajapinnan A mukainen palvelupyyntö Sovitin Rajapinnan B mukainen Komponentti 1 palvelupyyntö Komponentti 2 Sovitin: palvelun pyytäjän ja tarjoajan välillä oleva ohjelmayksikkö, joka tekee palvelun pyytäjän riippumattomaksi palvelun tarjoajan rajapinnasta. Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 35

Sovitin (Adapter) suunnittelumalli Client AbstractServices request() ConcreteServices concrequest()... adaptee.concrequest() Adapter request() adaptee Server Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 36

Esimerkki: BeanBox (Sun) Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 37

Sovittimien käyttö riippumattomien komponenttien tapahtumapohjaisessa kommunikoinnissa rekisteröinti ilmoita tapahtumasta palvelukutsu Komponentti A Sovitin Komponentti B Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 38

BeanBox: Java toteutus 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(); } Kun mouse-click tapahtuma tulee, aktivoidaan stopjuggling -operaatio } private sunw.demo.juggler.juggler target; Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 39

Luontiriippuvuuksien vähentäminen tehtaalla FactoryRegistry register(factory) AppInit Factory create(): Product AppFactory <<create>> (alustus) Platform <<create>> (käyttö) Product service AppProduct Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 40

Yksinkertainen tehdas: Tehdasmetodi (Factory Method) suunnittelumalli Product Creator factorymethod anoperation product = factorymethod();... AppProduct create ConcCreator factorymethod return new AppProduct(); Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 41

Esimerkki <<interface>> Document open() close() use DocManager createdocument() newdocument() opendocument() doc = createdocument(); docs.add(doc); doc.open(); MyDocument open() close() create MyDocManager createdocument() return new MyDocument; Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 42

Ongelma: Miten varmistaa yhdenmukaiset oliot? Alusta TAI MUTTA EI: Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 43

ShapeFac Ratkaisu: yksi tehdasolio luo kaikki oliot yhdenmukaisesti tehdasluokka TwoDimFac ilmentymä tehdasolio käyttää Alusta luo ilmentymä ThreeDimFac factory class Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 44

Abstrakti tehdas suunnittelumalli AbsFactory createproducta(): ProductA createproductb(): ProductB ProductA opera ProductA2 Alusta ProductB operb ProductB2 Factory1 <<create>> Factory2 <<create>> opera ProductA1 ProductB1 operb opera operb Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 45

Abstrakti tehdas (Abstract Factory) suunnittelumalli: Esimerkki Sovellusalusta AbsFactory createbutton(): Button createmenu(): Menu WinFactory Button Menu <<create>> WinButton WinMenu Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 46

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 kutsujalle Tarkkailija yleinen ratkaisu tapahtumapohjaiseen vuorovaikutukseen Sovittimilla voidaan muuntaa rajapintoja Tehtailla voidaan luoda ilmentymiä, vaikka niiden tyyppiä ei tunneta Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 47