Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

Samankaltaiset tiedostot
Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

Ohjelmistotekniikan menetelmät, arkkitehtuuria ja rajapintoja

Ohjelmistojen mallinnus Ohjelmistoarkkitehtuuri Harri Laine 1

Kertaus: oliosuunnittelun periaatteita

Ohjelmistojen mallintaminen. Luento 9,

Ohjelmistotuotanto. Luento

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

Ohjelmistojen mallintaminen Ohjelmistoarkkitehtuuri Harri Laine 1

Ohjelmistotekniikan menetelmät

Ohjelmistojen mallintaminen. Luento 5,

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

Ohjelmistotekniikan menetelmät

Ohjelmistojen suunnittelu

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

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Suunnittelumallien käyttö ohjelmistosuunnittelussa

Ohjelmistojen mallintaminen, kertausta

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

Rajapinta (interface)

Ohjelmistotekniikan menetelmät, toteutuksesta ja testauksesta

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Graafisen käyttöliittymän ohjelmointi Syksy 2013

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

Ohjelmistojen mallintaminen, sekvenssikaaviot

HELIA 1 (14) Outi Virkki Käyttöliittymät ja ohjlmiston suunnittelu

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

Ohjelmistojen mallintaminen, suunnittelumalleja

Ohjelmistojen mallintaminen kertausta Harri Laine 1

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Ohjelmistotekniikan menetelmät, toteutuksesta ja testauksesta

Luokka- ja oliokaaviot

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

UML Luokkakaavio 14:41

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

Johdatus sovellussuunnitteluun, s99, osa3 Helsingin yliopisto;/tktl Harri Laine 1. Olioiden väliset yhteydet. Olioiden väliset yhteydet

Yhteydelle voi antaa nimen kumpaankin suuntaan Sille ei tarvise antaa lainkaan nimeä Yhteysnimen asemasta tai lisäksi voidaan käyttää roolinimiä

Johdatus sovellussuunnitteluun, s99, osa3 Helsingin yliopisto;/tktl Harri Laine 1. Olioiden väliset yhteydet. Olioiden väliset yhteydet

Suunnitteluvaihe prosessissa

Ohjelmistojen mallintaminen, kesä 2010

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Kertaus: yleistys-erikoistus ja perintä

Pakkauksen kokoaminen

Pakkauksen kokoaminen

Ohjelmistojen mallintaminen. Luento 11, 7.12.

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

UML:n yleiskatsaus. UML:n osat:

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

Muutamia peruskäsitteitä

Yksikkötestaus. import org.junit.test; public class LaskinTest public void testlaskimenluonti() { Laskin laskin = new Laskin(); } }

Ohjelmistojen mallintaminen, kesä 2009

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

Ohjelmistojen mallintaminen Luokkakaaviot Harri Laine 1

Arkkitehtuuri. Ylätason sovellusarkkitehtuuri

Toiminnot eli käyttäytyminen. Tieto eli rakenteelliset ominaisuudet

Ohjelmistojen mallintaminen Ohjelmiston suunnittelu Model driven development Harri Laine 1

Ohjelmistojen mallintaminen, mallinnustekniikat käytännössä

Ohjelmoinnin peruskurssien laaja oppimäärä, kevät

9. Periytyminen Javassa 9.1

Osittavat arkkitehtuurityylit. Palveluihin perustuvat arkkitehtuurityylit. Erikoisarkkitehtuurityylit

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Graafinen käyttöliittymä, osa 1

Rinnakkaistietokoneet luento S

Javan perusteita. Janne Käki

Ohjelmistojen mallintaminen, mallintaminen ja UML

20. Javan omat luokat 20.1

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

T Henkilökohtainen harjoitus: FASTAXON

Palveluperustaiset arkkitehtuurityylit

Luento 6. Jouni Lappalainen, Ilkka Tervonen, additions & editions by Antti Juustila

Luento 12. Jouni Lappalainen, Ilkka Tervonen, additions & editions by Antti Juustila

Arkkitehtuurikuvaus. Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy. Ryhmä 14

Ohjelmistojen mallintaminen olioiden elinkaaret - tilakaavio Harri Laine 1

Suunnittelumalleja, MVC. Juha Järvensivu 2008

2. Olio-ohjelmoinnin perusteita 2.1

Ohjelmistotekniikan menetelmät, kesä 2008

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus:

Ohjelmistoarkkitehtuuri

SEPA - Design Patterns

FiSMA 1.1 Toiminnallisen laajuuden mittausmenetelmä Ohje monikerrosarkkitehtuurin mittaamiseen

2. Olio-ohjelmoinista lyhyesti 2.1

4. Olio-ohjelmoinista lyhyesti 4.1

Web-palvelu voidaan ajatella jaettavaksi kahteen erilliseen kokonaisuuteen: itse palvelun toiminnallisuuden toteuttava osa ja osa, joka mahdollistaa k

Haaga-Helia/IltaTiko ict2tcd005: Ohjelmiston suunnittelutaito 1/7 Anne Benson. Tällä opintojaksolla käytämme VS:n kolmen kokonaisuuden luomiseen:

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

2 Ohjelmistoarkkitehtuurien kuvaus

Osio 4: Graafinen käyttöliittymä

Kansallinen digitaalinen kirjasto Käyttöliittymä Finna Aki Lassila / Kehittämispäällikkö / Kirjastoverkkopalvelut

17. Javan omat luokat 17.1

Ohjelmistojen mallintaminen

Järjestelmäarkkitehtuuri (TK081702)

17. Javan omat luokat 17.1

Vesisika. metsiemme työmyyrä.

Ohjelmistokehykset ohjelmistorunkoja uudelleenkäyttö olioperustaisista ohjelmistorunko

Tietokantojen suunnittelu, relaatiokantojen perusteita

Osio 4: Graafinen käyttöliittymä

Ohjelmistojen mallintaminen Olioiden yhteistyö Harri Laine 1

Testausdokumentti. Kivireki. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Ohjelmistotekniikka: Luento 6

Transkriptio:

582104 Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja 1

Arkkitehtuurisuunnittelu Ohjelmistoarkkitehtuurin määritelmä & arkkitehtuurisuunnittelun lähtökohta ja tavoitteet Kerrosarkkitehtuuri ohjelmiston jaottelun perusmallina Arkkitehtuurin osien kuvaaminen UML-pakkauksilla Järjestelmän osien välisten riippuvuuksien hallinta Pakkausten ja luokkien väliset riippuvuudet Rajapinnat Esimerkki: MVC-arkkitehtuuri 2

Ohjelmiston suunnittelu Suunnitteluvaiheessa tarkoituksena on löytää sellaiset oliot, jotka pystyvät yhteistoiminnallaan toteuttamaan edellisessä luvussa listatut järjestelmältä vaadittavat operaatiot Suunnittelu jakautuu karkeasti ottaen kahteen vaiheeseen: Arkkitehtuurisuunnittelu Oliosuunnittelu 3

Arkkitehtuurisuunnittelu ja oliosuunnittelu Arkkitehtuurisuunnittelussa hahmotellaan järjestelmän rakenne karkeammalla tasolla Oliosuunnittelussa suunnitellaan oliot, jotka ottavat vastuulleen järjestelmältä vaaditun toiminnallisuuden toteuttamisen Yksittäiset oliot eivät yleensä toteutta suurtakaan järjestelmän toiminnallisuudesta Erityisesti oliosuunnitteluvaiheessa tärkeäksi seikaksi nouseekin olioiden välinen yhteistyö, eli se vuorovaikutus, jolla oliot saavat aikaan halutun toiminnallisuuden 4

Ohjelmistoarkkitehtuuri Ohjelmiston yleisrakenne, jonka on tarkoitus palvella ohjelmiston ymmärrettävyyttä ylläpidettävyyttä laajennettavuutta skaalautuvuutta tuettavuus (supportability) 5

Ohjelmistoarkkitehtuurin tehtävä Ohjelmiston jaottelu moduuleiksi esim. luokiksi, paketeiksi, komponenteiksi, toiminnallisuuden sijoittelu moduuleihin moduulien ja olioiden välisten riippuvuuksien hallinta Arkkitehtuurimallien (architectural pattern) ja arkkitehtonisten periaatteiden kiinnittäminen Perusta, jonka varaan kaikki myöhemmät suunnittelu- ja toteutusratkaisut rakennetaan Arkkitehtuurikuvaus toimii järjestelmän yleisrakenteen dokumentaationa 6

Komponenttijaottelusta Komponentilla tarkoitetaan yleensä kokoelmaa toisiinsa liittyviä olioita/luokkia, jotka suorittavat jotain ohjelmassa tehtäväkokonaisuutta Käyttöliittymän voitaisiin ajatella olevan yksi komponentti Suuri komponentti voi muodostua useista alikomponenteista kirjastojärjestelmän sovelluslogiikkakomponetti voisi sisältää komponentin, joka huolehtii sovelluksen alustamisesta ja yhden komponentin kutakin järjestelmän toimintokokonaisuutta varten Komponenttijako voi perustua myös tietosisältöihin kirjastojärjestelmässä voisi olla omat komponentit lainaajia, lainoja ja kirjakokoelmaa varten 7

Arkkitehtuurisuunnittelu Joukko valintoja ja päätöksiä, joilla pyritään toimivaan ohjelmistoarkkitehtuuriin Huom! Päätösten perustelut pitää kirjata! Erityispiirteitä järjestelmänlaajuiset perusratkaisut järjestelmän ositus ja riippuvuuksien hallinta ohjelmiston ei-toiminnalliset ominaisuudet vaihtoehtoisten ratkaisutapojen evaluointi 8

Arkkitehtuurisuunnittelun tavoitteet Ohjelmiston hierarkkisen kerrosrakenteen määrittely auttaa hallitsemaan järjestelmän monimutkaisuutta ymmärtämään moduulien välisiä riippuvuuksia, sillä suora olioiden välinen vuorovaikutus on sallittu vain vierekkäisten kerrosten välillä Moduulien välisten riippuvuuksien esittäminen eksplisiittisesti käännösaikaisina rakenteina pelkästään suoritusaikana näkyvien, löyhien ja epämääräisten riippuvuuksien estäminen/ kieltäminen 9

Kerrosarkkitehtuuri ohjelmiston jaottelun perusmallina Useimmat järjestelmät voidaan jakaa kerroksiin, esim. Käyttöliittymäkerros, jossa käyttöliittymäoliot järjestelmän ulospäin näkyvä osa, esim. ikkunat, valikot, käyttäjän ja sisältöolioiden välinen yhteys: esitetään tietoja ja vastaanotetaan käyttäjän ohjausta Sovelluslogiikkakerros, jossa sisältöoliot toteuttaa reaalimaailman simulointimallin sisältöoliot tarjoavat omaan tietosisältöönsä perustuvia sovelluskohtaisia palveluja Tietojensäilytyskerros, jossa tietokantaoliot esim. tiedostot, tietokannan taulut, säilyttävät sisältöolioiden tiloja 10

Arkkitehtuurin osien kuvaaminen UMLpakkauksilla UML:ssä pakkauksella voidaan koota yhteen nimetty joukko mallinnuselementtejä Pakkaus voi sisältää muita (ali)pakkauksia Pakkaus omistaa sisältönsä pakkauksen poistaminen poistaa myös sen sisällön esim. luokka kuuluu yleensä vain yhteen pakkaukseen Pakkaus voi viitata (import) muihin pakkauksiin merkitään riippuvuutena pakkausten välillä tällöin pakkauksen elementit (esim. luokat) voivat viitata kohdepakkaukseen tai sen elementteihin 11

Pakkausnotaatioita 12

Plusympyrä-esimerkki 13

Plusympyrä-esimerkki 14

Kerrosarkkitehtuuri pakkauskaaviona Jokainen komponentti on kuvattu omana pakkauksena, eli isona laatikkona, jonka vasempaan ylälaitaan liittyy pieni laatikko Laatikoiden välillä on riippuvuuksia Käyttöliittymä riippuu sovelluslogiikasta Sovelluslogiikka riippuu tallennuspalveluista Järjestelmä perustuu kerrosarkkitehtuuriin (engl. layered architecture) 15

Järjestelmän osien välisten riippuvuuksien hallinta Moduuli (luokka, paketti, olio, ) A riippuu moduulista B, jos muutos B:ssä voi aiheuttaa muutostarpeen A:ssa Riippuvuusmekanismeja luokan attribuutit, luokkahierarkia, parametrityypit, operaatiokutsut, tapahtumat, Tavoitteena arkkitehtuuri, joka minimoi riippuvuudet; erityisesti riippuvuudet eivät saa ulottua naapurikerroksia kauemmas aiheuttaa syklejä 16

Pakkausten välisten riippuvuussyklien poistaminen Package A Package B Package A1 Package B Package A2 ne elementit, joista B riippuu on eristetty paketiksi A2 17

Kerrosten väliset riippuvuudet «layer» Layer 1 Package A «layer» Layer 2 Package C Package E Package B Package D Ylemmät kerrokset riippuvat alemmista Alempien kerrosten oltava (julkisilta osiltaan) vakaita muutos rajapintaan heijastuu ylempään Toisaalta alemman kerroksen voidaan vaihtaa julkisilta osiltaan samanlaiseen (mutta sisäiseltä toteutukseltaan erilaiseen), koska se on riippumaton ylemmästä 18

Riippuvuudet eri abstraktiotasoilla Operaatioiden ja attribuuttien väliset riippuvuudet aiheuttavat luokkien väliset riippuvuudet Vastaavasti luokkien väliset aiheuttavat pakettien väliset ja pakettien väliset kerrosten väliset riippuvuudet 19

Kerrosarkkitehtuuri Kirjastojärjestelmän rakenne perustuu siis kerrosarkkitehtuuriin Kerrosarkkitehtuuri yksi hyvin tunnettu arkkitehtuurimalli (engl. architecture pattern), eli periaate, jonka mukaan tietynlaisia ohjelmia kannattaa pyrkiä rakentamaan Olemassa myös muita arkkitehtuurimalleja, joita ei nyt kuitenkaan käsitellä Kerros on kokoelma toisiinsa liittyviä olioita tai alikomponentteja, jotka muodostavat esim. toiminnallisuuden suhteen loogisen kokonaisuuden ohjelmistosta 20

Kolmikerrosarkkitehtuuri Kerrosarkkitehtuurissa on pyrkimyksenä järjestellä komponentit siten, että ylempänä oleva kerros käyttää ainoastaan alempana olevien kerroksien tarjoamia palveluita Ylimpänä kerroksista on käyttöliittymäkerros sen alapuolella sovelluslogiikka alimpana tallennuspalveluiden kerros, eli esim. tietokanta, jonne sovelluksen olioita voidaan tarvittaessa tallentaa. Palaamme kerrosarkkitehtuurin hyötyihin pian, ensin hieman lisää pakkauskaavioista 21

Pakkauskaavio Pakkauskaaviossa yksi komponentti kuvataan pakkaussymbolilla Pakkauksen nimi joko keskellä symbolia tai ylänurkan laatikossa Pakkausten välillä olevat riippuvuudet ilmaistaan katkoviivanuolena, joka suuntautuu pakkaukseen, johon riippuvuus kohdistuu Kerrosarkkitehtuurissa siis pyrkimyksenä, että riippuvuuksia on ainoastaan alapuolella oleviin kerroksiin. Kirjastojärjestelmän käyttöliittymäkerros riippuu sovelluslogiikkakerroksesta Tyypillinen käännösaikainen riippuvuus on tilanne jossa, käyttöliittymän oliot kutsuvat sovelluslogiikan olioiden metodeja Sovelluslogiikkakerros taas on riippuvainen tallennuspalvelukerroksesta Pakkauksen sisältö on mahdollista piirtää pakkaussymbolin sisään kuten seuraavalla sivulla olevassa tarkennetussa kirjastojärjestelmän arkkitehtuurikuvauksessa Pakkauksen sisällä voi olla alipakkauksia tai esim. luokkia Riippuvuudet voivat olla myös alipakkausten välisiä 22

23

Plusympyrä käytännössä Jos pakkauksessa on paljon sisältöä, voi sisällön näyttäminen piirtämällä sisältyvät komponentit pakkauksen sisäpuolelle olla ongelmallista Mahdollista piirtää pakkaukseen sisältyvät komponentit ulkopuolelle 24

Pakkaussymboli sovellettavissa kaikkiin mallinnuselementteihin UML:n pakkaussymbolilla voidaan ryhmitellä mitä tahansa komponentteja: pakkauksia, luokkia, olioita, käyttötapauksia,... Voitaisiin esim. jakaa kirjastojärjestelmän käyttötapaukset ylläpidon helpottamiseksi tai dokumentoinnin selkeyttämiseksi neljään eri pakkaukseen 25

Kerrosarkkitehtuurin etuja Kerroksittaisuus helpottaa ylläpitoa Kerroksen sisältöä voi muuttaa vapaasti jos sen palvelurajapinta eli muille kerroksille näkyvät osat säilyvät muuttumattomina Sama pätee tietysti mihin tahansa komponenttiin Jos kerroksen palvelurajapintaan tehdään muutoksia, aiheuttavat muutokset ylläpitotoimenpiteitä ainoastaan ylemmän kerroksen riippuvuuksia omaavin kerroksiin Esim. käyttöliittymän muutokset eivät vaikuta sovelluslogiikkaan tai tallennuspalveluihin 26

Kerrosarkkitehtuurin etuja 2/2 Sovelluslogiikan riippumattomuus käyttöliittymästä helpottaa ohjelman siirtämistä uusille alustoille, esim. toimimaan www-selaimen kautta Alimpien kerroksien palveluja, kuten lokitiedostoon kirjoitusta tai tietokantayhteyksiä voidaan ehkä uusiokäyttää myös muissa sovelluksissa Ylemmät kerrokset voivat toimia korkeammalla abstraktiotasolla Tallennuspalvelukerros kätkee tietokannan käsittelyn muilta kerroksilta: sovelluslogiikan tasolla voidaan ajatella kaikki olioina Kaikkien ohjelmoijien ei tarvitse ymmärtää kaikkia detaljeja, osa voi keskittyä tietokantaan, osa käyttöliittymiin, osa sovelluslogiikkaan 27

Yhtenäisiä pakkauksia Yksittäisistä pakkauksista kannattaa tehdä mahdollisimman yhtenäisiä toiminnallisuudeltaan eli sellaisia, joiden osat kytkeytyvät tiiviisti toisiinsa ja palvelevat ainoastaan yhtä selkeästi eroteltua tehtäväkokonaisuutta Samalla pyrkimyksenä on, että erilliset pakkaukset ovat mahdollisimman löyhästi kytkettyjä toisiinsa pakkausten välisiä riippuvuuksia pyritään minimoimaan Ohjelman jakautuminen mahdollisimman riippumattomiin pakkauksiin eristää koodiin ja suunnitelmaan tehtävien muutosten vaikutukset mahdollisimman pienelle alueelle, eli ainoastaan riippuvuuden omaaviin pakkauksiin Tämä helpottaa ohjelman ylläpitoa ja tekee sen laajentamisen helpommaksi Selkeä jakautuminen pakkauksiin myös helpottaa työn jakamista suunnittelu- ja ohjelmointivaiheessa 28

Kerroksellisuus ei riitä Pelkkä kerroksittaisuus ei tee ohjelman arkkitehtuurista automaattisesti hyvää. Alla tilanne, missä kerroksen n+1 kolmella alipaketilla on kullakin paljon riippuvuuksia kerroksen n sisäisiin komponenttiin Esim. muutos kerroksen n luokkaan 1 aiheuttaa nyt muutoksen hyvin moneen ylemmän kerroksen pakkaukseen 29

Kerrosten välille rajapintoja Yksi tapa toteuttaa rajapinta on luoda kerroksen sisälle erillinen rajapintaolio, jonka kautta ulkoiset yhteydet tapahtuvat Tätä periaatetta sanotaan fasaadimalliksi (engl. facade pattern) Alla luotu rajapintaolio kerrokselle n. Kommunikointi kerroksen kanssa tapahtuu rajapinnan kautta ylemmän kerroksen riippuvuudet kohdistuvat rajapintaolioon muutos esim. luokkaan 1 ei vaikuta kerroksen n+1 komponentteihin ainoat muutokset on tehtävä rajapintaolion sisäiseen toteutukseen 30

Rajapinnat ja abstraktit luokat Rajapinta (interface) UML:ssä piirteiden (attribuuttien ja operaatioiden) kokoelma, josta ei voi suoraan luoda ilmentymiä rajapinnan toteuttava olio tarjoaa julkisen pääsyn ko. piirteisiin käytetään usein attribuuttien ja parametrien tyyppinä Abstrakti luokka (abstract class) esittelee vähintään yhden operaation, jota ei ole (tai ei voi olla) toteutettu kyseisessä luokassa ei voi suoraan instantioida (luoda ilmentymiä) Javassa rajapinnassa vain vakioattribuutteja ja operaatiosignatuureja luokka voi periä vain yhden (abstraktin tai konkreettisen) luokan, mutta voi toteuttaa useita rajapintoja 31

Rajapinnan kuvaaminen UML:ssä 32

Toteutusriippuvuus (interface realization, implementation dependency) Luokan Class1 tarjoama rajapinta (provided interface) = Interface1 + Interface2 33

Käyttöriippuvuus (usage dependency) Luokan Class1 tarvitsema rajapinta (required interface) Interface1 34

Syklisten riippuvuuksien aiheuttamat haitat ja niiden lieventäminen Moduulien välisten riippuvuussyklien aiheuttamia haittoja ja vaikeuksia moduulien suunnittelu- ja toteutusvastuun jakaminen oikean alustus- ja kutsujärjestyksen määrittely esim. kerrosten riippumattomuus toisistaan (ongelmana ylöspäin suuntautuvat riippuvuudet) Syklejä ei aina voida poistaa, mutta haittoja voidaan lieventää rajapintojen harkitulla käytöllä usein rajapinta ja sen toteuttava luokka eri pakettiin rajapinta samaan pakettiin sen käyttäjän kanssa tai kokonaan erilliseen pakettiin 35

Syklin poistaminen rajapinnalla public class PWindow implements ICPresenter { } public void init() { } interface ICPresenter { void init(); } public class CInit { PWindow ICPresenter win; p; public void do() { p.init(); win.init(); } } «layer» presentation PWindow +init() PDialog +dook() ICPresenter +init() CActioner +action() «layer» control «uses» +do() CInit public class PDialog { private CActioner actioner; } public void dook() { actioner.action(); } public class CActioner { public void action() { } } // do something 36

Käyttöliittymäolioiden ja sisältöolioiden suhde Yksi keskeisiä haasteita ohjelmiston arkkitehtuuria suunniteltaessa Yleisesti: sisältöolioiden tulisi tarjota käyttöliittymästä riippumattomia palveluja sisällön käsittelyyn Usein käyttöliittymäolioiden ja sisältöolioiden välillä käytetään erityisiä kontrolliolioita tätä kutsutaan Model-View-Controller malliksi 37

Model-View-Controller (MVC) - arkkitehtuurimalli Application View Controller Model Database & Web Services Mallioliot (model) esittävät kohdealueen käsitteitä, liiketoimintasääntöjä ja sovelluslogiikkaa Näkymäoliot (view) esittävät käyttöliittymän osia Kontrollioliot esittävät syötelaitteiden (hiiri, näppäimistö) tuottamia tapahtumia ja niiden käsittelylogiikkaa 38

Käyttöliittymäolioiden toiminta eli käyttöliittymän kuuntelu Kontrolliolio asettuu kuuntelemaan tiettyyn käyttöliittymäolioon liittyviä tapahtumia (Observer) Dynaamisen sidonnan ansiosta käyttöliittymäolion ei tarvitse tietää kontrolliolion konkreettista luokkaa, ainoastaan rajapinta Käyttöliittymäoliolle (esim. painike) suoritetusta toiminnosta (esim. painikkeen painallus) välitetään käsittelypyyntö kaikille kuuntelijoille, myös ko. kontrollioliolle 39

MVC:n etuja Erilaiset käyttöliittymät eri tarpeisiin (esim. GUI vs. eräajokäyttö) ja myös samanaikaisesti erilaiset näkymät samaan tietosisältöön Käyttöliittymän päivittäminen tai käyttöliittymätyypin vaihtaminen ei vaikuta sisältöluokkiin Käyttöliittymän reagointitapaa voidaan vaihtaa muuttamatta ulos näkyviä käyttöliittymäkomponentteja Tietosisällön muotoa ja talletustapaa voidaan vaihtaa muuttamatta käyttöliittymää Tietosisältöä voidaan käsitellä ilman käyttöliittymää (esim. ohjelmallinen käsittely, skriptaus) 40