3. Komponentit ja rajapinnat

Samankaltaiset tiedostot
Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

3. Komponentit ja rajapinnat

Ohjelmistoarkkitehtuurit kevät

Ohjelmistoarkkitehtuurit kevät

Komponentit ja rajapinnat

3. Software components and interfaces

Ohjelmistoarkkitehtuurit Komponentit Kevät 2014

Ohjelmistoarkkitehtuurit Komponentit Kevät 2016

Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:

Ohjelmistoarkkitehtuurit, syksy

Java UI-komponentit (JTable) Juha Järvensivu 2007

Ohjelmointi 2 / 2010 Välikoe / 26.3

Rajapinta (interface)

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

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

Java kahdessa tunnissa. Jyry Suvilehto

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

Tietorakenteet, laskuharjoitus 3, ratkaisuja

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

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2007

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

UML ja luokkien väliset suhteet

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

Listarakenne (ArrayList-luokka)

A TIETORAKENTEET JA ALGORITMIT

Harjoitustyö (TKO_2023)

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

Ohjelmoinnin jatkokurssi, kurssikoe

10. Luento: Kohti suurempia sulautettuja ohjelmistoja. Tommi Mikkonen,

Toisessa viikkoharjoituksessa on tavoitteena tutustua JUnit:lla testaukseen Eclipse-ympäristössä.

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.

Tenttikysymykset. + UML-kaavioiden mallintamistehtävät

Mikä yhteyssuhde on?

T Henkilökohtainen harjoitus: FASTAXON

TIETORAKENTEET JA ALGORITMIT

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Suunnittelumalleja, MVC. Juha Järvensivu 2008

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Osio 4: Graafinen käyttöliittymä

Web Services tietokantaohjelmoinnin perusteet

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

15. Ohjelmoinnin tekniikkaa 15.1

18. Abstraktit tietotyypit 18.1

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

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Metodien tekeminen Javalla

9. Periytyminen Javassa 9.1

14. Poikkeukset 14.1

2. Olio-ohjelmoinista lyhyesti 2.1

Olio-ohjelmointi Käyttöliittymä

14. Poikkeukset 14.1

4 Managing component interactions

1. Olio-ohjelmointi 1.1

<applet code="simpleaudioapplet.class" width=300 height=300>

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Rinnakkaisohjelmointi, Syksy 2006

Object Framework - One. OF-1 is a high-productive Multi-UI OpenEdge data driven development framework. Veli-Matti Korhonen

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2008

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

Kaksiloppuinen jono D on abstrakti tietotyyppi, jolla on ainakin seuraavat 4 perusmetodia... PushFront(x): lisää tietoalkion x jonon eteen

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

JAVA-OHJELMOINTI 3 op A274615

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

13/20: Kierrätys kannattaa koodaamisessakin

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

Olio-ohjelmointi Javalla

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

Ohjelmistotekniikan menetelmät, suunnittelumalleja

C# ja.net. Juha Järvensivu 2007

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

4. Olio-ohjelmoinista lyhyesti 4.1

15. Ohjelmoinnin tekniikkaa 15.1

Tietorakenteet ja algoritmit

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

9. Periytyminen Javassa 9.1

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

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Graafisen käyttöliittymän ohjelmointi Syksy 2013

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

Sopimuspohjainen olio-ohjelmointi

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

private TreeMap<String, Opiskelija> nimella; private TreeMap<String, Opiskelija> numerolla;

Java ja grafiikka. Ville Sundberg

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

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

3. Pinot, jonot ja linkitetyt listat

Osio 4: Graafinen käyttöliittymä

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

YHTEYSSUHDE (assosiation)

16. Javan omat luokat 16.1

8. Kehysarkkitehtuurit

Verifioinnin ja validoinnin ero. 7. Verifiointi ja validointi. Verifiointi- ja validointitekniikat. Verifiointi- ja validointitekniikat II

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

Harjoitus 2: Vaatimukset

REST rajapintana mobiilikehityksessä

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

Transkriptio:

3. Komponentit ja rajapinnat 3.1 Komponenttien idea: ohjelmistotuotannon rationalisointi 3.2 Mikä on ohjelmistokomponentti? 3.3 Komponentit ohjelmistoyksikköinä 3.4 Rajapinnat 3.5 Rajapintojen sopimuspohjainen määrittely 3.6 Komponenttien räätälöinti 1

3.1 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 2

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

Sovellusten koostaminen komponenteista Tavoite: sovellus kootaan olemassaolevista komponenteista Työkaluja: skriptit, XML, visuaaliset koostamistyökalut 4

Esimerkki: BeanBox (Sun) 5

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

Komponenttien ominaisuuksia Itsenäisyyden aste Käyttöönottotapa Koko Standardointi Teknologia-spesifit ominaisuudet 7

3.3 Komponentit ohjelmistoyksikköin inä Arkkitehtuurin yksikkö: 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ä? 8

Historia: A M 3.4 Rajapinnat rajapinta Abstrakti luokka X tyhjä toteutus B C tietorakenteet A Y Z aliohjelmia B tietorakenteet tietorakenteet Aliohjelmakirjasto C A A Palvelun kutsumuoto (signature) Palvelun toteutus moduuli Moduulikirjasto B C luokka B C Luokkakirjasto 9

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

Tarjotut ja vaaditut rajapinnat UML 2.0:ssa PowerSource tarjottu rajapinta Car Engine PowerSource vaadittu rajapinta Car PowerSource Engine 11

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();... 12

Portit UML 2.0:ssa Vuorovaikutuksen mahdolllistava kontaktipiste komponentin ja sen ympäristön välillä PowerSource PowerSource Portti Engine host Engine Warnings Warnings 13

3.5 Rajapintojen sopimuspohjainen määm äärittely design-by-contract (Eiffel) tuloehto: täytyy päteä kun palvelua kutsutaan Palvelun pyytäjä palvelun rajapinta Palvelun tarjoaja Tulo- ja jättöehdot määrittelevät palvelun merkityksen sallivat osapuolten vaihtamisen, kunhan tulo- ja jättöehdot pysyvät voimassa määräävät tarkistusvastuun osapuolten välillä jättöehto: täytyy päteä kun palvelu on suoritettu, olettaen että tuloehdot olivat voimassa kun palvelu aloitettiin 14

Luokka/komponentti invariantit Person age: int toberetired: int op1(...) op2(...) op3(...) invariant age > 0 & age < toberetired 15

Periytyminen & tulo- ja jättj ttöehdot pre' post' pre post A public oper(...) pre post pre' pre post' post B public oper(...) pre' post' pre pre' post' post C pre post' Mikä on oikea vaihtoehto (A,B,C,D)? pre' post D 16

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? 17

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? 18

Design by contract: esimerkki (1) class Stack { private Object [] storage; private int top; public Stack(int size) { storage = new Object[size]; top = -1; public int size() {return top+1 public boolean full() {return top == storage.length; public void push(object x) { if (top < storage.length-1) { storage[++top] = x; else { System.out.println("Overflow"); 19

Design by contract: esimerkki (2) public Object pop() { // don t worry about memory leaks here if (top >= 0) { return storage[top--]; else { System.out.println("Underflow"); return null; client:... if s.size() > 0 then {s.pop(); else {... error handling...... Ongelmia? 20

Design by contract: esimerkki (3) Tulo- ja jättöehtoja käyttämällä: interface Stack { Object pop() // pre size() > 0; // post size = old size 1; class ArrayStack implements Stack { public Object pop() { return storage[top--]; Todista, että tuo- ja jättöehdot ovat aina voimassa (?) Generoi koodi, joka tarkistaa että tulo- ja jättöehdot ovat aina voimassa (?) 21

Käytännöllinen ratkaisu: poikkeukset poikkeus = palvelun tarjoaja ei pysty täyttämään sopimusta palvelumetodi joko täyttää sopimuksen tai aiheuttaa poikkeuksen edellyttää, että palvelun tarjoaja pystyy havaitsemaan kyvyttömyytensä poikkeuksista tulee osa rajapintaa ei edellytä formaaleja tulo- ja jättöehtoja public Object pop() throws Underflow { // pre: stack non-empty // post: stack size reduced by one // Underflow: stack is empty upon entry if (top >= 0) { return storage[top--]; else { throw new Underflow(this); 22

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

Komponentin alkutilan muuttaminen Client :Comp ServicesI setproperty(...) Comp create setproperty(...) use 24

Javalla: class Button extends Component... {... String label; public Button() {... public Button(String arg) { label = arg;... public setlabel(string arg) { label = arg;... 25

Vaadittujen rajapintojen toteutuksen antaminen tai muuttaminen ActionListener Button AppLogic ActionListener XLogic 26

Aliluokittaminen Button CompanyButton 27

Javalla: class CompanyButton extends Button { public CompanyButton(String arg) { super(arg); label = arg.touppercase(); public void setlabel(string arg) { label = arg.touppercase(); 28

Särkyvän 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 29

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

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