UML (Unified Modeling Language) on standardoitu graafinen mallinnuskieli ohjelmistojärjestelmien visualisointiin, suunnitteluun ja dokumentointiin. UML kehitettiin 1990-luvulla yhdistämään useita eri mallinnusmenetelmiä, ja se on nykyään laajasti käytetty standardi ohjelmistoalalla.
UML:ää käytetään sekä määrittelyvaiheessa että suunnitteluvaiheessa, kuten aiemmissa kappaleissa on mainittu. Määrittelyvaiheessa UML-kaaviot kuvaavat järjestelmän toimintaa käyttäjän näkökulmasta, kun taas suunnitteluvaiheessa ne kuvaavat teknistä rakennetta ja toteutusta.
Rakennekaaviot kuvaavat järjestelmän staattista rakennetta — mitä osia järjestelmä sisältää ja miten ne liittyvät toisiinsa.
Käyttöönottokaavio kuvaa järjestelmän fyysisen arkkitehtuurin: laitteet, palvelimet, niiden väliset yhteydet sekä niihin sijoitetut ohjelmistokomponentit.
Määrittelyvaiheessa kaavio kuvaa järjestelmän fyysisen ympäristön asiakasvaatimusten perusteella: mitä laitteita ja palvelimia tarvitaan ja miten ne kytkeytyvät toisiinsa verkossa.
Esimerkki: Verkkokaupassa asiakkaan selain yhdistää HTTPS-yhteydellä web-palvelimeen, joka kommunikoi sisäverkossa tietokantapalvelimen kanssa.
Suunnitteluvaiheessa kaavio tarkennetaan tekniselle tasolle: mitkä ohjelmistokomponentit sijoitetaan kullekin palvelimelle ja miten ne kommunikoivat keskenään rajapintojen kautta.
Komponenttikaavio kuvaa järjestelmän ohjelmistokomponentit, niiden tarjoamat ja vaatimat rajapinnat sekä komponenttien väliset riippuvuudet.
Määrittelyvaiheessa komponenttikaaviota ei tyypillisesti käytetä.
Suunnitteluvaiheessa kaavio kuvaa yksittäiset ohjelmistokomponentit, niiden yhteenliittymät ja väliset suhteet. Se näyttää järjestelmän loogisen rakenteen ja komponenttien väliset riippuvuudet.
Luokkakaavio kuvaa järjestelmän luokat, niiden attribuutit ja metodit sekä luokkien väliset suhteet (assosiaatio, aggregaatio, kompositio, periytyminen).
Luokkakaavion näkyvyysmerkinnät:
Määrittelyvaiheessa luokkakaaviota ei tyypillisesti käytetä.
Suunnitteluvaiheessa luokkakaavio on tärkein olio-ohjelmoinnin suunnittelukaavio. Se kuvaa luokat rajapintoineen ja niiden väliset yhteydet ohjelmakoodin tasolla.
Käyttäytymiskaaviot kuvaavat järjestelmän dynaamista toimintaa — miten järjestelmä käyttäytyy ja toimii eri tilanteissa.
Käyttötapauskaavio esittää järjestelmän toiminnot käyttäjän näkökulmasta. Se sisältää:
Määrittelyvaiheessa käyttötapauskaavio on yleisin kaavio. Se esittää järjestelmän toiminnallisuuden loppukäyttäjän näkökulmasta ja toimii pohjana käyttötapauskorteille.
Esimerkki: Verkkokaupassa toimijoita ovat Asiakas ja Ylläpitäjä. Käyttötapauksia ovat "Selaa tuotteita", "Lisää ostoskoriin", "Tee tilaus" ja "Hallinnoi tuotteita".
Suunnitteluvaiheessa käyttötapauskaaviota ei tyypillisesti käytetä.
Viestiyhteyskaavio kuvaa toimijoiden tai olioiden välistä vuorovaikutusta aikajärjestyksessä: ketkä osallistuvat, missä järjestyksessä viestit kulkevat ja mikä on toiminnan aikajana.
Määrittelyvaiheessa kaavio kuvaa järjestelmän toimintaa ja toimijoiden välistä viestintää yleisellä tasolla käyttötapausten pohjalta — käyttäjän ja järjestelmän välinen vuorovaikutus ilman teknisiä yksityiskohtia.
Suunnitteluvaiheessa kaavio kuvaa komponenttien ja olioiden välistä vuorovaikutusta ohjelmakoodin tasolla: täsmälliset metodikutsut, parametrit ja paluuarvot aikajärjestyksessä.
Tilakaavio kuvaa järjestelmän tai sen osan eri tilat sekä siirtymät tilojen välillä laukaisevine tapahtumineen.
Määrittelyvaiheessa kaavio kuvaa järjestelmän toimintaa ja tiloja yleisellä tasolla.
Esimerkki: Tilauksen tilat verkkokaupassa: Odottaa maksua → Maksettu → Käsittelyssä → Lähetetty → Toimitettu.
Suunnitteluvaiheessa kaavio kuvaa käyttöliittymän toiminnan sekä ohjelman tai komponenttien eri tilat ohjelmakoodin ja algoritmien tasolla — esim. käyttöliittymäkomponentin tilamuutokset tai olion elinkaari kooditasolla.
UML:n käyttö tuo useita etuja ohjelmistokehitykseen:
UML-kaavioiden piirtämiseen on saatavilla lukuisia työkaluja:
Vaikka UML on hyödyllinen, sillä on myös rajoituksia:
Ketterissä menetelmissä UML:ää käytetään usein kevyemmin, piirtämällä kaaviot valkotaululle tai paperille tarpeen mukaan, sen sijaan että ylläpidettäisiin yksityiskohtaisia kaavioita jatkuvasti.
PlantUML on tekstipohjainen työkalu UML-kaavioiden luomiseen. Kaaviot kirjoitetaan yksinkertaisella tekstisyntaksilla, ja työkalu generoi niistä kuvan automaattisesti. Tämä helpottaa kaavioiden versionhallintaa ja ylläpitoa, koska kaaviolähde on pelkkää tekstiä.
Katso myös video PlantUML:n käyttöönotosta: PlantUML – pikaopas.
kaavio.puml, ja generoi kuva komentoriviltä:java -jar plantuml.jar kaavio.puml
Kätevin tapa käyttää PlantUML:ää on VS Code yhdessä PlantUML-laajennuksen kanssa — se näyttää kaavion reaaliaikaisesti tekstieditorin vieressä.
Alla yksinkertainen esimerkki Person-luokan kuvaamisesta PlantUML-syntaksilla:
@startuml
class Person {
- name : String
- age : int
+ getName() : String
+ getAge() : int
+ setName(name : String) : void
}
@enduml
Tämä tuottaa luokkakaavion, jossa Person-luokalla on kaksi yksityistä attribuuttia ja kolme julkista metodia. Merkinnät - (private) ja + (public) ovat samat kuin UML:ssä yleensä.
Mermaid on tekstipohjainen kaaviotyökalu, joka toimii suoraan Markdown-dokumenteissa ilman erillistä asennusta. Se on erityisen kätevä GitHubissa, GitLabissa ja Notion-dokumenteissa, joissa Mermaid-kaaviot renderöityvät automaattisesti.
Mermaid ei vaadi Javaa eikä erillistä ohjelmaa — pääset alkuun kolmella tavalla:
```mermaid-lohkoon, ja se renderöityy automaattisesti.Alla sama Person-luokka Mermaid-syntaksilla:
```mermaid
classDiagram
class Person {
-String name
-int age
+getName() String
+getAge() int
+setName(String name) void
}
```
Näkyvyysmerkinnät ovat samat kuin PlantUML:ssä: - on private ja + on public. Syntaksissa on kuitenkin ero: muuttujissa tyyppi kirjoitetaan ennen nimeä (-String name), kun taas PlantUML:ssä nimi kirjoitetaan ennen tyyppiä (- name : String). Metodeissa paluutyyppi tulee molemmissa nimen jälkeen, mutta Mermaidissa ei käytetä kaksoispistettä erottimena.
Molemmat työkalut sopivat ohjelmistoprojektin kaavioiden tekemiseen, mutta niillä on eri vahvuudet:
| PlantUML | Mermaid | |
|---|---|---|
| Asennus | Vaatii Javan ja jar-tiedoston | Ei asennusta — toimii selaimessa ja Markdownissa |
| Kaaviotyypit | Laajempi valikoima | Yleisimmät tyypit katettu |
| Monimutkaiset kaaviot | Soveltuu hyvin | Voi tulla rajoitteita |
| GitHub / GitLab | Ei suoraa tukea | Renderöityy automaattisesti |
| Oppimiskynnys | Hieman suurempi | Matala, helppo aloittaa |
Valitse Mermaid, jos teet kaavioita suoraan Markdown-dokumentteihin tai GitHubiin, tai haluat päästä nopeasti alkuun ilman asennuksia.
Valitse PlantUML, jos tarvitset laajemman kaaviovalikoiman, teet monimutkaisia luokka- tai sekvenssikaavioita, tai haluat käyttää työkalua paikallisesti ilman verkkoyhteyttä.
Tällä kurssilla kumpikin sopii hyvin. Mermaid on helpompi aloittelijalle, PlantUML puolestaan tarjoaa enemmän mahdollisuuksia projektin kasvaessa.