Ohjelmistoarkkitehtuurit Komponentit Kevät 2016

Samankaltaiset tiedostot
3. Komponentit ja rajapinnat

Ohjelmistoarkkitehtuurit kevät

Komponentit ja rajapinnat

Ohjelmistoarkkitehtuurit kevät

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

Ohjelmistoarkkitehtuurit Komponentit Kevät 2014

3. Komponentit ja rajapinnat

3. Software components and interfaces

Ohjelmistoarkkitehtuurit, syksy

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

TIE Ohjelmistojen suunnittelu. Luento 8..9: moniperintä

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

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

12. Kehysarkkitehtuurit

Rajapinta (interface)

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. II Johdanto olio-ohjelmointiin

11. Kehysarkkitehtuurit

13/20: Kierrätys kannattaa koodaamisessakin

TIE Samuel Lahtinen. Lyhyt UML-opas. UML -pikaesittely

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

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

TIE Ohjelmistojen suunnittelu

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Kehittää ohjelmointitehtävien ratkaisemisessa tarvittavia metakognitioita!

TIE Ohjelmistojen suunnittelu

8. Kehysarkkitehtuurit

Ohjelmistokehykset ohjelmistorunkoja uudelleenkäyttö olioperustaisista ohjelmistorunko

Koodimalli Code Model

Kehyspohjainen ohjelmistokehitys

T Olio-ohjelmointi Osa 5: Periytyminen ja polymorfismi Jukka Jauhiainen OAMK Tekniikan yksikkö 2010

Aalto Yliopisto T Informaatioverkostot: Studio 1. Oliot ja luokat Javaohjelmoinnissa

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

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Viestinvälitysarkkitehtuurit

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

2 Ohjelmistoarkkitehtuurien kuvaus

Viestinvälitysarkkitehtuurit Lähtökohta:

Osio 4: Graafinen käyttöliittymä

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

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

Android ohjelmointi. Mobiiliohjelmointi 2-3T5245

Ohjelmistojen mallintaminen, arkkitehtuuria ja rajapintoja

815338A Ohjelmointikielten periaatteet

TIE Ohjelmistojen suunnittelu

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

Uudelleenkäytön jako kahteen

Ohjelmistojen suunnittelu

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

1. Olio-ohjelmointi 1.1

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

Ohjelmistoarkkitehtuurit, syksy

10. Muunneltavuuden hallinta: variaatiopisteet

UML:n yleiskatsaus. UML:n osat:

Olio-ohjelmoinnissa luokat voidaan järjestää siten, että ne pystyvät jakamaan yhteisiä tietoja ja aliohjelmia.

P e d a c o d e ohjelmointikoulutus verkossa

XPages käyttö ja edut Jarkko Pietikäinen toimitusjohtaja, Netwell Oy

Ohjelmistokehykset (software frameworks)

Ohjelmistoarkkitehtuurin suunnittelu

10. Muunneltavuuden hallinta: variaatiopisteet

Ohjelmistoarkkitehtuurit kevät

Copyright Observis Oy All rights reserved. Observis Oy Ville Kanerva, CTO Heikki Isotalus, COO Datasta tietoa

Graafisen käyttöliittymän ohjelmointi Syksy 2013

ZENworks Application Virtualization 11

Johdanto. Olio (Object) Luokka (Class) Olion kuvaaminen

Ohjelmistojen mallintaminen luokkamallin lisäpiirteitä

TIE Ohjelmistojen suunnittelu. Viimeinen luento: kertaus

Ohjelmistoarkkitehtuurit. Kevät 2014 Kertausta

Paikkatiedon mallinnus Dokumentoinnin ymmärtäminen. Lassi Lehto

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset

812341A Olio-ohjelmointi, I Johdanto

Sisällys. JAVA-OHJELMOINTI Osa 6: Periytyminen ja näkyvyys. Luokkahierarkia. Periytyminen (inheritance)

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

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

9. Muunneltavuuden hallinta

Java kahdessa tunnissa. Jyry Suvilehto

Ohjelmistoarkkitehtuurit

Muutamia peruskäsitteitä

TIE Ohjelmistojen suunnittelu

POLKU LUOKKAKAAVIOISTA TAULUJEN TOTEUTUKSEEN

Ohjelmistotekniikan menetelmät, suunnittelumalleja

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

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

Osio 4: Graafinen käyttöliittymä

Ohjelmistoarkkitehtuurit Kevät 2016 Johdantoa

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

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

Ohjelmistotuotanto, suunnittelu Syksy Suunnittelu. Suunnittelun tulos. Suunnitteluprosessin työvaiheet. Suunnitteluprosessi.

Osittavat arkkitehtuurityylit. Palveluihin perustuvat arkkitehtuurityylit. Erikoisarkkitehtuurityylit

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

Sisällys. Mitä on periytyminen? Yksittäis- ja moniperiytyminen. Oliot ja perityt luokat. Periytymisen käyttö. 8.2

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Rutiinin muodostaminen. 2. Rutiinin muodostaminen. specification) Määrittely (specification( Määrittelyn osapuolet. Hyvän ohjelman tunnusmerkit

SEPA - Design Patterns

Järjestelmäarkkitehtuuri (TK081702) Pilvipalvelut. Pilvipalvelut - lähtökohtia

Mitä on periytyminen?


Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op

Transkriptio:

Ohjelmistoarkkitehtuurit Komponentit Kevät 2016 Samuel Lahtinen http://www.cs.tut.fi/~ohar/ 1

Komponentit ja rajapinnat Komponenttien idea: ohjelmistotuotannon rationalisointi Mikä on ohjelmistokomponentti? Komponentit ohjelmistoyksikköinä Rajapinnat Komponenttien räätälöinti Yhteenvetoa 2

Komponenttien idea: ohjelmistotuotannon rationalisointi Tuotteiden rakentaminen komponenteista tuotteista tulee luotettavampia tuotteita on nopeampi rakentaa rakentajia on helpompi kouluttaa komponenttimarkkinat ja kilpailu alentavat hintoja Sovelletaan lähes kaikilla tekniikan aloilla 3

Harjoitus: Anna 5 ominaisuutta, jotka ovat hyvällä ohjelmistokomponentilla 4

Komponenttien ominaisuuksia, Hyvät/huonot 5

Sovellusten koostaminen komponenteista Visio: sovellus kootaan olemassa olevista komponenteista, parametrisointi ja yhteyksien määrittäminen Työkaluja: skriptit, XML, visuaaliset koostamistyökalut 6

Unity 3D 7

Jotain muuta http://scratch.mit.edu/ http://www.cs.ioc.ee/cocovila/download.php 8

Metson työkalu prosessiautomaatioon Mika Karaila 9

3.2 Mikä on ohjelmistokomponentti? Komponentti = itsenäinen ohjelmistoyksikkö, joka tarjoaa palveluja hyvin määritellyn rajapinnan kautta Szyperski: A software component is a unit of composition with contractually specified interfaces and explicit context dependencies only. A software component can be deployed independently and is subject to composition by third parties. 10

Komponenttien ominaisuuksia Itsenäisyyden aste Komponentit Komponentti yleensä olettavat jonkin infrastruktuurin/ajoaikaisen tuen voi olettaa tietyn palveluympäristön (vaaditut rajapinnat) Käyttöönottotapa Voidaan Koko Vaihtelee ottaa käyttöön kehitysaikana, linkitysaikana, käynnistysaikana tai käytön aikana (lähdekoodisena tai binäärisenä) oliosta alijärjestelmään Standardointi Rajapintojen standardointi sovellusalueella, infrastruktuurin standardointi Teknologia-spesifit ominaisuudet Esimerkiksi reflektio-ominaisuudet, metadata 11

Komponenttien käyttöön liittyviä haasteita Kuinka toteutan komponentin? Kuinka kuvaan komponentin rajapinnan? Miten varmentaa, että komponentti vastaa rajapintaansa, pitää lupauksensa? Miten yhdistellä komponentteja, muodostaa isompia kokonaisuuksia? Komponentien yhdistämisen ja ongelmat Tyyppiyhteensopivuus, parametrit Toiminnallisuus Rinnakkaisuus, ajoitukset Resurssien käyttö turvallisuus Miten ylläpitää komponenteista muodostuvaa järjestelmää? Jne. 12

x.3 Komponentit ohjelmistoyksikköinä Arkkitehtuurin perusyksikkö: Toiminnallisuuden yksikkö mikä osa vastaa tietystä toiminnallisuudesta? Uudelleenkäytön yksikkö mikä osat ovat yhteisiä eri tuotteissa? Tuotekonfiguraation yksikkö mitä osia kuuluu tuotteeseen? Käyttöönoton yksikkö mitkä osat voidaan ottaa erikseen käyttöön? Muuntelun yksikkö mitkä osat voidaan vaihtaa toisiksi? Ulkopuolisen kehityksen yksikkö mitkä osat voidaan saada muualta? Työnjaon yksikkö mitkä osat tuotetaan tietyillä henkilöillä/yksiköillä? 13

Komponenttipohjaisia järjestelmiä Firefox, pluginit ja add-onit komponentteina Tarkkaan määritelty rajapinta plugin Firefox välillä (ei tarvitse tietoa Firefoxin sisäisestä toteutuksesta) Erittely komponenttien välillä, periaateessa bugaava plugin ei kaada muuta Firefoxia tai muita plugineita Linux ja ajurit jne. ajurit vs. käyttöjärjestelmän ydin Väyläpohjaiset sulautetut järjestelmät Esimerkki, autot 14

Komponenttien käyttöesimerkki Scintilla (http://www.scintilla.org/ ) Tekstiedistorikomponentti, erityisesti lähdekoodin muokkaamiseen soveltuva Ilmainen, vapaa Geany, Komodo, Notepad++, Notepad2, Programmers Notepad, MySQLWorkbench Wrappers:.NET, Qt, wxwidgets Dokumentaatioesimerkkiä: http://www.scintilla.org/scintilladoc.html 15

Rajapinnat Komponentti/rajapinta-käsitteen kehittyminen olioparadigmaan Aliohjelmat: toiminnan abstrahointi Moduulit: tiedon piilotus Luokat: laajennettavat moduulit Abstraktit luokat: luokat ilman toteutusta Moniperiytyminen: useita abstraktioita samalle toteutukselle Komponentit: erilliset rajapinnat 16

Aliohjelmat: toiminnan abstrahointi A B C kutsu kutsu kutsu aliohjelmakirjasto Palvelun kutsumuoto (signature) Palvelun toteutus 17

Moduulit: tiedon piilotus rajapinta kutsu M tietorakenteet A B C Esim. Ada 18

Luokat: laajennettavat moduulit M2 T1 M2 D T2 M1 A B C T1 A B C D T2 E F M2 sisältää myös M1-osan: E F 19

Abstraktit yliluokat: luokat ilman toteutusta M1 M2 T2 M2 D T2 Ei toteutusta D E F E F 20

Moniperiytyminen: useita abstraktiota samalle toteutukselle M0 M1 Ei toteutusta M2 T2 Ei toteutusta D E F 21

Komponentit: erilliset rajapinnat M1 M2 T2 D E F 22

Rajapinnat itsenäisinä ohjelmayksikköinä Komponentti A Komponentti B Rajapinta 1 Rajapinta 2 Rajapinta 3 Rajapinta 4 23

Kysyttävää?

Komponentit ja UML <<component>> stereotyypin käyttö Komponenttisymboolin käyttö Komponentti ennen UML 2:ta, edelleen ok 25

Tarjotut ja vaaditut rajapinnat Komponentti voi olla kahdessa eri suhteessa rajapintaan: Komponentin tarjottu rajapinta Komponentti tarjoaa rajapinnan mukaiset palvelut Komponentin vaadittu rajapinta Komponentti tarvitsee rajapinnan mukaiset palvelut 26

Tarjotut ja vaaditut rajapinnat UML 2.x:ssa PowerSource tarjottu rajapinta Car Engine PowerSource vaadittu rajapinta 27

Toteutus Javalla interface PowerSource { void start(); int temperature(); void stop(); } class Engine implements PowerSource... {... public void start() {...} public int temperature() {...} public void stop() {...} } class Car... {... private PowerSource eng;... public void seteng(powersource e) { eng = e; } public void run() {... eng.start();... eng.stop();... } } 28

Portit UML 2.x:ssa Vuorovaikutuksen mahdollistava kontaktipiste komponentin ja sen ympäristön välillä PowerSource PowerSource Portti Engine host Engine Warnings Warnings 29

Portit UML 2.x:ssa Portti kuvaa komponentin vuorovaikutusta ulkomaailmaan. Porteilla voi olla lukumääräsuhteita ja nimi (kertoo, että kullakin komponentin instanssilla voi olla lukumääräsuhteen osoittama määrä portteja, vuorovaikutuspisteitä ja sitä kautta esim. tarjottuja rajapinnan toteuttajia) request Portti Rajapinnat, joko jokainen omanaan tai luettelona port_name [multiplicities] response Server http://www.uml-diagrams.org/port.html 30

Komponenttikaavioista Komponentin sisäisen toteutuksen kuvaaminen, komponentteja komponentissa (voidaan kuvata riippuvuuksien avulla kutsurakennettakin). http://www.sei.cmu.edu/reports/04tr008.pdf 31

Rajapintojen sopimussuunnittelupohjainen määrittely esiehto(tuloehto): täytyy päteä kun palvelua kutsutaan palvelun rajapinta design-by-contract Palvelun pyytäjä Palvelun tarjoaja Esi- ja jälkiehdot (Tulo- ja jättöehdot) määrittelevät palvelun merkityksen sallivat osapuolten vaihtamisen, kunhan esi- ja jälkiehdot pysyvät voimassa määräävät tarkistusvastuun osapuolten välillä palvelun tarjoaja joko täyttää sopimuksen tai aiheuttaa poikkeuksen Jälkiehto(jättöehto): täytyy päteä kun palvelu on suoritettu, olettaen että esiehdot olivat voimassa kun palvelu aloitettiin 32

Periytyminen & esi- ja jälkiehdot pre' pre post post' A public oper(...) pre post pre' pre post' post B pre' post public oper(...) pre' post' pre pre' pre post' post post' C D Mikä on oikea vaihtoehto (A,B,C,D,F)? Aliluokan esi- ja jälkiehtojen pitää olla identtiset kantaluokan kanssa 33 F

Esimerkki Oletetaan, että teet sopimuksen verhoilijan kanssa: sinä toimitat kankaan, tuolin, maksun ja viinapullon, ja verhoilija toimittaa kuukauden kuluessa verhoillun tuolin tietyin laatukriteerein. Verhoilija sairastuu ja hän ehdottaa että työn tekee toinen verhoilija. Tällä on kuitenkin erilaiset toimintatavat. Millaisia voivat olla uuden verhoilijan toimintatavat, jotta verhoilijan vaihto olisi sinulle merkityksetön? 34

Esimerkki (jatkuu) Esimerkiksi: Onko ok, että uusi verhoilija haluaa tuolin, kankaan ja maksun, ja toimittaa verhoillun tuolin viikon sisään? Onko ok, että uusi verhoilija haluaa tuolin, kankaan, maksun,viinapullon ja lipun Tapparan matsiin, ja toimittaa verhoillun tuolin kahden kuukauden kuluttua? 35

Esi- ja jälkiehdoista Mikä SOLID:in periaate liittyy erikoistamiseen ja esi- & jälkiehtoihin? Jälkiehdoissa mukana muiden komponenttien palveluiden käyttö. Eitoiminnalliset vaatimukset, kuten suoritusaika tärkeitä, jos komponentteja aiotaan erikoistaa. Esiehto: ei saa vaatia enempää kuin kanta, periytetyn luokan esiehto ei saa olla tiukempi kuin kantaluokan Jälkiehto: pitää luvata ainakin se mitä kantaluokka. Periytetyn luokan jälkiehdon pitää sisältää myös kantaluokan jälkiehto (saa olla "tiukempi") Luokkainvarianttien kanssa aliluokan tulisi tarkistaa vastaavat asiat kuin kantaluokan ja tarvittaessa omat lisämääritykset ( esiehtojen löyhentämien ei saa vaarantaa luokkainvarianttia) Klassikko-julkaisu sopimussuunnittelusta: http://se.ethz.ch/~meyer/publications/computer/contract.pdf 36

Kysyttävää?

3.6 Komponenttien räätälöinti komponentin (alku)tilan muuttaminen vaadittujen rajapintojen toteutuksen antaminen tai muuttaminen aliluokittaminen 38

Komponentin alkutilan muuttaminen Client :Comp ServicesI setproperty(...) Comp create setproperty(...) use Komponentin käyttäjä asettaa komponentin alkutilan käyttötilanteen mukaiseksi ennen käyttöä (myös komponenttipohjaiset editorit ja arvojen asetus, esim. käyttöliittymä) 39

Vaadittujen rajapintojen toteutuksen antaminen tai muuttaminen (dependency injection) ActionListener Button AppLogic ActionListener XLogic Komponentin käyttämä palvelu vaihdetaan toiseksi kehitys- tai ajoaikana (staattisesti tai dynaamisesti) 40

Operaatiokohtainen räätälöinti display Button display brd.borderdrawing( ); CompanyBorder BorderStrategy borderdrawing borderdrawing koskee yksittäistä toimintoa voidaan vaihtaa ajoaikana (jos haluttu toteutus on olemassa) 41

Strategia (Strategy) suunnittelumalli Host str.part( ); operation operation part() StrategyA StrategyInterface part() 42

Aliluokittaminen Button Komponenttiluokka erikoistetaan aliluokittamalla sovelluksen tarpeiden mukaisesti (staattinen räätälöinti) CompanyButton 43

Särkyvän yliluokan ongelma Kirjasto komponentti Comp Viaton" muutos alkuperäiseen komponenttiin voi tehdä räätälöidystä komponentista toimimattoman Räätälöity komponentti Custom Fragile base class problem 44

Esimerkki (1) <<interface>> Container addelement(object) addcontainer(container) List addcontainer: {...addelement(...);... } <<interface>> CountedContainer getcount() CountedList addelement: { super.addelement(...); counter++; } 45

Esimerkki (2) <<interface>> Container addelement(object) addcontainer(container) List addelement:iä ei enää kutsuta! addcontainer: {...} <<interface>> CountedContainer getcount() CountedList addelement: { super.addelement(...); counter++; } 46

Haittoja Särkyvän yliluokan ongelma: komponentin periyttäminen voi olla riskialtista Lisensointiongelmat (Open Source-lisenssit vs. kaupalliset) Rajapinnan muuttuminen voi rikkoa rajapintaa käyttävät komponentit Muutoksia komponentteihin vaikea saada, vaikkei rajapintaa muutettaisikaan Järjestelmän muuttaminen ei ole ketterää 47

Yhteenvetoa Komponentit ovat arkkitehtuurin perusyksiköitä, jotka liitetään toisiinsa tarjottujen ja vaadittujen rajapintojen kautta Rajapintojen tulisi määritellä paitsi kutsumuoto myös sopimus rajapinnan käytöstä (tulo- ja jättöehdot) Komponentteja voidaan räätälöidä sen alkutilaa muuttamalla, vaihtamalla sen vaadittuihin rajapintoihin liittyviä muita komponentteja tai periyttämällä siitä erikoistettu komponentti 48

Kysyttävää?