UML

Julkaistu

Yleistä

Alla on annettu yleisiä ohjeita luokkakaavion piirtoon. Muista lukea myös tehtävänannossa sanottu, vaikka alla olevassa kattaa varsin pitkälle aiemmin annetun ohjeistuksen.

  • Esitä luokkatyyppinen attribuutti assosiaatioina, kun attribuutin tyyppi on jokin itse tekemäsi luokka (esimerkiksi Kokoelma).
  • Esitä attribuutti luokkasymbolin attribuuttitasolla, jos attribuutti on alkeistyyppinen tai Javan omaa luokkatyyppiä (esimerkiksi String).
  • Esitä kaaviossa tavallisten attribuuttien lisäksi myös vakiomuotoiset attribuutit.
  • Valmiina annettujen luokkien ja rajapintojen symboleissa riittää kirjoittaa näkyviin vain symbolin nimi. Näiden symboleiden attribuutit ja metodit saa halutessaan piirtää. Omien luokkien sekä valmiina annettujen luokkien ja rajapintojen suhteet on piirrettävä.
  • Piirrä assosiaatioiden, periytymissuhteiden ja toteuttamissuhteiden lisäksi myös riippuvuussuhteet.
  • Kokoa pakkaukseen kuuluvat symbolit pakkaussymbolin sisään.
  • Kaavion voi jakaa kahdelle tai useammalle sivulle tilan loppuessa.
  • Luokkakaavion sisältö tulee selittää sanallisesti dokumentissa.

Piirtotyövälineistä

Harjoitustyön dokumentaatioon kuuluu UML-luokkakaavio, jonka piirtäminen on helpointa kaavioiden piirtoon tehdyllä ohjelmalla. Tällainen on esimerkiksi ER-kaavioista tuttu Dia. NetBeans- ja Eclipse-ohjelmistojen kaltaisiin kehitysympäristöihin on saatavilla UML-lisäosia. Wikipediassa on kattava lista omalle koneelle saatavilla olevista UML-työkaluista. Selaimella käytettäviä työvälineitä on esimerkiksi ilmainen draw.io-palvelu.

Harjoitustyön luokkakaaviossa on niin paljon piirrettävää, että kaaviota ei kannata tehdä täysin manuaalisesti, vaikka ohjelmassa olisikin käytettävissä UML-symbolit. Tavanomaisemman ohjelman sijaan kannattaa valita takaisinmallintamisen hallitseva piirto-ohjelma tai lisäosa. Takaisinmallintava työväline muodostaa lähdekoodista kaavion, jossa on tyypillisesti automaattisesti luodut symbolit luokille ja rajapinnoille. Vaikka kaaviota pitää usein täydentää manuaalisesti muun muassa lisäämällä itse luokkien väliset assosiaatiot, on ajansäästö huomattava täysin manuaaliseen työhön verrattuna. Takaisinmallinnuksen ongelmana on valitettavasti se, että suuri osa ilmaisista takaisinmallintamisen hallitsevista ilmaisista ohjelmista on keskeneräisiä, rikki tai ylettömän vaikeakäyttöisiä.

UMLet

UMLet-ohjelma vaikuttaa olevan vastuuopettajan testaamista huonoista vaihtoehdoista paras harjoitustyökoodin luokkakaavion puoliautomaattiseen muodostamiseen.UMLet on ilmainen ja siitä on saatavilla sellaisenaan ajettava (stand-alone) itsenäinen versio, joka asennetaan purkamalla lataussivuilta valittu zip-paketti koneelle. Ohjelman käynnistyy kaikissa käyttöjärjestelmissä umlet.jar-tiedostoa kahdesti klikkaamalla. Ohjelman voi käynnistää myös omalle käyttöjärjestelmälle ominaisella tavalla: Windows-käyttäjille on tarjolla Umlet.exe-tiedosto (klikkaa kahdesti) ja kovan luokan Mac- ja Linux-käyttäjille skripti (muokaa ja suorita komentoriviltä).

Ohjelman itsenäisessä versiossa on File | Generate Class Elements from Files or Directory -toiminto, jonka kautta valitaan tiedostot tai hakemistot, joiden Java-koodista halutaan muodostaa luokka- ja rajapintasymbolit. Poista tavukooditiedostot ennen takaisimallintamista, koska UMLet lukee aina molemmat.

UMLet ei tee edes periytymissuhteita luokkien välille, vaan kaikki suhteet on tehtävä manuaalisesti. Joudut siis poistamaan luokkalaatikoista attribuutteja ja piirtämään niitä vastaavat assosiaatiot luokkien välille. Myös pakkaussymbolit on lisättävä kaavioon manuaalisesti.

Kaavion osien ominaisuuksien muokkaaminen tapahtuu tavallisuudesta poiketen tekstiä käsittelemällä. Onneksi muokkaaminen on tällä tavoin melko intuitiivista. Kaavion aktiivisen osan sisältö näkyy aina tekstinä ohjelman pääikkunan oikeassa alakulmassa olevassa Properties-ikkunassa. Esimerkiksi Hakemisto-luokan symbolin (kuva 1a) määrittelyssä (kuva 1b) kukin luokkasymbolin osa on esitetty tekstuaalisesti. Luokkasymbolista on poistettu käsin sisalto– ja ylihakemisto-attribuutit, koska ne on esitettävä assosiaatioina.

Kuva 1a: Hakemisto-luokan symboli.
Hakemisto
--
+HAKEMISTOEROTIN = "/": String
--
+Hakemisto()
+Hakemisto(StringBuilder uusiNimi)
+Hakemisto(StringBuilder uusiNimi, Hakemisto ylla)
+sisalto(): OmaLista<Tieto>
+sisalto(OmaLista<Tieto> uusiSisalto): void
+ylihakemisto(): Hakemisto
+ylihakemisto(Hakemisto ylla): void
+toString(): String
+hae(String hakusana): LinkedList<Tieto>
+lisaa(Tieto lisattava): boolean
+poista(Tieto poistettava): boolean
+iterator(): Iterator<Tieto>
Kuva 1b: Hakemisto-luokan symbolin ominaisuudet.

Elementti (symboli tai suhde) lisätään kaavioon kaksoisklikkaamalla sitä UMLetin pääikkunan oikean yläkulman ikkunassa. Suhteet reititetään ja kiinnitetään symboleihin hiiren avulla. Elementti valitaan klikkaamalla sitä kerran. Valitun elementin ominaisuudet päivittyvät Properties-ikkunaan.

lt=<<<<-
m2=   2
r2=paa, hanta
Kuva 2b: LinkitettyLista– ja Solmu-luokan
välisen koostesuhteen ominaisuudet.
lt=-
m1=1
m2=0..1
seuraava>
Kuva 2a: LinkitettyLista– ja Solmu-luokkien symbolit. Kuva 2c: Solmu-luokan refleksiivisen
suhteen ominaisuudet.

Kuvassa 2a on piirretty kaksi suhdetta, joiden ominaisuudet on annettu kuvissa 2b ja 2c. Kuvista käy ilmi, että suhteen tyyppi määritellään lt-attribuutin avulla. Attribuuteilla m1– ja m2-määritellään kertautumiset suhteen lähtö- ja tuloluokissa. Attribuuteilla r1– ja r2 annetaan roolit. Suhde voidaan myös nimetä ja sen lukusuunta määritellä (kuva 2c). Kuvan 2b kertautumisarvon ja roolinimien eteen on laitettu välilyöntejä, jotta tekstit olisivat paremmin luettavissa.

Kaavion saa tallennnettua kuvaksi tai pdf-muotoon File | Export as –toiminnolla.

UMLetia käyttäessään saa varautua siihen, että käyttöliittymä ei aina piirry kunnolla. Yleensä ikkunan koon muuttaminen tai ikkunan liikuttelu palauttaa osin kadonneet valikot näkyviin.