Ohjelmistotuotanto
UML - Unified Modeling Language

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 (Structure Diagrams)

Rakennekaaviot kuvaavat järjestelmän staattista rakennetta — mitä osia järjestelmä sisältää ja miten ne liittyvät toisiinsa.

Käyttöönottokaavio (Deployment Diagram)

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 (Component Diagram)

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 (Class Diagram)

Luokkakaavio kuvaa järjestelmän luokat, niiden attribuutit ja metodit sekä luokkien väliset suhteet (assosiaatio, aggregaatio, kompositio, periytyminen).

Luokkakaavion näkyvyysmerkinnät:

  • + = public
  • - = private
  • # = protected
  • ~ = package

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 (Behavior Diagrams)

Käyttäytymiskaaviot kuvaavat järjestelmän dynaamista toimintaa — miten järjestelmä käyttäytyy ja toimii eri tilanteissa.

Käyttötapauskaavio (Use Case Diagram)

Käyttötapauskaavio esittää järjestelmän toiminnot käyttäjän näkökulmasta. Se sisältää:

  • Toimijat (Actors) — järjestelmän ulkopuoliset käyttäjät tai järjestelmät
  • Käyttötapaukset (Use Cases) — järjestelmän toiminnot käyttäjän näkökulmasta
  • Suhteet — toimijoiden ja käyttötapausten väliset yhteydet

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 (Sequence Diagram)

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 (State Diagram)

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 hyödyt

UML:n käyttö tuo useita etuja ohjelmistokehitykseen:

  • Standardoitu kommunikaatio - Kaikki ymmärtävät samat merkinnät
  • Dokumentaatio - Kaaviot toimivat järjestelmän dokumentaationa
  • Suunnittelun validointi - Virheet huomataan ennen koodausta
  • Yhteistyö - Helpottaa tiimin kommunikaatiota
  • Ylläpito - Helpottaa järjestelmän ymmärtämistä myöhemmin
  • Abstraktio - Mahdollistaa järjestelmän tarkastelun eri tasoilla
UML-työkalut

UML-kaavioiden piirtämiseen on saatavilla lukuisia työkaluja:

Maksulliset työkalut

  • Enterprise Architect - Kattava UML-työkalu ammattikäyttöön
  • Visual Paradigm - Monipuolinen mallinnustyökalu
  • IBM Rational Rose - Perinteinen UML-työkalu

Ilmaiset ja avoimen lähdekoodin työkalut

  • PlantUML - Tekstipohjainen UML-työkalu, helppo integroida koodiin
  • draw.io (diagrams.net) - Selainpohjainen kaaviotyökalu
  • Lucidchart - Selainpohjainen, ilmainen perusversio
  • StarUML - Kevyt työpöytäsovellus
  • ArgoUML - Avoimen lähdekoodin UML-työkalu
  • Mermaid - Tekstipohjainen, toimii Markdown-dokumenteissa

IDE-integraatiot

  • IntelliJ IDEA - Sisäänrakennettu UML-tuki
  • Visual Studio - Luokkakaavioiden generointi
  • Eclipse - UML-laajennukset saatavilla
UML:n rajoitukset

Vaikka UML on hyödyllinen, sillä on myös rajoituksia:

  • Voi olla liian raskas pieniin projekteihin
  • Kaaviot voivat vanhentua nopeasti, jos koodia muutetaan
  • Vaatii opettelua ja sitoutumista tiimiltä
  • Ei sovellu kaikkiin ohjelmointiparadigmoihin yhtä hyvin
  • Liian yksityiskohtaiset kaaviot voivat olla vaikeita ylläpitää

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 lyhyesti

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.

Käyttöönotto

  1. Asenna Java (JRE) osoitteesta java.com — PlantUML vaatii Javan toimiakseen.
  2. Lataa PlantUML-jar-tiedosto osoitteesta plantuml.com/download.
  3. Luo kaaviotiedosto, esim. 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ä.

Esimerkki: luokkakaavio

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 lyhyesti

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.

Käyttöönotto

Mermaid ei vaadi Javaa eikä erillistä ohjelmaa — pääset alkuun kolmella tavalla:

  1. Selainpohjainen editori — kokeile suoraan osoitteessa mermaid.live, ei vaadi mitään asennusta.
  2. VS Code — asenna Markdown Preview Mermaid Support -laajennus, jolloin kaaviot näkyvät suoraan Markdown-esikatslussa.
  3. GitHub / GitLab — lisää kaavio suoraan Markdown-tiedostoon ```mermaid-lohkoon, ja se renderöityy automaattisesti.

Esimerkki: luokkakaavio

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.

PlantUML vai Mermaid?

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.



Toggle Menu