Unified Modeling Language Confuse 25.11.2001 Tila Versio: 1.0 Vaihe: T1 Jakelu: Julkinen Luontipäivä: 15.11.2001 Antti Haapakoski Muutettu viimeksi: 25.11.2001 Antti Haapakoski Sisältö 1 Yleistä 1 2 Mallinnuksesta 2 3 Tärkeimmät kaaviotyypit 2 3.1 Käyttötapauskaavio (Use-case diagram)................ 3 3.2 Luokkakaavio (Class diagram)..................... 4 3.3 Komponenttikaavio (Component diagram)............... 5 3.4 Sijoittelukaavio (Deployment diagram)................. 5 3.5 Yhteistyökaavio (Collaboration diagram)............... 6 3.6 Tilakaavio (Statechart diagram)..................... 6 3.7 Aktiviteettikaavio (Activity diagram).................. 7 3.8 Sekvenssikaavio (Sequence diagram).................. 7 4 Käyttäminen projektissa 7 1 Yleistä Ohjelmistojen koon kasvaessa yritykset haluavat kehittää ohjelmistoprosessiaan tehokkaammaksi, automatisoidummaksi ja laadukkaammaksi. Tähän tarvitaan uusia tekniikoita, kuten visualisointia, komponenttiteknologioita, suunnittelumalleja (design patterns) ja sovelluskehyksiä (frameworks). UML auttaa näiden tekniikoiden käyttöönotossa. Unified Modeling Language (UML) on tarkoitettu ohjelmistojärjestelmien ja niiden osien määrittelyyn, visualisointiin, rakentamiseen ja dokumentointiin. 1
UML:n on kehittänyt Rational Software yhteistyökumppaneineen aikaisempien mallinnusmenetelmien, kuten Booch, OOSE/Jacobson ja OMT, pohjalta. UML on aikaisempia mentelmiä monipuolisempi. Sillä voi esimerkiksi mallintaa rinnakkaisia hajautettuja järjestelmiä. Useat yritykset ovat jo ottaneet UML:n käyttöönsä ohjelmistojen kehitysprosessissaan, aina vaatimusmäärittelystä ohjelmiston testaukseen asti. 2 Mallinnuksesta Ohjelmiston mallinnus ennen sen rakentamista on tärkeää. Samoin kuin rakennus suunnitellaan paperilla ennen sen rakentamista, täytyy myös ohjelmisto suunnitella hyvin ennen sen toteutusta. Hyvä malli auttaa arkkitehtuurin pohdinnassa, sekä toimii toteutuksen lähtökohtana. Mallit ovat myös tärkeä kommunikaation muoto projektitiimin sisällä ja eri projektitiimien välillä. Ohjelmistojen kasvaessa suuremmiksi ja monimutkaisemmaksi, mallinnuksen rooli tulee yhä tärkeämmäksi. UML on hyvin määritelty ja laajasti hyväksytty tapa mallintaa ohjelmistoja. Se sopii erityisesti olio- ja komponenttipohjaisten järjestelmien mallinnukseen. UML ei ota kantaa toteutuksen ohjelmointikieleen eikä käytettävään ohjelmistoprosessiin. Tosin UML:n kehittäjät suosittelevat käyttötapauspohjaista (use-case driven), arkkitehtuurikeskeistä, iteratiivista ja inkrementaalista prosessia. 3 Tärkeimmät kaaviotyypit UML perustuu erilaisten kaavioiden käyttöön. Se määrittelee useita eri kaaviotyyppejä yrittäen kattaa mahdollisimman suuren osan ohjelmistojen mallinnustavoista. Kaavioiden syntaksi on melko tarkkaan määritelty. Esimerkiksi katkoviivalla ja yhtenäisellä viivalla on kaavioissa usein eri merkitys. Tarkka määrittely onkin tarpeellista jotta UML:stä olisi hyötyä kommunikaatiovälineenä. Seuraavat kappaleet esittelevät erittäin lyhyesti tärkeimmät kaaviotyypit. Kaaviot on esitelty jotta lukija saa jonkinlaisen kuvan siitä mitä UML on. Enemmän tietoa löytyy useista UML-kirjoista sekä UML:n määrittelystä [1]. 2
3.1 Käyttötapauskaavio (Use-case diagram) Palautejärjestelmä Opiskelija Palautteen antaminen Palautelomakkeen luonti Opettaja Palautelomakkeen aktivointi Kuva 1: Käyttötapauskaavio (Use-case diagram) Käyttötapauskaavio (Kuva 1) yhdistää toimijat (actors) ja käyttötapaukset (Use cases). Toimijat ovat järjestelmän käyttäjiä eli useimmiten ihmisiä. Käyttötapaukset määrittelevät toimintoja tai toimintojonoja jotka järjestelmän voi suorittaa toimijoiden pyynnöstä. Käyttötapaukset ja käyttötapauskaaviot ovat hyödyllisiä varsinkin vaatimusmäärittelyssä sekä käyttöliittymän suunnittelussa. Käyttötapauskaaviot toimivat selkeytensä vuoksi myös hyvänä kommunikaatiomuotona asiakkaan ja projektitiimin välillä. Käyttötapauksista voidaan usein johtaa tärkeimmät toiminnot, jotka järjestelmän tulee pystyä suorittamaan. 3
3.2 Luokkakaavio (Class diagram) <<interface>> Shape draw() rotate(angle:integer) resize(s:integer) <<implementationclass>> Circle radius: Integer setradius(r:integer) <<implementationclass>> Square side: Integer setside(s:integer) * squares 1 <<implementationclass>> SquareSet Kuva 2: Luokkakaavio (Class diagram) Luokkakaavio (Kuva 2) näyttää staattisen kokoelman olioita, kuten luokkia ja tyyppejä. Oliot on mallinnettu suorakaiteilla, joiden sisään voidaan merkitä metodeja sekä sisäisiä muuttujia. Luokkakaavio mallintaa myös olioiden suhteita, kuten periytymistä ja toisten olioiden käyttöä. Luokkakaavio on hyödyllinen varsinkin ohjelmiston toteutusta suunniteltaessa eli teknisessä määrittelyssä. Luokkakaavio sopii hyvin olio-ohjelmoinnilla toteutettavien modulien mallintamiseen mutta proseduraaliseen ohjelmointiin se ei sovellu. Jotkin mallinnusohjelmat osaavat muuttaa piirretyn luokkakaavion suoraan lähdekielisen ohjelman rungoksi. 4
3.3 Komponenttikaavio (Component diagram) Mapper <<text file>> UI choice descriptions Configurator GUI Kuva 3: Komponenttikaavio (Component diagram) Komponenttikaavio (Kuva 3) näyttää komponenttien väliset riippuvuudet. Komponentit ovat yleensä ajettavia ohjelma-moduuleja. Mukana voi myös olla komponentteja, joita ei ajonaikana enää suoranaisesti esiinny. Sijoittelukaaviossa (Kappale 3.4) puolestaan näkyy vain ajonaikaiset komponentit. Komponenttikaavio sopii yleisyytensä vuoksi moneen eri projektin vaiheeseen aina vaatimusmäärittelystä testaukseen. 3.4 Sijoittelukaavio (Deployment diagram) :Client :Server <<browser>> :Netscape <<servlet>> :UIManager <<Entity>> :Session <<database>> :ContentDB Kuva 4: Sijoittelukaavio (Deployment diagram) Sijoittelukaavio (Kuva 4) esittää komponentteja ajonaikaisissa ympäristöissään sekä laitteita joissa komponenttien prosesseja ajetaan. Kukin komponentti sijaitsee jossain solmussa (Node), joka on suoritusaikainen koneresurssi. Solmut ovat laitteita joilla on yleensä muistia ja jonkinlainen prosessori. Myös sijoittelukaavio sopii moneen eri projektin vaiheeseen vaatimusmäärittelystä lähtien. 5
3.5 Yhteistyökaavio (Collaboration diagram) redraw() wnd:window 1.1.1.1: putpixel(x,y) <<parameter>>window 1.1*[i:=1..n]: drawshape(wnd) pic 1: paint(wnd) <<self>> pic:picture i 1.1.1: draw(wnd) shape:shape Kuva 5: Yhteistyökaavio (Collaboration diagram) Yhteistyökaavio (Kuva 5) näyttää luokkien instanssit ja niiden välisen vuorovaikutuksen. Kaavioon on usein merkitty tapahtumien järjestys numeroinnilla. Sisäkkäiset funktio- tai metodikutsut esitetään alanumeroinnilla. Yhteistyökaavio näyttää samaa informaatiota kuin sekvenssikaavio (katso 3.8), mutta eri muodossa. Kaavio sopii varsinkin tekniseen määrittelyyn, ohjelman tarkan toiminnan suunnitteluun. 3.6 Tilakaavio (Statechart diagram) press + /increase h press set clock Set hour do/blink hour display press - /decrease h Idle do/show clock press OK press OK press + /increase m Set minute do/blink minute display press - /decrease m Kuva 6: Tilakaavio (Statechart diagram) Tilakaavio (Kuva 6) esittää normaalin tilakoneen graafisesti. Lisäksi tiloihin ja tilasiirtymiin on voitu merkitä suoritettavia toimintoja. 6
3.7 Aktiviteettikaavio (Activity diagram) Circle::draw Calculate position [off screen] [on screen] Draw pixels Mark drawn Kuva 7: Aktiviteettikaavio (Activity diagram) Aktiviteettikaavio (Kuva 7) on erikoistapaus tilakaaviosta. Suurin osa aktiviteettikaavion tiloista on ns. toimintotiloja (action state), eli tiloja joissa suoritetaan jokin laskenta tai toimenpide. Tilasiirtymät puolestaan aktivoituvat lähtötilojensa tapahtumista. Kaaviolla voidaan mallintaa myös rinnakkaisia prosesseja. 3.8 Sekvenssikaavio (Sequence diagram) Sekvenssikaavio (Kuva 8) esittää objektien välisen vuorovaikutuksen järjestettynä ajan mukaan. Sekä objektit että niiden väliset viestit on merkitty kaavioon. Normaalisti pystyakselilla on aika, joka kasvaa alaspäin. Vaaka-akselilla näkyvät objektit, jotka ovat vuorovaikutuksessa keskenään. Kaavion oliot voivat myös toimia rinnakkain. Tiettyjen toimintojen väliselle viiveelle voidaan asettaa rajoitteita merkitsemällä ne pystyakselille. Sekvenssikaavio näyttää samaa informaatiota kuin yhteistyökaavio (katso 3.5), mutta eri muodossa. Tosin sekvenssikaavio ei näytä niin hyvin objektien välisiä suhteita kuten yhteistyökaavio. Sekvenssikaavio sopii moneen projektin vaiheeseen, varsinkin toiminnalliseen ja tekniseen määrittelyyn. 4 Käyttäminen projektissa UML:ää käytetään Confuse:n projektissa heti vaatimusmäärittelystä lähtien. Myös toiminnallisen määrittelyn tekoon käytetään UML-kaavioita. Ohjelmiston toteutuksen suunnittelu (tekninen määrittely) pyritään soveltuvin osin tekemään UML:ää apuna käyttäen. UML:ää käytetään kuitenkin vain visualisointiin ja mallinnukseen eikä kaavioista suoraan generoida lähdekielistä koodia. Osa järjestelmästä, ainakin GUI, kirjoitetaan olio-ohjelmointikielellä. Tällöin voidaan luontevasti käyttää UML:ää luokkien ja niiden välisten riippuvuuksien mallintamiseen. Tosin järjestelmässä on myös proseduraalisia komponentteja, jotka suorittavat yksinkertaisia funktio-tyyppisiä tehtäviä. UML ei kovinkaan hyvin sovellu niiden mallintamiseen. Toisaalta yksinkertaiselle osalle riittää myös sanallinen kuvaus. 7
window picture shape a: paint() b: draw() c: putpixel() b: draw() < 10ms c: putpixel()... d: paintdone() Kuva 8: Sekvenssikaavio (Sequence diagram) Viitteet [1] Object Management Group, Unified Modeling Language (UML), version 1.4, September, 2001. http://www.omg.org/technology/documents/formal/uml.htm 8