UMLnotaatio staattinen ja dynaaminen mallintaminen Kalvot Olioperustainen ohjelmistokehitys



























![Aktiviteettikaavio Asiakas Virkailija Pyydä auto : Lasku [avoin] Tee varaus Tee lasku Maksa Valmistele Aktiviteettikaavio Asiakas Virkailija Pyydä auto : Lasku [avoin] Tee varaus Tee lasku Maksa Valmistele](https://slidetodoc.com/presentation_image/57bc391c37c7a3e58301950b31eeb7f4/image-28.jpg)
![Aktiviteettikaavio alkutila Asiakas Virkailija Pyydä auto säikeiden haarautuminen (fork) : Lasku [avoin] säikeiden yhdistyminen Aktiviteettikaavio alkutila Asiakas Virkailija Pyydä auto säikeiden haarautuminen (fork) : Lasku [avoin] säikeiden yhdistyminen](https://slidetodoc.com/presentation_image/57bc391c37c7a3e58301950b31eeb7f4/image-29.jpg)















- Slides: 44
UML-notaatio staattinen ja dynaaminen mallintaminen Kalvot: Olioperustainen ohjelmistokehitys Tampereen yliopisto, syksy 2000 Roope Raisamo SE-02
Mallinnusmenetelmistä • Vaatimusmäärittelyä pitäisi nyt hyödyntää olioanalyysissa ja –suunnittelussa. • Sitä varten onkin syytä vähän tutkailla, että mitä mokomien analyysien ja suunnitelmien pitäisi olla. • Alamme esittelemällä UML-kielen, jota voi käyttää oliomallien rakentamiseen analyysissä ja suunnittelussa. SE-02
Mallinnusmenetelmistä • Muista: menetelmiä käytettävä soveltaen ja harkiten • Tällä kurssilla tarkastellaan olioanalyysiä ja suunnittelua sitoutumatta tiettyyn menetelmään SE-02
Mallinnusmenetelmistä • Kurssilla esitettävään yksinkertaistettuun menetelmään ovat vaikuttaneet lähinnä: – Rumbaugh et al. : OMT (Object Modeling Technique) – Nokia/Jaaksi: OMT++ – Jacobson: OOSE (Object-Oriented Software Engineering) • Booch, Rumbaugh, Jacobson: Unified Modeling Language (UML) – Nykyisin OMG: n (Object Management Group) kehittämä standardoitu mallinnuskieli SE-02
UML: n kaaviotyypit Ohjelmistokehitys Korkean tason toiminnalisuus Rakenne Esimerkkejä Sijoittelukaaviot Käyttötapauskaaviot Käyttäytyminen Oliokaaviot Sekvenssikaaviot Yhteistyökaaviot Luokkakaaviot Tilakaaviot Aktiviteettikaaviot Komponenttikaaviot SE-02
UML: n kaaviotyypit • Korkean tason toiminnallisuus – käyttötapauskaaviot • Järjestelmän staattinen ja dynaaminen rakenne – – oliokaaviot luokkakaaviot sijoittelukaaviot komponenttikaaviot SE-02
UML: n kaaviotyypit • Järjestelmän dynaaminen käyttäytyminen – – sekvenssikaaviot yhteistyökaaviot tilakaaviot aktiviteettikaaviot • Kaikki kaaviotyypit esitellään seuraavassa käyttäen esimerkkinä autojen vuokrausjärjestelmää SE-02
UML: n kaavioiden peruselementtejä ja -suhteita • Kaaviot koostuvat peruselementeistä ja niiden välisistä suhteista. • Elementit ovat geometrisia kuvioita. – Elementeillä usein myös sisäinen rakenne (esimerkiksi luokan attribuutit ja operaatiot) • Suhteet ovat elementtejä yhdistäviä viivoja. – Suhteisiin voidaan liittää tarkempaa informaatiota (assosiaation nimi, kertautuminen, roolit) UML: n graafinen ulkoasu ei ole tarkasti määrätty. SE-02
UML: n kaavioiden peruselementtejä ja -suhteita Elementit Luokka Suhteet Nimi Riippuvuus Assosiaatio Tila 0. . 1 * rooli Nimi Kooste Pakkaus Nimi Yleistys (Periytyminen) Kommentti Teksti Toteutus jne. SE-02
Käyttötapauskaavio Käyttötapaus (use case) on kuvaus järjestelmän ja sen käyttäjien välisestä vuorovaikutuksesta tietyn, käyttäjän kannalta mielekkään tuloksen aikaansaamiseksi. – Kuvaus annetaan usein tavallisena tekstinä, joka tarkennetaan sekvenssikaavioiksi – Esimerkkejä käyttötapauksista: luottotarkistus, lainahakemus, valmistelu SE-02
Käyttötapauskaavio (use case diagram) kuvaa järjestelmän käyttötapausten väliset suhteet ja käyttötapauksiin osallistuvat järjestelmän ulkopuoliset toimijat. – käytetään järjestelmän käyttöyhteyden ja vaatimusten korkean tason kuvaukseen – jos käyttötapaus sisältyy toiseen, laajemmasta piirretään katkonuoli sisältyvään käyttötapaukseen päin SE-02
Käyttötapauskaavio Ajoneuvojen vuokrausjärjestelmä Varaus Käyttöönotto Palautus Asiakas <<include>> Huolto SE-02 Virkailija
Käyttötapauskaavio SE-02
Luokkakaavio (class diagram, static structure diagram) kuvaa järjestelmään kuuluvia luokkia ja niiden välisiä suhteita. – luokkakaaviota käytetään järjestelmän staattisen rakenteen kuvaukseen SE-02
Luokkakaavio Ohjain 1 1 Kohde palauta() varaa() ota. Käyttöön() Kohde. Hallinto hallinnoi * Varasto 1 palauta. Kohde(Kohde, Varasto) varaa. Kohde(Kohde) ota. Käyttöön. Kohde(Kohde) HenkilöAuto rekisterinumero huolla(int km) palauta() Talleta huoltoinformaatio (palauta kutsuu) SE-02 Parkki. Alue
Oliokaavio (object diagram) kuvaa olioita ja niiden välisiä suhteita. – luokkakaavion mahdollinen ajoaikainen ilmenemismuoto – oliokaavio antaa esimerkin järjestelmän dynaamisesta rakenteesta tietyllä hetkellä SE-02
Oliokaavio : Kohde. Hallinto luokan ilmentymä: alleviivattu auto 1: HenkilöAuto auto 2 : HenkilöAuto rekisterinumero = XYZ-999 rekisterinumero = ABC-123 SE-02
Oliokaavio Tyyppejä UML: ssä: – – – luokat rajapinnat tietotyypit komponentit prosessointiyksiköt Näiden ilmentymien nimet alleviivataan. SE-02
Sekvenssikaavio (sequence diagram) koostuu tiettyyn vuorovaikutukseen liittyvistä olioista ja niiden välisistä sanomista (message). – sekvenssikaaviota käytetään kuvaamaan oliojoukon välistä vuorovaikutusta tietyssä tilanteessa • aika kulkee ylhäältä alas • vuorovaikutustapahtumat ovat vaakasuuntaisia nuolia • osallistujat kuvataan pystyviivoina – kuvaa usein olioiden vuorovaikutuksen tietyn käyttötapauksen yhteydessä SE-02
Sekvenssikaavio: Palautus alijärjestelmä UI : Kohde. Hallinto auto: HenkilöAuto palauta(auto, parkki) palauta() varastoi(auto) SE-02 parkki: Parkki. Alue
Yhteistyökaavio (collaboration diagram) kuvaa olioiden välistä vuorovaikutusta. – aikaa ei edusta mikään tietty suunta – olioiden yhteydet kuvataan symbolien välisinä viivoina – sijoittelua voidaan käyttää ilmaisemaan loogisesti yhteen kuuluvia olioita – kontrollin kulun suunta voidaan ilmaista nuolella – sanomien ajallinen järjestys voidaan antaa sanomiin liitettyinä numeroina • monitasoinen numerointi: sisäkkäiset operaatiokutsut SE-02
Yhteistyökaavio vastaa edellistä sekvenssikaaviota 1. 1: palauta() auto: Henkilöauto : Kohde. Hallinto 1: palauta(auto, parkki) 1. 2: varastoi(auto) UI SE-02 parkki: Parkki. Alue
Vuorovaikutuskaaviot Sekvenssikaaviot ja yhteistyökaaviot kuvaavat molemmat olioiden välistä vuorovaikutusta. Sikso niitä kutsutaan yhteisesti vuorovaikutuskaavioiksi. SE-02
Tilakaavio (statechart diagram) kuvaa tietyn luokan ilmentymien reagoimisen ulkoisiin tapahtumiin (message). – käytetään tyypillisesti aktiivisten olioiden ajoaikaisen käyttäytymisen spesifiointiin – voidaan antaa tarvittaessa myös muille olioille, joiden käyttäytyminen voidaan ymmärtää tilojen vaihtumisena – koostuu tiloista (attribuuttien arvojen yhdistelmä tietyllä hetkellä) ja niiden välisistä siirtymistä – tilat pyöristettyjä suorakaiteita, siirtymät nuolia – luokan ilmentymä on aina jossakin luokan tiloista – voi sisältää alku- ja lopputilan SE-02
Tilakaavio alkutila Käytettävissä valmis palauta/ lopeta ajan lasku Käytössä ota. Käyttöön/ aloita ajan lasku huolla Huollossa exit/huoltoilmoitus varaa SE-02 Varattu
Aktiviteettikaavio (activity diagram) kuvaa tietyn tehtävän sisäisen logiikan – muodollisesti tilakaavion erikoistapaus – esimerkiksi • yksittäinen operaatio • jokin korkeamman tason tehtävä (yksi tai useampi käyttötapaus), johon osallistuu useita suorittajia – kaavio voidaan jakaa sarakkeisiin, jotka vastaavat kutakin suorittajaa – koostuu toimenpidetiloista (sivureunat täysin pyöristettyjä, ei nimiä) sekä niitä yhdistävistä ilman tapahtumaa olevista siirtymistä SE-02
Aktiviteettikaavio – kaavioon voidaan liittää päätössymboleja (vinoneliö) kuvaamaan kontrollin haarautumista jonkin ehdon perusteella – kaaviolla voidaan myös kuvata rinnakkaisten suoritussäikeiden haarautumista ja yhdistymistä – kaavioon voidaan lisätä tietoalkioita (toiminnan kohteita) olioina – muistuttaa täydellisessä muodossaan läheisesti muissa kuvausmenetelmissä käytettyjä tietovuokaaviota (data flow diagram) • tietovuokaaviot eivät sinänsä kuulu UML: ään SE-02
Aktiviteettikaavio Asiakas Virkailija Pyydä auto : Lasku [avoin] Tee varaus Tee lasku Maksa Valmistele auto Ota auto Rekisteröi vuokraus : Lasku [maks] SE-02
Aktiviteettikaavio alkutila Asiakas Virkailija Pyydä auto säikeiden haarautuminen (fork) : Lasku [avoin] säikeiden yhdistyminen (join) Tee varaus Tee lasku Maksa Valmistele auto Ota auto Rekisteröi vuokraus : Lasku [maks] lopputila SE-02
Komponenttikaavio (component diagram) kuvaa komponentit ja niiden väliset suhteet Komponentti (UML: kaavioissa) voi olla: – lähdekielinen tai binäärimuotoinen rajapinnan toteuttava ohjelmayksikkö, mutta – myös esimerkiksi datatiedosto, ohjelmatiedosto (mm. exe tai dll), html-sivu, dokumentti, kirjasto tai jokin muu osa. SE-02
Komponenttikaavio – yleisesti UML: n komponentti on lähes mikä tahansa ohjelmistojärjestelmästä selkeästi erotettavissa ja korvattavissa oleva osa (”fyysinen”, ei vain käsitteellinen) – voidaan käsitellä kaavioissa luokan tavoin (assosiaatiot, yleistyssuhteet, attribuutit, . . . ) SE-02
Komponenttikaavio toteuttaa käyttää GUI Auton. Vuokraus. Toiminta Tietokantaliittymä Kohde. Kanta SE-02
Sijoittelukaavio (deployment diagram) kuvaa prosessointia suorittavat laiteyksiköt, niiden yhteydet ja ohjelmistojen osien sijoittumisen niihin. – tarvitaan vain silloin kun järjestelmään liittyy useita laiteyksiköitä – prosessointiyksiköt (node) esitetään kuutioina ja niiden väliset suhteet assosiaatioina – prosessointiyksiköille voidaan antaa luokkien tapaan yleistyssuhteita, niillä voi olla attribuutteja ja ilmentymiä ja ne voivat olla osallistujina vuorovaikutuskaavioissa SE-02
Sijoittelukaavio Huomaa: prosessointiyksikön ilmentymä = tietty laite, ei laitetyyppi asiakaspiste: Asiakas ajoneuvorekisteri: Palvelin : XTietokantaliittymä : GUI <<TCP/IP>> : Auton. Vuokraus : XTietokanta olio komponentin ilmentymä SE-02
Kaavioille yhteisiä piirteitä • Pakkaukset • Laajennosmekanismit, joilla voidaan määritellä lisäominaisuuksia UML: n perusosille – stereotyypit (stereotype) – lisätietomääreet (tagged value) – rajoitteet (constraint) SE-02
Pakkaukset Pakkaus (package) on UML: n yleinen ryhmittely- ja kokoamisväline, jota voidaan käyttää kaikissa kaaviotyypeissä. – piirretään suorakaiteena, jonka ylälaidassa on nimiuloke – voi kuvata loogisen kokonaisuuden, alijärjestelmän, konfiguraation, . . . – hakemiston vastine, voi sisältää myös toisia pakkauksia – pakkaus edustaa nimiavaruutta – pakkauksen elementtien näkyvyys ulospäin voidaan kuvata Java -kielen tavoin SE-02
Pakkauksen käyttö Ohjain Kohteet Tuki 1 Kohde palauta() varaa() ota. Käyttöön() 1 Kohde. Hallinto hallinnoi * Varasto 1 palauta. Kohde(Kohde, Varasto) varaa. Kohde(Kohde) ota. Käyttöön. Kohde(Kohde) HenkilöAuto Parkki. Alue rekisterinumero huolla(int km) palauta() SE-02
Pakkaukset suljetussa muodossa <<import>> Tuki SE-02 Tietokanta
Stereotyypit Stereotyypillä varustetulla perusosalla on oma laajennettu merkitys – täysin epäformaali tai esimerkiksi rajoitteilla määritelty – stereotyypille voidaan antaa oma kuvake, joka esiintyy perusosan symbolin yhteydessä tai korvaa sen – hyödyllisiä hyvin yleisten UML-symbolien kohdalla: varsinkin komponentit ja prosessointiyksiköt – mekanismi sovelluskohtaisten notaatioiden tekemiseen SE-02
Stereotyypillä varustettu luokka <<exception>> Overflow SE-02
Lisätietomääreet Lisätietomääre on UML: n perusosaan liitettävä määre, joka koostuu nimestä ja arvosta. – määreen avulla mallin tiettyyn osaan voidaan liittää mielivaltaista käyttäjän haluamaa informaatiota – ei muuta mallin merkitystä, vaan liittyy enemmän mallin hallintaan ja prosessointiin SE-02
Lisätietomääreitä luokkaan liitettyinä My. Class {version = 1. 2 author = KK} SE-02
Rajoitteet antavat mahdollisuuden määritellä lisävaatimuksia, jotka mallin toteuttavan järjestelmän tulee täyttää. – kirjoitetaan aaltosulkujen sisään – voi olla joko nimetty standardirajoite, OCL-kielellä kirjoitettu ilmaus tai täysin epäformaali tekstinä annettu ehto – OCL on UML-määrittelyyn sisältyvä formaali rajoitekieli, jolla voidaan antaa merkitykseltään täsmällisiä, analysointi- ja suorituskelpoisia kuvauksia SE-02
Rajoitteita OCL-rajoite Yritys * {xor} Ministeriö omistaa 1 Henkilö aviomies 0. . 1 sukupuoli 0. . 1 vaimo 0. . 1 johtaa 1 SE-02 {(self. aviomies->size=1 implies self. aviomies. sukupuoli = mies) and (self. vaimo->size=1 implies self. vaimo. sukupuoli = nainen) and not(self. vaimo->size=1 and self. aviomies->size=1)}