{"id":367,"date":"2018-04-26T22:13:41","date_gmt":"2018-04-26T19:13:41","guid":{"rendered":"https:\/\/coursepages.uta.fi\/tiea2-1\/?page_id=367"},"modified":"2018-04-27T00:29:08","modified_gmt":"2018-04-26T21:29:08","slug":"uml","status":"publish","type":"page","link":"https:\/\/coursepages2.tuni.fi\/tiea2-1\/kevat-2018\/harjoitustyot\/uml\/","title":{"rendered":"UML"},"content":{"rendered":"<p>Harjoitusty\u00f6n dokumentaatioon kuuluu UML-luokkakaavio, jonka piirt\u00e4minen on helpointa kaavioiden piirtoon tehdyll\u00e4 ohjelmalla. NetBeans- ja Eclipse-ohjelmistojen kaltaisiin kehitysymp\u00e4rist\u00f6ihin on saatavilla UML-lis\u00e4osia. Wikipediassa on kattava <a href=\"https:\/\/en.wikipedia.org\/wiki\/List_of_Unified_Modeling_Language_tools\">lista<\/a> UML-ty\u00f6kaluista.<\/p>\n<p>Harjoitusty\u00f6n luokkakaavio syntyy nopeiten takaisinmallintamisen hallitsevalla piirto-ohjelmalla. Takaisinmallintava ohjelma muodostaa l\u00e4hdekoodista automaattisesti kaavion, jota pit\u00e4\u00e4 usein t\u00e4ydent\u00e4\u00e4 manuaalisesti muun muassa lis\u00e4\u00e4m\u00e4ll\u00e4 itse luokkien v\u00e4liset assosiaatiot. Valitettavasti suuri osa ilmaisista takaisinmallintamisen hallitsevista ilmaisista ohjelmista on keskener\u00e4isi\u00e4, rikki tai ylett\u00f6m\u00e4n vaikeak\u00e4ytt\u00f6isi\u00e4.<\/p>\n<p>Alla on annettu yleisi\u00e4 ohjeita luokkakaavion piirtoon. Muista lukea my\u00f6s teht\u00e4v\u00e4nannossa sanottu, vaikka alla olevassa kattaa varsin pitk\u00e4lle aiemmin annetun ohjeistuksen.<\/p>\n<ul>\n<li>Esit\u00e4 luokkatyyppinen attribuutti assosiaatioina, kun attribuutin tyyppi on jokin itse tekem\u00e4si luokka (esimerkiksi <em>Viesti<\/em>) tai jokin <em>oope2018ht.apulaiset<\/em>&#8211; tai <em>fi.uta.csjola.oope.lista<\/em>-pakkauksen luokista.<\/li>\n<li>Esit\u00e4 attribuutti luokkasymbolin attribuuttitasolla, jos attribuutti on alkeistyyppinen tai Javan omaa luokkatyyppi\u00e4 (esimerkiksi <em>String<\/em>).<\/li>\n<li>Esit\u00e4 kaaviossa tavallisten attribuuttien lis\u00e4ksi my\u00f6s vakiomuotoiset attribuutit.<\/li>\n<li>Valmiina annettujen luokkien ja rajapintojen symboleissa riitt\u00e4\u00e4 kirjoittaa n\u00e4kyviin vain symbolin nimi. N\u00e4iden symboleiden attribuutit ja metodit saa halutessaan piirt\u00e4\u00e4. Omien luokkien sek\u00e4 valmiina annettujen luokkien ja rajapintojen suhteet on piirrett\u00e4v\u00e4. Piirr\u00e4 my\u00f6s annettujen luokkien ja rajapintojen keskin\u00e4iset suhteet. Vastuuopettajan n\u00e4kemys <em>fi.uta.csjola.oope.lista<\/em>-pakkauksen sis\u00e4ll\u00f6st\u00e4 UML-kielell\u00e4 on annettu luentomateriaalissa.<\/li>\n<li><em>Setteri<\/em>&#8211; ja <em>Getteri<\/em>-annotaatiot voi piirt\u00e4\u00e4 rajapintoina. T\u00e4ll\u00f6in annotaatioita k\u00e4ytt\u00e4vien luokkien ja annotaatioiden v\u00e4lille tulee piirt\u00e4\u00e4 toteutussuhde.<\/li>\n<li>Piirr\u00e4 assosiaatioiden, periytymissuhteiden ja toteuttamissuhteiden lis\u00e4ksi my\u00f6s riippuvuussuhteet.<\/li>\n<li>Kokoa pakkaukseen kuuluvat symbolit pakkaussymbolin sis\u00e4\u00e4n.<\/li>\n<li>Kaavion voi jakaa kahdelle tai useammalle sivulle tilan loppuessa.<\/li>\n<li>Luokkakaavion sis\u00e4lt\u00f6 tulee selitt\u00e4\u00e4 sanallisesti dokumentissa.<\/li>\n<\/ul>\n<h3>Dia<\/h3>\n<p>Ilmaisella <a href=\"https:\/\/wiki.gnome.org\/Apps\/Dia\">Dia-ohjelmalla<\/a> voi piirt\u00e4\u00e4 niin vuo-, ER- kuin luokkakaavioitakin. Ilmaisuuden lis\u00e4ksi Dian etuna on tuttuus: osa kurssilaisista on piirt\u00e4nyt Dialla kaavioita jo aiemmin. Dian ongelmista UML-kaavioiden osalta voisi mainita sen, ett\u00e4 Dia ei osaa takaisinmallinnusta, UML-elementit ovat rumia ja elementtien ulkoasua on hankala muokata. Esimerkiksi suhdeviivojen paksuutta ei voi muuttaa.<\/p>\n<h3>UMLet<\/h3>\n<p><a href=\"http:\/\/www.umlet.com\/\">UMLet-ohjelma<\/a> vaikuttaa olevan vastuuopettajan testaamista huonoista vaihtoehdoista paras ilmainen ty\u00f6v\u00e4line harjoitusty\u00f6koodin luokkakaavion puoliautomaattiseen muodostamiseen. UMLetin sellaisenaan ajettava (stand-alone) itsen\u00e4inen versio asennetaan purkamalla <a href=\"http:\/\/www.umlet.com\/changes.htm\">lataussivuilta<\/a> valittu ZIP-paketti koneelle. Ohjelman k\u00e4ynnistyy kaikissa k\u00e4ytt\u00f6j\u00e4rjestelmiss\u00e4 <em>umlet.jar<\/em>-tiedostoa kahdesti klikkaamalla. Ohjelman voi k\u00e4ynnist\u00e4\u00e4 my\u00f6s omalle k\u00e4ytt\u00f6j\u00e4rjestelm\u00e4lle ominaisella tavalla: Windows-k\u00e4ytt\u00e4jille on tarjolla <em>Umlet.exe<\/em>-tiedosto (klikkaa kahdesti) ja kovan luokan Linux-k\u00e4ytt\u00e4jille skripti (muokaa ja suorita komentorivilt\u00e4).<\/p>\n<p>Ohjelman itsen\u00e4isess\u00e4 versiossa on <em>File | Generate Class Elements from Files or Directory<\/em> -toiminto, jonka kautta valitaan tiedostot tai hakemistot, joiden Java-koodista halutaan muodostaa luokka- ja rajapintalaatikot. Poista tavukooditiedostot ennen takaisimallintamista, koska UMLet lukee aina molemmat.<\/p>\n<p>UMLet ei tee edes periytymissuhteita luokkien v\u00e4lille, vaan kaikki suhteet on teht\u00e4v\u00e4 manuaalisesti. Joudut siis poistamaan luokkalaatikoista attribuutteja ja piirt\u00e4m\u00e4\u00e4n niit\u00e4 vastaavat assosiaatiot luokkien v\u00e4lille. My\u00f6s pakkaussymbolit on lis\u00e4tt\u00e4v\u00e4 kaavioon manuaalisesti.<\/p>\n<p><span style=\"background-color: #ffff99\">UMLet ei ymm\u00e4rr\u00e4 <em>Setteri<\/em>&#8211; ja <em>Getteri<\/em>-annotaatioita<\/span>. Vaihda n\u00e4iden annotaatiotiedostojen p\u00e4\u00e4tteksi jokin muu kuin <em>java<\/em> tai poista tiedostot ennen kaavion automaattista muodostamista. Kumoa ohjelmaan tekem\u00e4si muutokset kaavion muodostamisen j\u00e4lkeen ja piirr\u00e4 annotaatiot itse.<\/p>\n<p>Kaavion osien (luokkalaatikot, assosiaatiot yms.) ominaisuuksien muokkaaminen tapahtuu tavallisuudesta poiketen teksti\u00e4 k\u00e4sittelem\u00e4ll\u00e4. Onneksi muokkaaminen on t\u00e4ll\u00e4 tavoin melko intuitiivista. Kaavion aktiivisen osan sis\u00e4lt\u00f6 n\u00e4kyy aina tekstin\u00e4 ohjelman ikkunan oikeassa alakulman <em>Properties<\/em>-ikkunassa. Esimerkiksi <em>Media<\/em>-luokan symbolin (kuva 1a) m\u00e4\u00e4rittelyss\u00e4 (kuva 1b) kukin luokkasymbolin osa on esitetty tekstuaalisesti.<\/p>\n<table>\n<tbody>\n<tr>\n<td>\u00a0<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-377\" src=\"https:\/\/coursepages2.tuni.fi\/tiea2-1\/wp-content\/uploads\/sites\/79\/2018\/04\/Media-luokka.png\" alt=\"\" width=\"280\" height=\"280\" srcset=\"https:\/\/coursepages2.tuni.fi\/tiea2-1\/wp-content\/uploads\/sites\/79\/2018\/04\/Media-luokka.png 280w, https:\/\/coursepages2.tuni.fi\/tiea2-1\/wp-content\/uploads\/sites\/79\/2018\/04\/Media-luokka-150x150.png 150w\" sizes=\"auto, (max-width: 280px) 100vw, 280px\" \/><\/td>\n<td style=\"text-align: left\">\n<pre>Media\r\n--\r\n+EROTIN = \"|\": String\r\n+KENTANPITUUS = 8: int\r\n+NIMIKEKENTANPITUUS = 30: int\r\n+NIMIKKEENMINPITUUS = 1: int\r\n-nimike: String\r\n--\r\n+Media(String n)\r\n+luo(String rivi): Media\r\n+nimike(): String\r\n+nimike(String n): void\r\n+toString(): String\r\n+equals(Object obj): boolean\r\n+compareTo(Media o): int<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td>Kuva 1a: <em>Media<\/em>-luokan symboli.<\/td>\n<td style=\"text-align: left\">Kuva 1b: <em>Media<\/em>-luokan symbolin ominaisuudet.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>UMLet-ikkunan oikean yl\u00e4kulman alueelta voi valita ja vet\u00e4\u00e4 hiirell\u00e4 elementin (symbolin tai suhteen) kaavioon. Suhteet reititet\u00e4\u00e4n ja kiinnitet\u00e4\u00e4n luokka- ja rajapintasymboleihin hiiren avulla. Oikean yl\u00e4kulman symbolin tai suhteen aktivoimalla voi tutustua kunkin elementin ominaisuuksiin.<\/p>\n<table>\n<tbody>\n<tr>\n<td rowspan=\"3\">\u00a0<img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-382 size-full\" src=\"https:\/\/coursepages2.tuni.fi\/tiea2-1\/wp-content\/uploads\/sites\/79\/2018\/04\/LinkitettyLista-_ja_Solmu-luokat.png\" alt=\"\" width=\"344\" height=\"290\" srcset=\"https:\/\/coursepages2.tuni.fi\/tiea2-1\/wp-content\/uploads\/sites\/79\/2018\/04\/LinkitettyLista-_ja_Solmu-luokat.png 344w, https:\/\/coursepages2.tuni.fi\/tiea2-1\/wp-content\/uploads\/sites\/79\/2018\/04\/LinkitettyLista-_ja_Solmu-luokat-300x253.png 300w\" sizes=\"auto, (max-width: 344px) 100vw, 344px\" \/><\/td>\n<td style=\"text-align: left\" valign=\"top\">\n<pre>lt=&lt;&lt;&lt;&lt;-\r\nm2=\u00a0\u00a0 2\r\nr2=paa, hanta<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td>Kuva 2b: <em>LinkitettyLista<\/em>&#8211; ja <em>Solmu<\/em>-luokan<br \/>\nv\u00e4lisen koostesuhteen ominaisuudet.<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\">\n<pre>lt=-\r\nm1=1\r\nm2=0..1\r\nseuraava&gt;<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td>Kuva 2a: <em>LinkitettyLista<\/em>&#8211; ja <em>Solmu<\/em>-luokkien symbolit.<\/td>\n<td style=\"text-align: left\">Kuva 2c: <em>Solmu<\/em>-luokan refleksiivisen<br \/>\nsuhteen ominaisuudet.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Kuvassa 2a on piirretty kaksi suhdetta, joiden ominaisuudet on annettu kuvissa 2b ja 2c. Kuvista k\u00e4y ilmi, ett\u00e4 suhteen tyyppi m\u00e4\u00e4ritell\u00e4\u00e4n <em>lt<\/em>-attribuutin avulla. Attribuuteilla <em>m1<\/em>&#8211; ja <em>m2<\/em>-m\u00e4\u00e4ritell\u00e4\u00e4n kertautumiset suhteen l\u00e4ht\u00f6- ja tuloluokissa. Attribuuteilla <em>r1<\/em>&#8211; ja <em>r2<\/em> annetaan roolit. Suhde voidaan my\u00f6s nimet\u00e4 ja sen lukusuunta m\u00e4\u00e4ritell\u00e4 (kuva 2c). Kuvan 2b kertautumisarvon ja roolinimien eteen on laitettu v\u00e4lily\u00f6ntej\u00e4, jotta tekstit olisivat paremmin luettavissa.<\/p>\n<p>Kaavion saa tallennnettua kuvaksi tai PDF-muotoon <em>File | Export as &#8211;<\/em>toiminnolla.<\/p>\n<p>UMLetia k\u00e4ytt\u00e4ess\u00e4\u00e4n saa varautua siihen, ett\u00e4 k\u00e4ytt\u00f6liittym\u00e4 ei aina piirry kunnolla. Yleens\u00e4 ikkunan koon muuttaminen tai ikkunan liikuttelu palauttaa osin kadonneet valikot n\u00e4kyviin.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Harjoitusty\u00f6n dokumentaatioon kuuluu UML-luokkakaavio, jonka piirt\u00e4minen on helpointa kaavioiden piirtoon tehdyll\u00e4 ohjelmalla. NetBeans- ja Eclipse-ohjelmistojen kaltaisiin kehitysymp\u00e4rist\u00f6ihin on saatavilla UML-lis\u00e4osia. Wikipediassa on kattava lista UML-ty\u00f6kaluista. Harjoitusty\u00f6n luokkakaavio syntyy nopeiten takaisinmallintamisen hallitsevalla piirto-ohjelmalla. Takaisinmallintava ohjelma muodostaa l\u00e4hdekoodista automaattisesti kaavion, jota pit\u00e4\u00e4 usein t\u00e4ydent\u00e4\u00e4 manuaalisesti muun muassa lis\u00e4\u00e4m\u00e4ll\u00e4 itse luokkien v\u00e4liset assosiaatiot. Valitettavasti suuri osa ilmaisista takaisinmallintamisen &hellip; <a href=\"https:\/\/coursepages2.tuni.fi\/tiea2-1\/kevat-2018\/harjoitustyot\/uml\/\" class=\"more-link\">Jatka artikkeliin <span class=\"screen-reader-text\">UML<\/span><\/a><\/p>\n","protected":false},"author":6,"featured_media":0,"parent":255,"menu_order":2,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-367","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/coursepages2.tuni.fi\/tiea2-1\/wp-json\/wp\/v2\/pages\/367","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/coursepages2.tuni.fi\/tiea2-1\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/coursepages2.tuni.fi\/tiea2-1\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/coursepages2.tuni.fi\/tiea2-1\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/coursepages2.tuni.fi\/tiea2-1\/wp-json\/wp\/v2\/comments?post=367"}],"version-history":[{"count":38,"href":"https:\/\/coursepages2.tuni.fi\/tiea2-1\/wp-json\/wp\/v2\/pages\/367\/revisions"}],"predecessor-version":[{"id":370,"href":"https:\/\/coursepages2.tuni.fi\/tiea2-1\/wp-json\/wp\/v2\/pages\/367\/revisions\/370"}],"up":[{"embeddable":true,"href":"https:\/\/coursepages2.tuni.fi\/tiea2-1\/wp-json\/wp\/v2\/pages\/255"}],"wp:attachment":[{"href":"https:\/\/coursepages2.tuni.fi\/tiea2-1\/wp-json\/wp\/v2\/media?parent=367"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}