4. Komponenttien vuorovaikutus

Samankaltaiset tiedostot
4. Komponenttien vuorovaikutus

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

Ohjelmistoarkkitehtuurit kevät

Ohjelmistoarkkitehtuurit

Ohjelmistoarkkitehtuurit Johannes Koskinen.

4 Managing component interactions

Ohjelmistoarkkitehtuurit Kevät 2014

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Kehyspohjainen ohjelmistokehitys

3. Komponentit ja rajapinnat

12. Kehysarkkitehtuurit

Ohjelmistoarkkitehtuurit kevät

Ohjelmistoarkkitehtuurit kevät

Komponentit ja rajapinnat

Viestinvälitysarkkitehtuurit

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

Viestinvälitysarkkitehtuurit Lähtökohta:

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

Osio 4: Graafinen käyttöliittymä

Ohjelmistotekniikan menetelmät, suunnittelumalleja

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2007

11. Kehysarkkitehtuurit

Ohjelmistoarkkitehtuurit kevät

Osittavat arkkitehtuurityylit. Palveluihin perustuvat arkkitehtuurityylit. Erikoisarkkitehtuurityylit

Rajapinta (interface)

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

Ohjelmistojen mallinnus Ohjelmistoarkkitehtuuri Harri Laine 1

6. Arkkitehtuurityylit

Ohjelmistojen mallintaminen, suunnittelumalleja

Ohjelmistoarkkitehtuurit

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Suunnittelumalleja, MVC. Juha Järvensivu 2008

TIE Ohjelmistojen suunnittelu

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

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

JAVA-OHJELMOINTI 3 op A274615

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

Osio 4: Graafinen käyttöliittymä

Graafisen käyttöliittymän ohjelmointi

Web Services tietokantaohjelmoinnin perusteet

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

Oliosuunnittelu. Oliosuunnittelu

Ohjelmistojen mallintaminen, sekvenssikaaviot

3. Komponentit ja rajapinnat

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

Graafinen käyttöliittymä, osa 1

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

Ohjelmistoarkkitehtuurit Komponentit Kevät 2014

T Henkilökohtainen harjoitus: FASTAXON

Ohjelmistoarkkitehtuurit kevät

Ohjelmistoarkkitehtuurit Kevät 2014 Arkkitehtuurityylit vol 2

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Tapahtumapohjainen ohjelmointi

Olio-ohjelmointi Käyttöliittymä

7 Viestipohjaisten yritysjärjestelmien suunnittelumallit

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2008

Java ja grafiikka. Ville Sundberg

Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:

6. Arkkitehtuurityylit

Harjoitustyö (TKO_2023)

Ohjelmistoarkkitehtuurit

Ohjelmistoarkkitehtuurit Johannes Koskinen. Osittavat arkkitehtuurityylit

3. Software components and interfaces

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

Ohjelmistoarkkitehtuurit, syksy

Olio-ohjelmointi Suunnittelumallit Adapter ja Composite. 1. Adapter

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

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

18. Abstraktit tietotyypit 18.1

Olio-ohjelmointi Javalla

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

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

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

Ohjelmistotekniikan menetelmät, arkkitehtuuria ja rajapintoja

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

TIE Ohjelmistojen suunnittelu

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

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

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

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

Palveluperustaiset arkkitehtuurityylit

A TIETORAKENTEET JA ALGORITMIT

Ohjelmistoarkkitehtuurit Komponentit Kevät 2016

Ohjelmistoarkkitehtuurit. Kevät

15. Ohjelmoinnin tekniikkaa 15.1

14. Poikkeukset 14.1

Ohjelmoinnin peruskurssien laaja oppimäärä

815338A Ohjelmointikielten periaatteet

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

Ohjelmistoarkkitehtuurit. Kevät

Delegaatit ja tapahtumakäsittelijät

TIE Ohjelmistojen suunnittelu

14. Poikkeukset 14.1

Microsoft Visual Studio 2005

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

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

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Solidity älysopimus ohjelmointi. Sopimus suuntautunut ohjelmointi

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

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

Transkriptio:

4. Komponenttien vuorovaikutus Roolirajapinnat Välittäjät Kutsun siirtäminen Edustajat Takaisinkutsut Tapahtumat Sovittimet Tehtaat 1

Toteutusriippuvuuksien poistaminen rajapinnoilla A B A ei tunne A IB B miten mitä 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 3

Esimerkki VisualComponent Button EventSource 4

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

Komponenttien vuorovaikutuksen hallinta välittäjällä 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ä 6

Esimerkki 7

Esimerkki Ilmanlaadun hallinta avaa ikkuna Ikkunoiden hallinta sulje ilmastointi Ilmastoinnin hallinta 8

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 9

Coordinator widgetchange(widget) Esimerkki ListBox ListBoxI getselected(): str Dialog Coordinator TextField TextFieldI settext(str) Widget changed() Button ButtonI enable() 10

Tyypillinen vuorovaikutus ListBox DialogCoordinator TextField Button widgetchange getselected settext enable 11

Esimerkki Ilmanlaadun hallinta avaa ikkuna sulje ilmastointi Ikkunoiden hallinta Ilmastoinnin hallinta 12

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

Kutsun siirtäminen: esimerkki Chargable discount(int): int CustomerSupport discount(int): int Account Manager Customer KeyCustomer Support 14

Periytymisen toteutus kutsun siirtämisell misellä Täydellinen" Car olio printdescription self Car parent Vehicle parent Commodity parent printdescription: {printname;... } 15

Periytymisen toteutus kutsun siirtämisell misellä Täydellinen" Car olio printdescription self Car parent Vehicle parent Product parent Commodity parent printdescription: {printname;... } 16

Komponenttiriippuvuuksien poistaminen edustajalla Edustaja: komponentti, joka edustaa toista komponenttia jossain yhteydessä ilman, että komponentin asiakkaat tietävät tätä (edustajaa käytetään kuten varsinaista komponenttia). Asiakas op Edustaja op Varsinainen komponentti 17

Sovelluksia hajautetut järjestelmät (esim. EJB) viivästetty lataaminen (esim. oliokannat) älykkäät osoittimet... 18

Edustaja (Proxy) suunnittelumalli Client Services request()... actual.request() Proxy request() actual Server 19

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 20

Riippuvuuksien poistaminen takaisinkutsuilla Takaisinkutsu 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. 21

Takaisinkutsu (Callback) kirjasto sekvenssikaaviona: : Kirjasto : Sovellus palvelun kutsu palvelun kutsu paluu takaisinkutsu takaisinkutsu paluu palvelun paluu sovellus takaisinkutsu 22

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(); 23

Käytetään n poikkeuksia? Voidaanko poikkeuksilla saada periaatteessa aikaan sama kuin takaisinkutsuilla? A Ei koskaan B Joskus harvoin C Usein D Aina 24

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(); 25

Riippuvuuksien vähentv hentäminen tapahtumien avulla Tapahtuma on ohjelman ajoaikainen tietoalkio, jonka synnyttää jokin komponentti, jolla on oma nimetty esitysmuotonsa ohjelmassa, 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ä 26

Palvelun kutsuja Perinteinen kutsu vs. tapahtuma Tapahtuman synnyttäjä Palvelun tarjoaja Tapahtuma Tapahtumaan reagoivat 27

Tapahtumat käyttk yttöliittymissä GUI Käyttäjän komennot Tilamuutokset Sovelluslogiikka 28

Synkroninen takaisinkutsuihin perustuva tapahtumankäsittely rekisteröinti Reagoivat yksiköt Tapahtuman aiheuttaja ilmoitus tapahtumasta (takaisinkutsu) 29

Tarkkailija (Observer) suunnittelumalli Observer update(event) SourceComp obs src ObserverComp Source register(observer) unregister(observer) 30

Tapahtumien käsittely k Javassa: Esimerkki ActionListener actionperformed(actionevent) JMenuItem obs src AppComp AbstractButton addactionlistener(actionlistener) 31

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. 32

Sovitin (Adapter) suunnittelumalli Client AbstractServices request() ConcreteServices concrequest()... adaptee.concrequest() Adapter request() adaptee Server 33

Esimerkki: BeanBox (Sun) 34

Sovittimien käyttk yttö riippumattomien komponenttien tapahtumapohjaisessa kommunikoinnissa rekisteröinti ilmoita tapahtumasta palvelukutsu Komponentti A Sovitin Komponentti B 35

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; 36

Luontiriippuvuuksien vähentv hentäminen tehtaalla FactoryRegistry register(factory) AppInit Factory create(): Product AppFactory <<create>> (alustus) Platform <<create>> (käyttö) Product service AppProduct 37

Yksinkertainen tehdas: Tehdasmetodi (Factory Method) suunnittelumalli Product Creator factorymethod anoperation product = factorymethod();... AppProduct create ConcCreator factorymethod return new AppProduct(); 38

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; 39

Ongelma: Miten varmistaa yhdenmukaiset oliot? Alusta TAI MUTTA EI: 40

ShapeFac Ratkaisu: yksi tehdasolio luo kaikki oliot yhdenmukaisesti tehdasluokka TwoDimFac ilmentymä tehdasolio käyttää Alusta luo ilmentymä ThreeDimFac factory class 41

Abstrakti tehdas (Abstract Factory) suunnittelumalli: Esimerkki Sovellusalusta AbsFactory createbutton(): Button createmenu(): Menu WinFactory Button Menu <<create>> WinButton WinMenu 42

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 43

Yhteenvetoa Roolirajapinnoilla täsmällisemmin tyypitetty arkkitehtuuri Välittäjän käyttö keskitettyyn vuorovaikutukseen Kutsun siirtäminen perusmekanismi monessa ratkaisussa 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 44