Esittely latautuu. Ole hyvä ja odota

Esittely latautuu. Ole hyvä ja odota

Komponenttipohjainen ohjelmistotekniikka (TJTSS56) Osa 1 Kevätlukukausi 2010 Jyväskylän yliopisto Tietojenkäsittelytieteiden laitos Markku Sakkinen.

Samankaltaiset esitykset


Esitys aiheesta: "Komponenttipohjainen ohjelmistotekniikka (TJTSS56) Osa 1 Kevätlukukausi 2010 Jyväskylän yliopisto Tietojenkäsittelytieteiden laitos Markku Sakkinen."— Esityksen transkriptio:

1 Komponenttipohjainen ohjelmistotekniikka (TJTSS56) Osa 1 Kevätlukukausi 2010 Jyväskylän yliopisto Tietojenkäsittelytieteiden laitos Markku Sakkinen

2 Kurssin tavoitteita ja lähtökohtia – Keskitytään ohjelmistokomponenttien ja niiden käytön teknisiin aspekteihin. – Myös ei-teknisiä (taloudellisia, organisationaalisia ym.) käsitellään, mutta suppeasti. – Kiinnostuksen kohteena ovat yleiset periaatteet, eivät niinkään yksittäisten komponenttitekniikoiden (COM, EJB ym.) yksityiskohdat. – Myös sellaisia tutkimuksellisesti mielenkiintoisia lähestymistapoja pyritään esittelemään, joilla ei ole (ainakaan tällä hetkellä) merkitystä käytännön ohjelmistotyössä. – Luennoijan taustan ja omien kiinnostusten vuoksi näkökulma voi olla hyvin oliohenkinen. – Kurssi pidetään ensimmäistä kertaa, joten siinä esiintyy todennäköisesti ”lastentauteja”. – Sisältö ei ole läheskään kokonaan kiinnitetty ennakolta, vaan opiskelijat voivat vielä vaikuttaa siihen. Komponenttipohjainen ohjelmistotekniikka (Markku Sakkinen) – Osa 1 24. 1. 2010 2

3 Lähdekirjallisuutta Ensisijainen: Clemens Szyperski (sekä Dominik Gruntz ja Stephan Murer): Component Software – Beyond Object-Oriented Programming (2. laitos), Addison-Wesley (UK) 2002 Kirja on huomattavasti uudistettu ja laajennettu 1. laitoksesta, joka ilmestyi 1999. Se on vaikeasti saatava ja kallis, joten riittävä opiskelumateriaali täytyy järjestää muulla tavoin. Toissijainen: Johannes Sametinger: Software Engineering with Reusable Components Springer 1997 Lisää (konferenssi- ja lehtiartikkeleita) myöhemmin. Hyviä uudempia yleisluontoisia kirjoja ei ole löytynyt. Komponenttipohjainen ohjelmistotekniikka (Markku Sakkinen) – Osa 1 24. 1. 2010 3

4 Mitä komponentit ovat? – Termiä ”komponentti” käytetään hyvin monissa merkityksissä ja vivahteissa. – Sametingerin hyvin yleiseksi tarkoitettu määritelmä (s. 68) vaatii uudelleenkäytettävältä ohjelmistokomponentilta seuraavia ominaisuuksia: Itseriittoisuus (self-containedness). Tästä tehdään sellainen myönnytys, että komponentti saa tarvita muita komponentteja toimiakseen, mutta nämä riippuvuudet on dokumentoitava selvästi. Tunnistettavuus (identification), johon sisältyy myös yhtenäisyys. Toiminnallisuus (functionality). Rajapinnat (interfaces), jotka on selvästi määritelty ja jotka kätkevät uudelleenkäytön kannalta tarpeettomat yksityiskohdat. Dokumentointi. Uudelleenkäyttötila (reuse status), johon kuuluu tieto mm. omistajasta, ylläpitäjästä ja laadusta. – Tämä määritelmä ei rajoitu pelkästään suoritettaviin komponentteihin, vaan komponentti voi olla mitä artefaktilajia hyvänsä, esim. suunnitteludokumentti. Komponenttipohjainen ohjelmistotekniikka (Markku Sakkinen) – Osa 1 24. 1. 2010 4

5 Mitä komponentit ovat? (jatkoa) – Szyperskin luonnehdinta (s. 36) on paljon erikoistuneempi. Sen mukaan komponentin tunnusmerkit ovat seuraavat: Riippumattomasti käyttöönotettava (deployable) yksikkö. ”Kolmannen osapuolen” (siis muiden kuin sen valmistajan) suorittaman kokoonpanon eli koostamisen (composition) yksikkö. Ei ulospäin havaittavaa tilaa (state). – Tämä soveltuu pääasiassa suoritettaviin komponentteihin. – Vuoden 1996 ECOOP-konferenssin WCOP-työpajassa (Workshop on Component- Oriented Programming) päädyttiin seuraavaan määritelmään (Szyperski, s. 41): ”Ohjelmistokomponentti on kokoonpanon yksikkö, jolla on sopimuksenomaisesti määritellyt rajapinnat ja vain eksplisiittisiä riippuvuuksia ympäristöstään. Ohjelmistokomponentti voidaan ottaa käyttöön itsenäisesti, ja kolmannet osapuolet voivat käyttää niitä koostamiseen.” Tällä kurssilla rajoitutaan lähinnä näiden määritelmien mukaisiin komponentteihin. Määritelmät eivät kuitenkaan aukea ilman selityksiä. Komponenttipohjainen ohjelmistotekniikka (Markku Sakkinen) – Osa 1 24. 1. 2010 5

6 Mitä komponentit ovat? (jatkoa) – Riippumattomasti käyttöönotettava yksikkö tarkoittaa, että komponenttia voidaan käyttää vain kokonaisuutena se ei riipu ympäristöstään ja muista komponenteista muuten, kuin että sen eksplisiittiset vaatimukset täytetään. – Kolmannet osapuolet tarkoittavat sellaisia, joilla ei tarvitse olla mitään tietoa komponentin toteutuksesta. – Ulospäin havaittavan tilan kieltäminen tarkoittaa ensi sijassa sitä, että asiakkaiden kannalta saman komponentin eri ilmentymiä ei tarvitse eikä voi erottaa toisistaan. Tätä täsmennetään vielä myöhemmin. Määritelmät eivät vaadi komponenttien olevan binaarimuotoisia, vaan ne voivat olla myös lähdekielisiä. Ilmeisesti näihin määritelmiin sopii esim. aliohjelma, jossa ei ole kutsujen välillä säilyvää tilaa ja joka ei kutsu muita kuin standardikirjastojen aliohjelmia. vastaavanlainen kokonainen aliohjelmakirjasto, jonka aliohjelmat voivat kuitenkin kutsua toisiaan Komponenttipohjainen ohjelmistotekniikka (Markku Sakkinen) – Osa 1 25. 1. 2010 6

7 Komponentit, luokat ja oliot – Olio-ohjelmoinnin luokka on monessa suhteessa komponentin kaltainen, mutta luokkakohtaisia (”staattisia”) atribuutteja ei saisi olla luokilla on yleensä suoria keskinäisiä riippuvuuksia: periytymis-, koostamis- ja käyttösuhteita. – Kokonainen luokkakirjasto voisi täyttää komponentin määritelmän, jos sen luokat ovat riippuvaisia vain toisistaan ja standardiluokista. – Luokkakirjastot eivät yleensä ole helposti koostettavia komponentteja, koska eri kirjastojen luokkien käyttäminen yhdessä voi aiheuttaa ristiriitoja. – Joidenkin kielien (esim. Modula-2, Ada) moduulit ovat vähintään yhtä lähellä komponenttia kuin luokat. – Olio ei mitenkään voi olla komponentti, sillä olion tärkeimpiä ominaisuuksia on sisäinen tila, joka vaikuttaa sen käyttäytymiseen (ja atribuutit ovat useimmissa oliokielissä ainakin saman luokan muiden olioiden suoraan käytettävissä) jokaisella oliolla on oma, pysyvä identiteetti ja oma elinkaari luomisesta tuhoutumiseen. Komponenttipohjainen ohjelmistotekniikka (Markku Sakkinen) – Osa 1 25. 1. 2010 7

8 Komponentit, luokat ja oliot (jatkoa) – Sekaannuksia aiheutuu helposti sellaisista tilanteista, joissa johonkin komponenttiin liittyy vain yksi ”olio”. Esim. tietokannan hallintajärjestelmää (ohjelmistoa) voidaan pitää hyvin isona ja monimutkaisena komponenttina. Sama TKHJ hoitaa useimmiten vain yhtä tietokantaa, joka ei ole komponentti. – Vastaavasti kirjallisuudessa puhutaan usein oliosta silloinkin, kun tarkoitetaan luokkaa (joskus myös päin vastoin) vaikka luokasta useimmiten luodaan useita olioita. – Useimmiten (myös tällä kurssilla) komponentteja käytetään olioympäristössä, olio- ohjelmoinnin jatkeina. Komponentit voivat luoda ja käsitellä olioita. Itse komponentti ei voi sisältää luomiaan olioita eikä edes viitteitä niihin, koska sillä ei saa olla omaa tilaa. – Komponenttien ja luokkien suhde (samassa järjestelmässä)? lähdekielisissä komponenteissa binaarisissa komponenteissa Käsitellään myöhemmin. Komponenttipohjainen ohjelmistotekniikka (Markku Sakkinen) – Osa 1 25. 1. 2010 8

9 Komponentit ja rajapinnat – Yleisesti puhutaan komponentin tarjoamista ja vaatimista rajapinnoista (jälkimmäiset ovat ”eksplisiittiset riippuvuudet ympäristöstä”). – Oliokeskeisessä ympäristössä kukin rajapinta on joukko operaatioiden määrittelyjä (kuten luokkienkin rajapinnat). Miten määritellään myös semantiikkaa eikä pelkkää kutsumuotoa? – Muissa ympäristöissä rajapinnat voivat olla erilaisia. Unixissa putkien kautta toisiinsa kytkettäviä ohjelmia (varsinkin suodattimia) voidaan pitää komponentteina (Sametinger). Rajapinta määrittelee ohjelmien välillä siirrettävän tiedon muodon ja merkityksen. – Komponentti voi toteuttaa kunkin tarjoamansa operaation joko suoraan itse tai epäsuorasti. Epäsuorassa vaihtoehdossa operaatiokutsu välitetään jollekin oliolle (dynaaminen sidonta). Komponenttipohjainen ohjelmistotekniikka (Markku Sakkinen) – Osa 1 25. 1. 2010 9

10 Komponentit ja ilmentymät Komponentti voi toteuttaa joitakin palveluita suoraan itse --- suorat rajapinnat. Yleensä komponentista tarvitaan myös ilmentymiä (instances), jotka toteuttavat epäsuoria rajapintoja. Oliokeskeisessä ympäristössä olioita, siis luokkien (eivätkä yksinkertaisesti itse komponentin) ilmentymiä. Komponentilla on (ts. se toteuttaa) rajapintoja, joiden kautta ilmentymiä luodaan. Ilmentymän käyttö on välttämätöntä, jos tarvitaan sisäistä tilaa. Jos sama ilmentymä toteuttaa useita liittymiä, niin niiden väliset yhteydet (tilan kautta) on määriteltävä komponentin sopimuksessa. Szyperskin esimerkki (yksinkertainen, mutta keinotekoinen): On määritelty erikseen rajapinnat jonoon panemiselle ja jonosta ottamiselle. Jono-ilmentymän täytyy toteuttaa nämä rajapinnat niin,että jonoon pannut alkiot saadaan sieltä ulos samassa järjestyksessä. Komponenttipohjainen ohjelmistotekniikka (Markku Sakkinen) – Osa 1 2. 2. 2010 10

11 Eksplisiittiset ympäristöriippuvuudet Vaaditut rajapinnat (ts. muiden tarjoamat palvelut) eivät riitä, vaan muutakin tarvitaan. Komponenttimalli (CORBA, EJB, COM ym.) Muu ohjelmisto- ja laitealusta Täydellistä tietoa vaadituista rajapinnoista ei yleensä ole komponentin yhteydessä. Komponenttipohjainen ohjelmistotekniikka (Markku Sakkinen) – Osa 1 2. 2. 2010 11

12 Eksplisiittiset ympäristöriippuvuudet Vaaditut rajapinnat (ts. muiden tarjoamat palvelut) eivät riitä, vaan muutakin tarvitaan. Komponenttimalli (CORBA, EJB, COM ym.) Muu ohjelmisto- ja laitealusta Täydellistä tietoa vaadituista rajapinnoista ei yleensä ole komponentin yhteydessä. Komponenttipohjainen ohjelmistotekniikka (Markku Sakkinen) – Osa 1 3. 2. 2010 12


Lataa ppt "Komponenttipohjainen ohjelmistotekniikka (TJTSS56) Osa 1 Kevätlukukausi 2010 Jyväskylän yliopisto Tietojenkäsittelytieteiden laitos Markku Sakkinen."

Samankaltaiset esitykset


Iklan oleh Google