UML

Julkaistu

Harjoitustyön dokumentaatioon kuuluu UML-luokkakaavio, jonka piirtäminen on helpointa kaavioiden piirtoon tehdyllä ohjelmalla. NetBeans- ja Eclipse-ohjelmistojen kaltaisiin kehitysympäristöihin on saatavilla UML-lisäosia. Wikipediassa on kattava lista UML-työkaluista.

Harjoitustyön luokkakaavio syntyy nopeiten takaisinmallintamisen hallitsevalla piirto-ohjelmalla. Takaisinmallintava ohjelma muodostaa lähdekoodista automaattisesti kaavion, jota pitää usein täydentää manuaalisesti muun muassa lisäämällä itse luokkien väliset assosiaatiot. Valitettavasti suuri osa ilmaisista takaisinmallintamisen hallitsevista ilmaisista ohjelmista on keskeneräisiä, rikki tai ylettömän vaikeakäyttöisiä.

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 Viesti) tai jokin oope2018ht.apulaiset– tai fi.uta.csjola.oope.lista-pakkauksen luokista.
  • 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ä myös annettujen luokkien ja rajapintojen keskinäiset suhteet. Vastuuopettajan näkemys fi.uta.csjola.oope.lista-pakkauksen sisällöstä UML-kielellä on annettu luentomateriaalissa.
  • Setteri– ja Getteri-annotaatiot voi piirtää rajapintoina. Tällöin annotaatioita käyttävien luokkien ja annotaatioiden välille tulee piirtää toteutussuhde.
  • 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.

Dia

Ilmaisella Dia-ohjelmalla voi piirtää niin vuo-, ER- kuin luokkakaavioitakin. Ilmaisuuden lisäksi Dian etuna on tuttuus: osa kurssilaisista on piirtänyt Dialla kaavioita jo aiemmin. Dian ongelmista UML-kaavioiden osalta voisi mainita sen, että Dia ei osaa takaisinmallinnusta, UML-elementit ovat rumia ja elementtien ulkoasua on hankala muokata. Esimerkiksi suhdeviivojen paksuutta ei voi muuttaa.

UMLet

UMLet-ohjelma vaikuttaa olevan vastuuopettajan testaamista huonoista vaihtoehdoista paras ilmainen työväline harjoitustyökoodin luokkakaavion puoliautomaattiseen muodostamiseen. UMLetin sellaisenaan ajettava (stand-alone) itsenäinen versio 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 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 rajapintalaatikot. 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.

UMLet ei ymmärrä Setteri– ja Getteri-annotaatioita. Vaihda näiden annotaatiotiedostojen päätteksi jokin muu kuin java tai poista tiedostot ennen kaavion automaattista muodostamista. Kumoa ohjelmaan tekemäsi muutokset kaavion muodostamisen jälkeen ja piirrä annotaatiot itse.

Kaavion osien (luokkalaatikot, assosiaatiot yms.) 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 ikkunan oikeassa alakulman Properties-ikkunassa. Esimerkiksi Media-luokan symbolin (kuva 1a) määrittelyssä (kuva 1b) kukin luokkasymbolin osa on esitetty tekstuaalisesti.

 
Media
--
+EROTIN = "|": String
+KENTANPITUUS = 8: int
+NIMIKEKENTANPITUUS = 30: int
+NIMIKKEENMINPITUUS = 1: int
-nimike: String
--
+Media(String n)
+luo(String rivi): Media
+nimike(): String
+nimike(String n): void
+toString(): String
+equals(Object obj): boolean
+compareTo(Media o): int
Kuva 1a: Media-luokan symboli. Kuva 1b: Media-luokan symbolin ominaisuudet.

UMLet-ikkunan oikean yläkulman alueelta voi valita ja vetää hiirellä elementin (symbolin tai suhteen) kaavioon. Suhteet reititetään ja kiinnitetään luokka- ja rajapintasymboleihin hiiren avulla. Oikean yläkulman symbolin tai suhteen aktivoimalla voi tutustua kunkin elementin ominaisuuksiin.

 
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.