Olioperustaisuus ohjelmistotuotannossa perinteinen top-down toiminnan tarkennus karkea kuvaus tarkennuksia ohjelmakoodi Olioperustaisuus ohjelmistotuotannossa Perinteisen osituksen ongelmia komponentit riippuvat ylemmällä tasolla tehdyistä ratkaisuista -> pieni muutos ylätasolla voi aiheuttaa suuria muutoksia alempana komponentit sidoksissa yksittäisen ohjelmiston toiminnallisiin vaatimuksiin -> eivät ole helposti uudelleenkäytettävissä Harri Laine 1
Olioperustaisuus ohjelmistotuotannossa Olioperustainen ohjelmistosuunnittelu: ohjelmien tehtävänä on simuloida sovellusalueen tai ongelman ilmiöitä tai tapahtumia - muodostaa tietokoneessa toimiva malli sovellusalueesta luokat ja oliot vastaavat sovellusongelman ilmiöitä ja tapahtumia luokat ja oliot ovat itsenäisiä, vaikka toimivatkin yhdessä toiminnan yksityiskohdat eivät näy ulospäin uudelleenkäyttö sovellusalueella helppoa muutokset paikallisia? muutoskohdat helppo löytää? Oliolähestymistapa Olio: ohjelmistokomponentti, jolla on omat tietorakenteet ja itsenäinen käyttäytyminen tietotyyppi -> muuttuja luokka -> olio tieto ja toiminta muodostavat pakkauksen Harri Laine 2
Oliolähestymistapa Oliolähestymistavassa tiedon ja sitä käsittelevän toiminnan katsotaan kuuluvan yhteen yhdeksi kokonaisuudeksi - luonnollinen yhteenkuuluvuus Olion reaalimaailman vastineita olisivat parhaiten erilaiset aktiiviset toimintaa suorittavat yksiköt (ihmiset, organisaatioyksiköt, koneet,...) mutta koostuuko todellisuus vain tällaisista? onko tiedon ja toiminnan paketointi asian tarpeetonta monimutkaistamista - ihminen on suhteellisen luonnollinen (?) olio, mutta onko toiminnallisuudella varustettu vastaanottovirkailija enää sitä? onko olemassa luonnollista tapaa organisoida toimintaa? Oliolähestymistapa Oliolähestymistavassa yhtenä merkittävänä hyötynä pidetään sitä, että samaa oliokäsitteistöä käytetään kaikissa ohjelmistoprosessin vaiheissa analyysissä suunnittelussa ohjelmoinnissa abstaraktiotason muuttumisesta johtuen kuitenkin sovellettuna eri kohdealueisiin analyysissä luonnollisia olioita (ihmisolio, asiakirjaolio, ) suunnittelussa teknisiä olioita (tiedosto-olio, näyttöolio,...) Harri Laine 3
Oliokäsitteitä Abstrahointi (abstraction) voidaan keskittyä ohjelmiston tärkeimpiin komponentteihin voidaan valita tarkastelutaso yksityiskohdat voidaan jättää täsmennettäviksi myöhemmin jopa ohjelma voidaan kirjoittaa myöhemmin täsmentyvänä Kapselointi (encapsulation) ulkoinen liittymä erotetaan toteutuksesta sisäiset yksityiskohdat piiloon ulkopuolisilta turvallisuus paranee, ylläpiton rajautuu, uudelleenkäyttöön paremmat mahdollisuudet Oliokäsitteitä Tiedon ja käyttäytymisen yhdistäminen olion tietosisältöä voi käsitellä vain olion omin operaatioin muut eivät pääse sotkemaan elinkaari hallinnassa luokka = abstrakti tietotyyppi Jakaminen (sharing) yhteinen muoto ja käyttäytyminen voidaan koota omaksi kokonaisuudekseen (luokaksi) joka on jaettavissa (perittävissä) keskitetysti uudelleenkäyttö, kuvauksen taloudellisuus Harri Laine 4
Oliokäsitteitä Identiteetti (identity) tietosisältö ei määrää oliota (kuten esim. relaatiomallissa) oliot on erotettavissa toisistaan vaikka ne olisivat identtisiä Luokittelu (classification) keskenään samankaltaiset oliot kuvataan samassa luokassa luokka on olioiden malli voidaan määritellä luokkien välisiä yhteyksiä, esimerkiksi hierarkkinen riippuvuus ihminen : mies / nainen Oliokäsitteitä Monimuotoisuus (polymorphism) nimeen kytketyn toiminnan erilaisuus eri (sukulais)luokissa olio suorittaa nimetyn operaation oman luokkansa mukaisesti (=> olio voi kuulua vain yhteen luokkarakenteen lehtiluokkaan, eli luokkaan, jolla ei ole aliluokkia) sihteeri.maksaa ={antaa rahaa tarjoilijalle} johtaja.maksaa = {pyytää, että sihteeri.maksaa} nimettyä operaatiota pyytävän olion ei tarvitse tietää mihin luokkaan operaation suorittaja todella kuuluu tarjoilija voi pyytää maksua, joko sihteeriltä tai johtajalta (ja saa aina rahat) myöhäinen sidonta, operaation toteutustapa ratkeaa vasta operaatiota pyydettäessä laskun maksutapa selviää vasta kun lasku esitetään Harri Laine 5
Oliokäsitteitä - perintä Perintä (inheritance) muotoa voidaan jakaa luokkien väliseen hierarkiaan perustuen aliluokat (subclass) perivät muodon yliluokiltaan (superclass) vastaanottovirkailijakin on ihmisen muotoinen aliluokat erikoistavat (specialise) yleisiä yliluokkia erikoistettu aliluokka voi lisätä perittyyn muotoon omia ominaisuuksia aliluokka voi uudelleenmääritellä (syrjäyttää) (override) perimänsä ominaisuuden ominaisuudet attribuutteja (tietorakenteita) tai operaatioita Oliokäsitteitä - perintä ikä ihminen mies parta yksittäisperintä nainen hameita Mauno ikä: 75 parta: ei ilmentymiä Tellervo ikä: 72 hameita:37 Harri Laine 6
Oliokäsitteitä - perintä Auto moottoritilavuus Asunto vuodepaikkoja Asuntoauto moniperintä HIP-111 moottoritilavuus:3500 vuodepaikkoja:4 Oliokäsitteitä - perintä perintä on merkittävin ero olioohjelmoinnin ja muiden ohjelmointiparadigmojen välillä. Perinnän päätavoitteet: käsittellinen mallintaminen (puhdashenkinen europpalainen koulukunta) yleistäminen/erikoistaminen pääpaino ohjelmistokehityksen määrittely- ja analyysivaiheessa koodin uudelleenkäyttö (pragmaattinen amerikkalainen koulukunta) attribuuttien ja operaatioiden periminen kasvattava ohjelmakehitys pääpaino suunnittelu- ja toteutusvaiheessa Harri Laine 7
Oliomallintaminen Mallinnettaessä järjestelmää olioilla erotetaan yleensä kaksi puolta: staattinen millaisia luokkia - tietosisältö, yhteydet, rakenteet mitä palveluja tarjolla dynaaminen miten oliot toimivat yhteistyössä millainen on olion elinkaari Eri menetelmät tarjoavat erilaisia malleja sille, mitä oliokeskeisen määrittelyvaiheen yhteydessä pitäisi tehdä ja miten. Oliomallintaminen - Booch Tunnista luokat ja oliot etsi ehdokasolioita ja luokkia analysoi olioiden käyttäytymistä tunnista käyttöskenaariot (miten tavalliseti toimitaan) määritä attriobuutit ja operaatiot kullekin luokalle Määritä luokkien semantiikka valitse skenaariot ja analysoi ne kiinnitä luokille vastuut jaa vastuuta ja tasapainota käyttäytyminen tutki olion rooleja ja vastuita määrittele operaatiot vastuiden hoitamiseksi selvitä olioiden yhteistyötä Harri Laine 8
Oliomallintaminen - Booch Tunnista luokkien ja olioiden väliset yhteydet millaisia riippuvuuksia tunnista olioiden asemat yhteyksissä varmenna skenaarioiden toteutuvuus Tarkenna laadi kaaviot laadi hierarkia ryhmittele Toteuta Oliomallintaminen - Coad & Yordon Tunnista luokat Laadi hierarkia Määrittele sisältyvyydet Jaa luokat osa- alueisiin (subject) Määrittele attribuutit Määrittele palvelut Harri Laine 9
Oliomallintaminen - Jacobsson Tunnista käyttäjäryhmät Määrittele vaatimukset Määrittele käyttäjäryhmät Määrittele käyttötapaukset Laadi karkea kuvaus luokista ja yhteyksistä Varmista käyttötapausten toteutuvuus Laadi analyysimalli Määrittele liittymät ja niiden oliot Määrittele luokkarakenne Määrittele operaatiot Jaa kokonaisuus osajärjestelmiin Varmista käyttötapausten toteutuminen Oliomallintaminen - Rumbaugh Laadi luokkamalli tunnista relevantit luokat määritä attribuutit määritä yhteydet määritä luokkahierarkia Laadi käyttäytymismalli luo käyttöskenaariot määritä skenaarioon liittyvä viestinvälitys luo viestiyhteyskaaviot kuvaa olioiden elinkaaret varmista skenaarioiden toteutuvuus Harri Laine 10
Oliomallintaminen - Rumbaugh Laadi toimintomalli määritä järjestelmän syötteet ja tulosteet kuvaa toiminta tietovirtoina määrittele toiminta tehtäväkuvauksin määritä toimintaan kohdistuvat vaatimukset ja rajoitteet Olioiden/luokkien tunnistaminen Oliolähestymistapa soveltuu parhaiten tilanteisiin, joissa simuloidaan toimintaa sovellusalueella: sovelluksen oliot vastaavat pitkälti aktiivisia toimijoita sovellusalueella olioiden palvelut vastaavat niitä tehtäviä, joita sovellualueen toimijat suorittavat jäsennettävä sovellusalue, tunnistettava toimijat ja heidän tehtävänsä, selvitettävä mitä tietoa toimijat tarvitsevat kyetäkseen toimimaan Harri Laine 11
Olioiden/luokkien tunnistaminen - tekstin analysointi grammatical parse Laadi ongelmaa kuvaava teksti Analysoi kuvausta, etsi lauseista luokkaehdokkaita, alleviivaa ne Luokkaehdokkaita ongelman kannalta olennaiset substantiivit Tunnista ja karsi synomyymit Valitse luokat Määritä attribuutit etsi tekstistä ilmiöitä, jotka kuvailevat valittuja olioita Määritä yhteydet etsi tekstistä kuvauksia yhteyksistä, rakenteita, joissa oliot ovat mukana Määritä palvelut etsi tekstistä tekemiseen ja toimintaan liittyviä ilmauksia, kohdista ne luokkiin Olioiden/luokkien tunnistaminen - tekstin analysointi grammatical parse Luokkina tulevat kyseeseen, esim. ulkoiset oliot tahot, jotka tuottavat tai saavat tietoa järjestelmältä toiset järjestelmät, ihmiset, laitteet tietosisältöön kuuluvat asiat raportit, näytöt, kirjeet, signaalit tapahtumat, joihin järjestelmän pitäisi reagoida roolit, jotka edustavat erilaisia tapoja toimia järjestelmän kanssa organisaatioyksiköt paikat, jotka luovat ympäristön ongelmalle rakenteet Toiminnot eivät ole luokkia Harri Laine 12
Esimerkki Tarkastellaan seuraavaa kuvausta: SafeHome software enables the homeowner to configure the security system when it is installed, monitors all sensors connected to the security system and interacts with the homeowner through a key pad and function keys contained in the SafeHome control panel. During installation, the SafeHome control panel is used to 'program' and configure the system. Each sensor is assigned a number and type, a master password is programmed for alarming and disalarming the system, and telephone numbers are input for dialing when a sensor event occurs. Esimerkki When a sensor event is recognized, the software invokes an audible alarm attached to the system. After a delay time that is specified by the homeowner during the system configuration activities, the software dials a telephone number of a monitoring service, provides information about the location, reporting the nature of the event that has been detected. The number will be redialed every 20 seconds until telephone connection is obtained. All interaction with safehome is managed by a user interaction subsystem that reads input provided through the key pad and function keys, and displays prompting messages and system status on the LDC display. Keyboard interaction takes the following form Harri Laine 13
Esimerkki - ehdokkaita homeowner sensors key pad function keys control panel installation type number telephone numbers audible alarm security system system status interaction subsystem master password sensor event ulkoinen olio / rooli ulkoinen olio ulkoinen olio ulkoinen olio ulkoinen olio tapahtuma attribuutti attribuutti asia ulkoinen olio organisaatioyksikkö / asia attribuutti organisaatioyksikkö / asia asia tapahtuma Esimerkki - ehdokkaita lisää nature of the event configuration activities telephone connection prompting messages LDC display monitoring service location attribuutti toiminta ulkoinen olio asia ulkoinen olio organisaatioyksikkö paikka Harri Laine 14
Ehdokasluokasta luokaksi - kriteerejä (Coad & Yourdon) kaikkien pitäisi toteutua (1) muistamistarve tiedon säilyttäminen luokan olioista on välttämätöntä järjestelmän toiminnan kannalta sisältää muistettavaa tietoa (2) palvelujen tarjonta luokan olioiden täytyy tarjota palveluita, luokan attribuuttien käsittelyyn (3) moniattribuuttisuus määritysvaiheessa yksiattribuuttiset oliot harvoin ovat oleellisia ongelman kannalta Ehdokasluokasta luokaksi - kriteerejä (Coad & Yourdon) (4) attribuutien jaettavuus luokaaan on liitettävissä joukko sen kaikille esiintymille soveltuvia attribuutteja (5) palvelujen jaettavuus luokkaan on liitettävissä joukko palveluita, jotka luokan kaikki esiintymät kykenevät suorittamaan (6) olennaisuus ongelman kannalta Harri Laine 15
Esim. ehdokkaiden analysointi homeowner ulkoinen olio / rooli -1, -2, +6 sensors ulkoinen olio + kaikki key pad ulkoinen olio -6 function keys ulkoinen olio -6 control panel ulkoinen olio +kaikki installation tapahtuma -1, -2 type attribuutti number attribuutti telephone numbers asia -3 audible alarm ulkoinen olio -1, + muut security system organisaatioyksikkö / asia + kaikki system status attribuutti interaction subsystem organisaatioyksikkö / asia -6 master password asia -3 sensor event tapahtuma + kaikki Esim. ehdokkaiden analysointi nature of the event attribuutti configuration activities toiminta telephone connection ulkoinen olio -1,-2,-3, prompting messages asia -1,-6 LDC display ulkoinen olio -6 monitoring service organisaatioyksikkö -1, -2 location paikka -1,-2 Harri Laine 16
Atribuutteja: sensor Esim. ehdokkaiden analysointi type number tuning data control panel function keys LDC display messages audible alarm alarm specs. Delay state Esim. ehdokkaiden analysointi lisää attribuutteja security system telephone numbers system status location delay time master password no of tries sensor event nature of event telephone numbers Harri Laine 17
Esim. ehdokkaiden analysointi Yhteydet security system contains sensor manages emits provides sensor event contol panel audible alarm Esim. ehdokkaiden analysointi Palvelut sensor turnon turnoff adjust control panel get Input show State show Message audible alarm Emit Alarm adjust delay Harri Laine 18
Esim. ehdokkaiden analysointi palvelut jatkuu security system Turn on Turn off Register location Adjust delay Identify Process event sensor event Set connection Oliot ja määrittely Mitä määrittelyvaiheessa on välttämättä kuvattava järjestelmän toiminnalliset vaatimukset tarvitaanko tähän olioita - EI auttavatko oliot - VÄHÄN olioita käytettäessä toiminta ja siihen liittyvät vastuut saadaan jaettua eri luokille => oliokäsitteestä olisi apua kuvaamaan esim. osajärjestelmiä olioiden yläpuolelle tarvitaan toiminnan kokonaiskuvaus jos ollaan oliokeskeisiä, pitäisikö koko järjestelmä nähdä yhtenä oliona, joka tarjoaa palveluja - KYLLÄ käyttötapaukset (use case) ovat järjestelmän käyttäjilleen tarjoamien palvelujen määrityksiä Harri Laine 19
Oliot ja määrittely Mitä määrittelyvaiheessa on välttämättä kuvattava yleiskuva järjestelmän tietosisällöstä siinä laajuudessa, että paljelut tulevat ymmärretyiksi voiko tässä käyttää olioita - KYLLÄ keskeiset luokat ja niiden väliset yhteydet Harri Laine 20