View
2.429
Download
3
Category
Preview:
DESCRIPTION
Unified Modeling Language perusteet
Citation preview
UML perusteetUML perusteet
Pasi KellokoskiPasi Kellokoski
Sisällys
UML yleiskatsaus
Tausta
Kaaviotyypit
Peruskäsitteet
Staattinen mallintaminen
Luokkakaavio
Dynaaminen mallintaminen
Sekvenssikaavio (skenaariokaavio)
Tilakaavio
Mallinnusmenetelmistä
Tähän asti kehitettyjen menetelmien antina on ollut lähinnä se muoto, jossa analyysin ja suunnittelun tulokset esitetään
Vähemmän selkeämpi ja vakiintunut on se prosessi, jolla nämä tulokset syntyvät
Muista: menetelmiä käytettävä soveltaen ja harkiten
Mallinnusmenetelmistä
Suosittuja menetelmiä:
Jacobson: OOSE (Object-Oriented Software Engineering)
Rumbaugh et al.: OMT (Object Modeling Technique)
Nokia/Jaaksi: OMT++
UML
Booch, Rumbaugh, Jacobson: Unified Modeling Language (UML)
Nykyisin OMG:n (Object Management Group)kehittämä standardoitu mallinnuskieli
UML (jatkoa)
Ohjelmiston mallien kuvaustapa, graafinen suunnittelukieli
Ei siis varsinainen menetelmä
Erittäin laaja
TilakaaviotAktiviteetti-
kaaviotSijoittelu-kaaviot
Komponentti-kaaviot
Luokka-kaaviot
Sekvenssi-kaaviot
Oliokaaviot
Rakenne Käyttäytyminen
Korkean tason toiminnalisuus
Käyttö-tapauskaaviot
Yhteistyö-kaaviot
Esimerkkejä
Ohjelmisto-kehitys
UML:n kaaviotyypit
UML:n kaaviotyypit (jatkoa)
Korkean tason toiminnallisuus
Käyttötapauskaaviot
Järjestelmän staattinen ja dynaaminen rakenne
Oliokaaviot
Luokkakaaviot
Sijoittelukaaviot
Komponenttikaaviot
UML:n kaaviotyypit (jatkoa)
Järjestelmän dynaaminen käyttäytyminen
Sekvenssikaaviot
Yhteistyökaaviot
Tilakaaviot
Aktiviteettikaaviot
Kaaviotyypit esitellään seuraavassa käyttäen esimerkkinä autojen vuokrausjärjestelmää
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
Elementit Suhteet
LuokkaNimi
Tila
Pakkaus
Kommentti Teksti
jne.
Riippuvuus
Assosiaatio
Kooste
Yleistys(Periytyminen)
Toteutus
0..1*rooli
jne.
Nimi
Nimi
UML:n kaavioiden peruselementtejä ja -suhteita
Käyttötapaus
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
Käyttötapauskaavio
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
Varaus
PalautusPalautus
Huolto
Asiakas Virkailija<<include>>
Ajoneuvojenvuokrausjärjestelmä
Käyttöönotto
Käyttötapauskaavio - Esimerkki
Luokkakaavio
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
Kohde
ParkkiAlue
HenkilöAuto
Varasto
rekisterinumero
huolla(int km)palauta()
Talleta huolto-informaatio(palauta kutsuu)
KohdeHallintohallinnoi
*palautaKohde(Kohde, Varasto)varaaKohde(Kohde)otaKäyttöönKohde(Kohde)
palauta()varaa()otaKäyttöön()
Ohjain
1
11
Luokkakaavio - Esimerkki
Oliokaavio
Oliokaavio (object diagram) kuvaa olioita ja niiden välisiä suhteita
Luokkakaavion mahdollinen ajoaikainen ilmenemismuoto
Oliokaavio antaa esimerkin järjestelmän dynaamisesta rakenteesta tietyllä hetkellä
auto1: HenkilöAuto
rekisterinumero = XYZ-999
: KohdeHallinto
auto2 : HenkilöAuto
rekisterinumero = ABC-123
Oliokaavio - Esimerkki
luokan ilmentymä:alleviivattu
Sekvenssikaavio
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ä
: KohdeHallinto auto: HenkilöAuto
palauta()
UI
palauta(auto, parkki)
parkki: ParkkiAlue
varastoi(auto)
Sekvenssikaavio - Esimerkkialijärjestelmä
Yhteistyökaavio
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
auto: Henkilöauto
parkki: ParkkiAlue
: KohdeHallinto
1: palauta(auto,parkki)
1.2: varastoi(auto)
1.1: palauta()
UI
Yhteistyökaavio - Esimerkki
vastaa edellistä sekvenssikaaviota
Vuorovaikutuskaaviot
Sekvenssikaaviot ja yhteistyökaaviot kuvaavat molemmat olioiden välistä vuorovaikutusta. Siksi niitä kutsutaan yhteisesti vuorovaikutuskaavioiksi.
Tilakaavio
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
Käytettävissä
HuollossaVarattu
Käytössäpalauta/lopeta ajan lasku
varaa
otaKäyttöön/aloita ajan laskuhuolla
exit/huoltoilmoitus
valmis
Tilakaavio - Esimerkki
alkutila
Aktiviteettikaavio
Aktiviteettikaavio (activity diagram) kuvaa tietyn tehtävän sisäisen logiikan
Muodollisesti tilakaavion erikoistapaus
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ä
Aktiviteettikaavio (jatkoa)
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
Tietovuokaaviot eivät sinänsä kuulu UML:ään
Aktiviteettikaavio - Esimerkki
Pyydäauto
Teevaraus
Tee lasku
Maksa Valmisteleauto
Rekisteröivuokraus
Asiakas Virkailija
Ota auto
:Lasku[avoin]
:Lasku[maks]
Pyydäauto
Teevaraus
Tee lasku
Maksa Valmisteleauto
Rekisteröivuokraus
Asiakas Virkailija
Ota auto
:Lasku[avoin]
:Lasku[maks]
Aktiviteettikaavio - Esimerkki
säikeidenhaarautu-minen (fork)
säikeidenyhdisty-minen (join)
alkutila
lopputila
Komponenttikaavio
Komponenttikaavio (component diagram) kuvaa komponentit ja niiden väliset suhteet
Komponentti (UML-kaavioissa) voi olla:
Lähdekielinen tai binäärimuotoinen rajapinnan toteuttava ohjelmayksikkö
Myös esimerkiksi datatiedosto, ohjelmatiedosto (mm. exe tai dll), html-sivu, dokumentti, kirjasto tai jokin muu osa
Komponenttikaavio (jatkoa)
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, ...)
GUI
Auton-Vuokraus
Tietokanta-liittymä
KohdeKanta
VuokrausToiminta
Komponenttikaavio - Esimerkki
toteuttaa
käyttää
Sijoittelukaavio
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
asiakaspiste: Asiakas ajoneuvorekisteri: Palvelin
: XTietokanta-liittymä
: XTietokanta
: GUI
: Auton-Vuokraus
<<TCP/IP>>
Sijoittelukaavio - Esimerkki
Huomaa: prosessointiyksikön ilmentymä =tietty laite, ei laitetyyppi
komponentin ilmentymä olio
Kaavioille yhteisiä piirteitä
Pakkaukset
Laajennosmekanismit, joilla voidaan määritellä lisäominaisuuksia UML:n perusosille
Stereotyypit (stereotype)
Lisätietomääreet (tagged value)
Rajoitteet (constraint)
Pakkaus
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, ...
Hakemiston vastine, voi sisältää myös toisia pakkauksia
Pakkaus edustaa nimiavaruutta
Pakkauksen elementtien näkyvyys ulospäin voidaan kuvata Java-kielen tavoin
Kohteet Tuki
Kohde
ParkkiAlue
HenkilöAuto
Varasto
rekisterinumero
huolla(int km)palauta()
KohdeHallintohallinnoi
*palautaKohde(Kohde, Varasto)varaaKohde(Kohde)otaKäyttöönKohde(Kohde)
palauta()varaa()otaKäyttöön()
Ohjain
1
1
1
Pakkaukset - Esimerkki
TukiTuki TietokantaTietokanta<<import>>
Pakkaukset suljetussa muodossa
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
Stereotyypit - Esimerkki
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
MyClass{version = 1.2author = KK}
Lisätietomääreitä luokkaan liitettyinä
Rajoitteet
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
Rajoitteita - Esimerkki
Henkilö
vaimo
aviomies0..1
0..1sukupuoli
{(self.aviomies->size=1 impliesself.aviomies.sukupuoli = mies) and(self.vaimo->size=1 impliesself.vaimo.sukupuoli = nainen) andnot(self.vaimo->size=1 and self.aviomies->size=1)}
{xor}
Ministeriö
Yritys
johtaa
omistaa
0..1
*
1
1
OCL-rajoite
Staattinen mallintaminen
Luokkakaavio (class diagram) kuvaa järjestelmään kuuluvia luokkia ja niiden välisiä suhteita
Tärkein järjestelmän staattisen rakenteen mallinnusväline
Kohde
ParkkiAlue
HenkilöAuto
Varasto
rekisterinumero
huolla(int km)palauta()
Talleta huolto-informaatio(palauta kutsuu)
KohdeHallintohallinnoi
*palautaKohde(Kohde, Varasto)varaaKohde(Kohde)otaKäyttöönKohde(Kohde)
palauta()varaa()otaKäyttöön()
Ohjain
1
11
Luokkakaavio - Esimerkki
Luokkasymbolin osat
Luokkasymbolin osat:
Attribuutit
{näkyvyysmääre} nimi {[kertautuminen]} {: tyyppi} {= alkuarvo} {lisätietomääreet} Näkyvyysmääreet: public +, protected #, private –
Attribuutit primitiivityyppejä, eivät mallissa olevia luokkia (nämä kuvataan assosiaatioina)
Staattinen attribuutti alleviivattuna
Vakiot merkitään lisätiedolla {const}
Luokkasymbolin osat (jatkoa)
Luokkasymbolin osat:
Operaatiot
{näkyvyysmääre} nimi {parametrilista} {: palautustyyppi} {lisätietomääreluettelo} Parametreista annetaan tiedonvälityksen suunta (in, out, inout), nimi,
tyyppi sekä mahdollinen oletusarvo
Staattinen operaatio alleviivattuna
Avoin virtuaalioperaatio kursiivilla tai lisätiedolla {abstract}
Toteutus operaation kommenttina (esim. pseudokielellä), jos halutaan
HenkilöHenkilö
nimi: Stringikä: Integer = 0
nimi: Stringikä: Integer = 0
ristiminen(n: String)tervehdi()vanhene()
ristiminen(n: String)tervehdi()vanhene()
ikä++
Luokkalaatikko
Assosiaatiot
Assosiaatioilla (association) kuvataan luokkien väliset suhteet
Edustaa jotain sellaista luokkien välistä suhdetta, jolla on tietty pysyvyys
Sellaiset hetkelliset suhteet, jotka kestävät vain tietyn operaation suoritusajan, eivät yleensä ole edustettuna assosiaatiolla
Assosiaation ajoaikainen ilmentymä on linkki (link), joka vallitsee kahden olion välillä
Assosiaation perusrakenne
Assosiaatiolla on yleensä nimi
Nimen yhteyteen voidaan merkitä nuolisymboli, joka kuvaa nimen lukusuunnan
Personowns
Car0..1 *
Roolit
Assosiaation pää on nimeltään rooli, jolla voi olla nimi
Jos assosiaatio liittyy molemmissa päissään samaan luokkaan, molemmilla rooleilla on syytä olla nimi
Roolin yhteydessä voidaan myös ilmoittaa rajapinta muodossa roolinimi:rajapintanimi
Roolin ilmentymä = olioliitos
Yritystyönantaja
Henkilö0..1 *
työntekijä:IWorker
Roolinimet assosiaatiossa
rajapinta
Assosiaation kertautuminen
Rooli ilmaisee myös assosiaation kertautumisen
Kertautuminen ilmoitetaan listalla kokonaislukuvälejä
* tarkoittaa mielivaltaisen monta
0..1 tarkoittaa kertautumista "yksi tai ei yhtään”
0..* voidaan antaa lyhyesti *
i..i voidaan lyhentää i
Jos kertautumista ei ole merkitty, se on määrittelemätön (eikä siis esimerkiksi 1
Jos olioliitoksilla on mallin kannalta olennainen keskinäinen järjestys, rajoite "{ordered}" voidaan liittää rooliin
Moninkertainen assosiaatio
Jos assosiaation kertautuminen on suurempi kuin 1, kutsumme assosiaatiota moninkertaiseksi
Kurssi Opettaja1..**
Assosiaatioluokka
Joskus assosiaatioon liittyy muutakin tietoa ja/tai toiminnallisuutta, joka halutaan esittää luokkakaaviossa
Tällöin assosiaatioon voi liittää oman luokan, jossa annetaan normaaliin tapaan attribuutteja ja operaatioita
Linkit ovat assosiaatioluokan ilmentymiä
Assosiaatioluokkaan voi liittyä puolestaan muita assosiaatioita kuten mihin hyvänsä luokkaan
Assosiaatioluokalle ei tarvitse antaa nimeä, jos assosiaatiolla on sellainen. Assosiaatioluokka liitetään itse assosiaatioon katkoviivalla.
HenkilöHenkilö
nimisosturvatunnusosoite
nimisosturvatunnusosoite
työskentelee *
työntekijäYritysYritys
nimiosoite
nimiosoite
*
työnantaja
työsopimusaikapalkka
työsopimusaikapalkka
päällikkö
0..1
johtaa
Assosiaatioluokka
Yksilöinti
Jos assosiaatioon liittyy tieto, joka määrää assosiaation ilmentymien toisessa päässä olevien olioiden joukon, tämä tieto voidaan esittää nk. yksilöintinä (qualification)
Yksilöinti liittyy siis aina moninkertaiseen assosiaatioon
Tavallisesti yksilöinti muuttaa kertautuvan pään kertautumisen "1":ksi (tai "0..1":ksi); tällöin yksilöinti määrää linkin toisessa päässä olevan olion yksiselitteisesti
Yksilöinti merkitään luokkasymboliin liittyvänä pienenä laatikkona, jonka sisään kirjoitetaan linkin yksilöivä tieto; yksilöinti tarkentaa olion vastakkaisessa päässä
Usein yksilöivä tieto on vastakkaisella puolella olevan luokan attribuutti
KirjastoKirjasto
kokoelmasijainti
kokoelmasijainti
HenkilöHenkilö
nimiosoite
nimiosoite
lainaaja nrolainaaja nrolainaa
* 1
Yksilöinti
Navigointi
Assosiaatioon voidaan liittää myös tieto siitä, että toteutuksen on varmistettava navigoitavuus, ts. että assosiaation ilmentymää voidaan käyttää helposti siirtymiseen oliosta toiseen
Tämä tehdään piirtämällä nuolen kärki assosiaation päähän; tällöin edellytetään, että navigointi on mahdollista toisesta päästä tähän päähän
Kooste
Kooste (aggregation) on erityinen assosiaatiolaji
Kooste esittää suhteen "on-osa" tai "kuuluu" luokkien (ilmentymien) välillä
Koska tämä suhde on merkittävä erikoistapaus, sille on oma symbolinsa: pieni vinoneliö sisältävässä päässä (siis suhteen "A on-osa B:tä" B-päässä)
Tämä symboli korvaa tavallisesti assosiaation ja roolien nimet. Koosteeseen voidaan soveltaa normaaliin tapaan kertautumista ja yksilöintiä
Koostesuhteen tulisi aina olla luonteeltaan transitiivinen ja asymmetrinen
MonikulmioMonikulmio
pinta-alapinta-ala
PistePiste
x-koordy-koord
x-koordy-koord
3..*
{ordered}
Kooste (ja navigoitavuus)
Aito kooste
Aito kooste (composition) tarkoittaa koostesuhdetta, jossa osaolio riippuu isäntäoliostaan kahdella tavalla:
Osa ei voi olemassa ilman isäntäänsä, ja
Osa voi olla vain yhden isännän osa
Tällöin isännän tulee yleensä huolehtia osan luonnista ja hävittämisestä
Aito kooste merkitään kuten kooste, mutta vinoneliö on musta
ValtioneuvostoMinisteri1..*
Aito kooste
Periytyminen
Periytyminen kuvaa erikoistus/yleistys-suhteen kahden luokan (yliluokan ja aliluokan) välillä
Suhde piirretään kolmiokärkisenä yliluokkaan osoittavana nuolena
Jos luokalla on useita aliluokkia, nuolet voidaan piirtää joko erikseen tai yhdistettynä samaan kärkeen
Moniperiytyminen on sallittua
Rajapinnan toteutus
Rajapinta esitetään joko stereotyypillä <<interface>> varustetulla luokkasymbolilla tai pyöreällä rajapintasymbolilla
Jos luokka toteuttaa rajapinnan, piirretään edellisessä tapauksessa toteutussuhdetta kuvaava nuoli (kuten periytyminen, mutta katkoviivalla) luokasta rajapintaan
Jälkimmäisessä tapauksessa rajapintaympyrä yhdistetään yksinkertaisella viivalla luokkasymboliin
Luokkasymbolin käyttäminen rajapinnan kuvaukseen on hyödyllistä silloin, kun halutaan näkyville rajapinnan tarjoamat operaatiot
Car Vehicle
Car <<interface>>Vehicle
Periytymis- ja toteutussuhde
Aktivinen luokka
Jos luokan ilmentymät ovat oman prosessin omaavia aktiivisia olioita, kutsumme myös luokkaa aktiiviseksi
Aktiivinen luokka kuvataan luokkasymbolilla, jonka rajaviivat ovat paksunnettuja
Vastaavasti aktiivisen luokan ilmentymä kuvataan paksureunaisella oliosymbolilla
Aktiiviselle luokalle voidaan antaa ylimääräinen lohko, jossa luetellaan signaalit, joihin luokan ilmentymät reagoivat
DeviceController
SignalsdeviceInterruptuserInterruptseriousFlaw
<<controller>>
currentConfiguration
Aktiivinen luokka
paksu reuna
Dynaaminen mallintaminen
Dynaaminen malli kuvaa sovelluksen käyttäytymisen suorituksen aikana
Sekvenssikaaviot (sequence diagram)
Kuvaavat, miten joukko olioita toimii yhteistoiminnassa
Korostavat olioiden välistä vuorovaikutusta
Tilakaaviot (statechart diagram)
Kuvaavat yhden olioluokan täydellisen käyttäytymisen
Korostavat yhden olion reagoimista ulkoa tuleviin tapahtumiin
Sekvenssikaavio
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ä
: KohdeHallinto auto: HenkilöAuto
palauta()
UI
palauta(auto, parkki)
parkki: ParkkiAlue
varastoi(auto)
Sekvenssikaavio: Palautusalijärjestelmä
Skenaariot
Skenaario kuvaa yhden mahdollisen tapahtumasarjan sovelluksen suorituksen aikana. Skenaariokuvaus keskittyy olioiden vuorovaikutuksen esittämiseen.
Yleensä haarautumaton tapahtumajono
Voidaan kuvata tavallisena tekstinä
Käyttötapaus voidaan kuvata skenaariona
Kuvaa myös sovelluksen sisäistä toimintaa
Skenaariokaaviot
Skenaariokaavio (sequence diagram, event trace diagram, interaction diagram, scenario diagram) on skenaarion formaali kuvaus
UML:ssä käytetään sekvenssikaavioita
Käytöltään hyvin saman tapaisia (käytännössä samoja) kuin sekvenssikaaviot, mutta skenaariokaavioilla on notaatiosta riippuen erilaisia ominaisuuksia ja ulkoasuja
Sekvenssikaavion merkinnät
Usein sekvenssikaavio kuvaa olioiden välisiä operaatiokutsuja
Kontrollin omistus voidaan esittää paksunnettuna jaksona, aktivaatiopalkkina, olioviivassa:
Oliolla on kontrolli, jos sen operaatiota on kutsuttu eikä operaatiosta ole vielä poistuttu
Operaatioiden paluut voidaan haluttaessa esittää katkoviivanuolina, joskin aktivaatiopalkki ilmaisee myös paluun
Sekvenssikaavion merkinnät
Paluunuoleen voidaan liittää mahdollinen paluuarvo, vastaavasti kuin kutsunuoleen voidaan liittää kutsun todelliset parametrit
Olio voi kutsua myös omaa operaatiotaan; tällöin kutsunuoli tekee 180 asteen käännöksen
Kun olio kutsuu omaa operaatiotaan, sisemmän kutsun aktivaatiopalkki siirtyy hieman oikealle
Olion luominen ja hävitys sekvenssikaaviossa
Olion luominen kuvataan sekvenssikaaviossa sanomana, joka suuntautuu itse oliolaatikkoon
Vastaavasti olion hävittäminen kuvataan sanomana, joka suuntautuu olioviivan lopussa olevaan vinoristiin
Vinoristi esittää olion häviämistä
: C2
x: C1
op1(x)
op2()
true
Olion luominen ja hävitys sekvenssikaaviossa
Käyttäjä sekvenssikaaviossa
Järjestelmän ulkoinen toimija (kuten esimerkiksi käyttäjä) voi olla myös osallistujana sekvenssikaaviossa
Käyttäjällä on oma ikoninsa, tikku-ukko
Käyttäjän toimenpiteet kuvataan sanomina käyttäjältä jollekin järjestelmään kuuluvalle oliolle
Esimerkiksi käyttöliittymän kautta tapahtuvat valinnat, napin painallukset ym.
Käyttäjälle annettava informaatio kuvataan sanomina joltain järjestelmän oliolta käyttäjälle
Esimerkiksi ilmoitukset, dialogit, kyselyn tulokset ym.
Sanomat ja signaalit
Olioiden välinen sanoma sekvenssikaaviossa voi edustaa synkronista operaatiokutsua tai asynkronista signaalin lähettämistä
Aktiiviset, rinnakkaisia prosesseja edustavat oliot kommunikoivat tyypillisesti signaalein pikemmin kuin operaatiokutsuin
Asynkroniselle signaalille voidaan haluttaessa käyttää omaa nuolisymbolia, mutta yleensä tämä ei ole tarpeen: asia käy ilmi yhteydestä
Sanomat ja signaalit
Myös käyttäjä edustaa omaa rinnakkaista prosessiaan, joka kommunikoi järjestelmän kanssa signaalein
Aktiivisten olioiden tapauksessa aktivaatiopylväät eivät useinkaan tuo uutta informaatiota, koska oliot ovat periaatteessa jatkuvasti aktiivisia; tällöin pylväät kattavat olion koko eliniän
Aikamerkinnät
Sekvenssikaavion aikaskaalalle (tiettyyn kohtaan kuviteltua pystyssä olevaa aikajanaa) voidaan asettaa aikamerkkejä (timing mark), jotka edustavat kyseistä ajanhetkeä
Näitä aikamerkkejä voidaan käyttää esimerkiksi rajoitteissa kuvaamaan tiettyjä reaaliaikavaatimuksia
Myös sanoman lähettämisen viemää aikaa (esimerkiksi maksimiaikaa) voidaan tällä tavoin spesifioida
Jos sanoman lähettämisen viemä aika on olennaista mallissa, sanomanuoli piirretään vinoon alaspäin
Suorituslogiikka
Sekvenssikaavion pääasiallinen tarkoitus on kuvata yhtä mahdollista tapahtumasarjaa järjestelmän toiminnassa eikä määritellä tietyn toiminnan tai operaation yleistä suorituslogiikkaa
Niinpä algoritmiset ilmaisut kuten ehdollisuus ja toisto eivät ole periaatteessa välttämättömiä sekvenssikaavioissa
Silti tällaiset ilmaisut voivat olla joskus hyödyllisiä lyhennysmerkintöjä: niiden avulla voidaan samalla sekvenssikaaviolla kuvata useita mahdollisia tapahtumasarjoja
Tästä syystä myös UML:ssä on sekvenssikaavioihin otettu mukaan ilmaisut ehdollisuudelle ja toistolle
Suorituslogiikka
Ehdollisuus kuvataan sanomana, joka haarautuu lähtökohdastaan
Kumpaankin haaraan voidaan liittää hakasuluissa ehto, jonka vallitessa tämä haara valitaan
Kukin haara edustaa omaa erillistä alisekvenssikaaviota haarojen yhdistymiskohtaan saakka
Toisto kuvataan liittämällä sanoman nimen eteen toistomääre muodossa *[...], missä hakasulkujen sisällä annetaan mielivaltainen toistoa kuvaava ilmaus (esimerkiksi i = 1..n)
SETSET
ALARMALARM
MM
HH
: SoittoYks
sytytä
: Valo
Paina ALARM
Näytä aika:User
: Ohjaus
aloita soitto
Paina ALARM
lopeta soitto
Paina ALARMsammuta
09 30
t{t = soittoaika}
Herätyskellon sekvenssikaavio
Sekvenssikaavion ja luokkakaavion yhteys
Vaikka sekvenssikaavio ja luokkakaavio kuvaavat varsin erilaisia näkökulmia ohjelmistoon, niillä on myös yhtymäkohtia:
Jos sekvenssikaaviossa luokan A ilmentymä lähettää sanoman s luokan B ilmentymälle, on s:n oltava joko B-luokan operaatio tai jos B on aktiivinen luokka, B:n tunnistama signaali
Kummassakin tapauksessa s:n tulee esiintyä B:n yhteydessä luokkakaaviossa ja mahdollisten todellisten parametrien tulee täsmätä operaation kutsumuodon kanssa
Luokkien A ja B välillä on myös todennäköisesti oltava assosiaatio, koska sanoman lähettäminen viittaa suhteeseen näiden luokkien välillä
Jos A-olio kommunikoi usean eri B-olion kanssa sekvenssikaavioissa, tulee assosiaation olla moninkertainen
Dynaaminen mallintaminen: Tilakaavio
Tilakaavio (statechart diagram) kuvaa tietyn luokan ilmentymien reagoimisen ulkoisiin tapahtumiin (message)
Tilakaavio
Käytettävissä
HuollossaVarattu
Käytössäpalauta/lopeta ajan lasku
varaa
otaKäyttöön/aloita ajan laskuhuolla
exit/huoltoilmoitus
valmis
alkutila
Tilakaavio
Tilakaavio on suunnattu verkko, joka koostuu tiloista (states) ja niitä yhdistävistä siirtymistä (transitions) eli tapahtumista
Tilakaavio kuvaa systeemin tilamuutokset nykyisen tilan ja tapahtuman funktiona
Tila1 Tila2
Tila3
laukaisin
Tilasuuntautuneet luokat
Tilakaavio on mielekäs vain tilasuuntautuneille luokille, eli luokille, joiden ilmentymät ovat selvästi identifioitavissa tiloissa elinaikanaan
Usein vain harvat sovellukset luokat ovat tilasuuntautuneita
Tyypillisesti aktiiviset luokat ja sovelluksen kontrollia ohjaavat luokat
Ohjausolioita ovat mm. pelisovelluksen kontrolliolio ja graafisen käyttöliittymän tapahtumankäsittelystä vastaava olio
Joskus paikallaan muidenkin luokkien kohdalla, jos on tarpeen ymmärtää luokan dynaamista toimintaa
Alku- ja lopputilat
Alkutila = pieni musta ympyrä
Jos olion ylimmän tason tilakaaviolla on alkutila, olio on tässä tilassa syntyessään (enintään yksi alkutila)
Ei alkutilaa: olion tila on aluksi määrittelemätön
Lopputila = kehän sisällä oleva musta ympyrä
Jos olion ylimmän tason tilakaaviolla on lopputila, ja olio joutuu siihen, se lakkaa olemasta
Salasanan luku
help / nayta avustedo / nayta kehoteentry / kaiutus poisexit / kaiutus päälle
Tilasymbolin osat
Tilaan voi liittyä:
Nimi
Toimia (action)
Aktiviteetteja (activity)
Sisäisiä siirtymiä (internal transition)
Viivästettyjä tapahtumia (deferred event)
Alitiloja
Mikä tahansa näistä voi myös puuttua
SalasanaSyöttö
entry/kaiutus poisexit/kaiutus päälledo/näytä kehotehelp/näytä avustefunktionäppäin/defer
Tilasymbolin osat
Toimet
Mallin kannalta hetkellisiä, keskeytymättömiä toimintoja, joiden ei ajatella kuluttavan aikaa
Tulotoimen muoto: entry/toimi
Jättötoimen muoto: exit/toimi
Aktiviteetti
Mallin kannalta aikaa kuluttava toiminta, jota suoritetaan tilassa ollessa
Aktiviteetin muoto: do/aktiviteetti SalasanaSyöttö
entry/kaiutus poisexit/kaiutus päälledo/näytä kehotehelp/näytä avustefunktionäppäin/defer
Tilasymbolin osat
Sisäiset siirtymät
Sallivat reagoimisen tiettyyn tapahtumaan jättämättä kyseistä tilaa
Eroavat tilaan palaavasta tavallisesta siirtymästä(ei jättö- ja tulotoimia)
Sisäisen siirtymän muoto:tapahtuma {(parametrit)}} {[ehto]} {/toimet}
Viivästetyt tapahtumat
Tapahtumaa ei käsitellä kyseisessä tilassa, mutta se säilytetään tapahtumapuskurissa
Viivästetyn tapahtuman muoto: tapahtuma/defer
Tuntemattomat tapahtumat sivuutetaan
SalasanaSyöttö
entry/kaiutus poisexit/kaiutus päälledo/näytä kehotehelp/näytä avustefunktionäppäin/defer
Yhteenveto määrittelyistä
Tilaan liittyvät toiminnot voivat olla:
Aktiviteetteja, jotka kuvaavat tilan toimintaa do/aktiviteetti
Tulotoimia, jotka suoritetaan tilaan siirryttäessä entry/tulotoimet
Jättötoimia, jotka suoritetaan tilasta poistuttaessa exit/jättötoimet
Tilan sisäisiä siirtymiä, joissa sanoma liitetään tilan toimintoontapahtuma/toimet
Viivästettyjä toimiatapahtuma/defer
Siirtymiin liittyvät määreet
Siirtymä laukeaa (fire), kun
olio on sen lähtötilassa, ja
siirtymään liittyvä laukaisin aktivoituu
Tällöin olio:
suorittaa lähtötilan jättötoimet,
siirtyy siirtymän kohdetilaan,
suorittaa kohdetilan tulotoimet,
suorittaa tilan varsinaiset (tavalliset) toimet, sekä
jää odottamaan seuraavan siirtymän laukeamista
Siirtymiin liittyvät määreet
Siirtymän laukaisin on yleisesti muotoa:
{nimi:} {tapahtuma {(parametrit)}} {[ehto]} {/toimet}
Mikä hyvänsä laukaisimen osa voi puuttua
Laukaisin aktivoituu, kun
Olio saa laukaisimessa annetun tapahtuman, ja
Ehto joko puuttuu tai on tosi
Siirtymätoimet ovat hetkellisiä toimia, jotka suoritetaan, kun siirtymä laukeaa
Siirtymän laukaisimen merkinnöistä
Laukaisimessa voi esiintyä seuraavia määreitä:
sanoma(parametrit)
[ehto]
^sanoman_oheislähetys
/siirtymätoimi
Tapahtumat
Tapahtumat:
Tapahtuvat tiettyinä aikana
Hetkellisiä
Jaksottavat systeemin toiminnan tiloihin
do/Vihreä valoE-P suunnalle
do/Vihreä valoE-P suunnalle
do/Vihreä valoI-L suunnassavasemmalle
do/Vihreä valoI-L suunnassavasemmalle
do/Vihreä valoI-L suunnalle
do/Vihreä valoI-L suunnalle
do/Vihreä valoE-P suunnassa
vasemmalle
do/Vihreä valoE-P suunnassa
vasemmalle
after(30s)after(30s)[ei vas. E-P]
after(30s)[ei vas. I-L]
after(30s)[on vas. E-P]
after(30s)[on vas. I-L]
after(30s)
Liikennevalojen ohjaimen tilakaavio
do/Vihreä valoE-P suunnalle
do/Vihreä valoE-P suunnalle
do/Vihreä valoI-L suunnassavasemmalle
do/Vihreä valoI-L suunnassavasemmalle
do/Vihreä valoI-L suunnalle
do/Vihreä valoI-L suunnalle
do/Vihreä valoE-P suunnassa
vasemmalle
do/Vihreä valoE-P suunnassa
vasemmalle
after(30s)[ei vas. E-P][ei vas. I-L]
[on vas. E-P]
[on vas. I-L]
after(30s)
after(30s)
after(30s)
Haarautumissymbolin käyttö
HuollossaHuollossa
Vapaa
ProsessointiProsessointiValintaValinta
TarkistusTarkistus
KuitintulostusKuitin
tulostus
[jatka]
[lopeta]
Aktiivinenentry/lue korttiexit/poista kortti
huolto
korttisyötetty
peruuta
Koostetilan käyttö yhteisten siirtymien yhdistelyyn
Huolto
OdotusOdotus
ItsetestiKäyttövalmis
huolla
Testaus
Komponenttientestaus
Komennonsuoritus
Komennonsuoritus
näppäin(n)
[lopetus][ei lopetus]
Komentotila
Rinnakkaistettu koostetila
SETpainetaan
do/näytä aika
Perustila
M/ajan minuutti-lisäys
H/ajan tunti-lisäys
SET vapautetaan
/tee alkuasetukset[aika=soittoaika]
Soittovalmis
Soitto
do/soita
ALARM/sytytä valo
ALARM/sammuta valo
Aika-asetus
do/näytä aika
Herätysasetus
do/näytäsoittoaika
ALARM
SETpainetaan
do/näytä aika
M/soittoajan minuuttilisäys
H/soittoajantuntilisäys
SET vapautetaan
Herätyskellon ohjausyksikön tilakaavio
Recommended