BME Irányítástechnika és Informatika Tanszék Szoftver labor 3.
2012.
UML modellezés és kódgenerálás útmutató Készítette: Simon Balázs, BME IIT, 2012.
Tartalomjegyzék 1
Az OpenAmeos telepítése ............................................................................................................... 2
2
Az OpenAmeos használata.............................................................................................................. 8 2.1
OpenAmeos projektkönyvtár .................................................................................................. 8
2.2
OpenAmeos projekt létrehozása ............................................................................................ 9
2.3
Lock-olás kikapcsolása .......................................................................................................... 11
2.4
Projektek kezelése ................................................................................................................ 12
2.4.1
Projekt törlése ............................................................................................................... 12
2.4.2
Projekt tisztítása............................................................................................................ 12
2.4.3
Projekt hordozhatóvá tétele ......................................................................................... 12
2.4.4
Hordozható projekt visszaállítása ................................................................................. 13
2.5
Modellezés ............................................................................................................................ 14
2.5.1
UML profile ................................................................................................................... 14
2.5.2
Use-case diagram .......................................................................................................... 15
2.5.3
Osztálydiagram.............................................................................................................. 17
2.5.4
Szekvencia diagram ....................................................................................................... 20
2.6
Kódgenerálás......................................................................................................................... 21
1
BME Irányítástechnika és Informatika Tanszék Szoftver labor 3.
2012.
1 Az OpenAmeos telepítése A laboron használatos UML eszköz az OpenAmeos lesz: https://www.scopeforge.de/cb/project/8 Ez egy nyílt forráskódú szoftver, Windows és Linux operációs rendszereken is használható. Kétféle módban képes működni. Telepíthető önálló alkalmazásként egy számítógépre, illetve telepíthető csoportmunka támogatás segítségével is elosztottan. Utóbbi esetben először egy szervert kell feltelepíteni egy központi gépre, majd pedig a klienseket a munkagépekre. A telepítőprogram minden változathoz azonos, csupán a telepítés egyetlen lépésében van különbség. Mi önálló alkalmazásként fogjuk használni az eszközt, ehhez majd a megfelelő lépésben az alapértelmezett Standalone változatot fogjuk helybenhagyni. Töltsük le a 10.2-es verziót Windows-ra! Indítsuk el a telepítőt:
2
BME Irányítástechnika és Informatika Tanszék Szoftver labor 3.
Fogadjuk el a licenszfeltételeket:
A következő két ablak információs jellegű, ezeken nyugodtan továbbléphetünk:
3
2012.
BME Irányítástechnika és Informatika Tanszék Szoftver labor 3.
2012.
Ezt követően válasszuk az alapértelmezett Standalone módot, ekkor az OpenAmeos a helyi gépen önállóan is működni fog:
4
BME Irányítástechnika és Informatika Tanszék Szoftver labor 3.
2012.
A következő ablakban hagyjuk üresen a Repository Server mezőt:
Ezután adjuk meg a program telepítési könyvtárát! Ügyeljünk arra, hogy szóköz illetve ékezetes karakter ne szerepeljen az elérési útvonalban, például:
5
BME Irányítástechnika és Informatika Tanszék Szoftver labor 3.
Ezt követően mehetünk tovább:
Majd kattintsunk az Install gombra:
6
2012.
BME Irányítástechnika és Informatika Tanszék Szoftver labor 3.
Végül pedig lépjünk ki a telepítőből:
7
2012.
BME Irányítástechnika és Informatika Tanszék Szoftver labor 3.
2012.
2 Az OpenAmeos használata Az OpenAmeos-t elindítva a következő ablak jelenik meg, ahol megnyithatjuk a beépített példaprojekteket, illetve az általunk korábban készített projekteket:
Zárjuk be ezt az ablakot a Cancel gombbal!
2.1 OpenAmeos projektkönyvtár Az OpenAmeos projektkönyvtára alapértelmezettként a fájlrendszerben az OpenAmeos telepítési könyvtárában az Examples mappa. Ezt átállíthatjuk, ha az Admin > Preferences… menüpontot választjuk és megváltoztatjuk a Project Directory értékét, például:
Ezen az ablakon történt változtatások után újra kell indítani az OpenAmeos-t. OK gombot nyomva a ugyan a program rákérdez, hogy automatikusan újrainduljon-e, de ez a funkció valamiért nem működik, így manuálisan kell kilépni és újraindítani a programot.
8
BME Irányítástechnika és Informatika Tanszék Szoftver labor 3.
2012.
2.2 OpenAmeos projekt létrehozása Új projekt létrehozásához válasszuk a File > New System... menüpontot! A megjelenő ablakban adjunk meg egy projektnevet (System Name), Repository Server-nek célszerű az SQLite-ot választani:
Ezután felugrik egy ablak, amelyben UML profile-okat lehet hozzáadni a projekthez. Válasszuk itt az UMLStandard profile-t, és OK-zzuk le az ablakot (a HSZK-ban a Cancel gombot nyomjuk meg, ott sajnos a virtualizált környezet miatt nem működik a profile importálás):
Windows Vista és Windows 7 operációs rendszereken valamilyen okból kifolyólag jónéhányszor (akár 10-12-szer is) meg fog jelenni az UAC (User Account Control) ablak. Itt mindig engedélyezzük a műveletet!
9
BME Irányítástechnika és Informatika Tanszék Szoftver labor 3.
Végül a következő képernyő fogad majd minket:
10
2012.
BME Irányítástechnika és Informatika Tanszék Szoftver labor 3.
2012.
2.3 Lock-olás kikapcsolása Mint már szó volt róla, az OpenAmeos támogatja több ember közös munkáját is. Ehhez a diagramokat szerkesztés közben lock-olni szokta, még Standalone módban is. Célszerű ezt a lockolást kikapcsolni. Ehhez válasszuk az Admin > Ameos Utility… menüpontot, majd a megjelenő ablakban a Locking subsystem-et:
Kattintsunk az OK gombra. Ekkor megjelenik egy konzol ablak. Itt adjuk ki sorra a status, disable, status, quit, quit parancsokat:
11
BME Irányítástechnika és Informatika Tanszék Szoftver labor 3.
2012.
2.4 Projektek kezelése Az OpenAmeos a 2.1-es szakaszban megadott projektkönyvtár alatt hozza létre az általunk készített projektet. Egy projekt önmagában egy viszonylag komplex könyvtárstruktúrát jelent. Ezt nem célszerű önállóan számítógépek között másolgatni, és nem is szabad csak úgy a fájlrendszerből kitörölni! 2.4.1 Projekt törlése Egy létrehozott projektet először a System > Repository > Destroy System Repository… menüponttal meg kell semmisíteni. Ezt követően a projekt könyvtára a fájlrendszerből manuálisan törölhető. Ha esetleg véletlenül megsemmisítettünk egy projektet, de mégis vissza akarjuk állítani, akkor ezt a System > Repository > Recover System Repository… menüponttal tehetjük meg. 2.4.2 Projekt tisztítása Az OpenAmeos a kitörölt modellelemeket csak a vizuális diagramokról törli, a modelladatbázisból nem. Ha ezektől az adatbázisban is meg akarunk szabadulni, akkor a System > Repository > Empty Repository Trash… menüpontot futtassuk le! 2.4.3 Projekt hordozhatóvá tétele Projekt hordozhatóvá tételéhez válasszuk ki a System > Baselines > Baseline Current System… menüpontot! Itt megadhatjuk a keletkező fájl nevét és elérési útvonalát:
Az OK gombra kattintva a megadott könyvtárban létrejön egy zip fájl. Ezt a fájlt kell átvinni a másik számítógépre.
12
BME Irányítástechnika és Informatika Tanszék Szoftver labor 3.
2012.
2.4.4 Hordozható projekt visszaállítása A projektet az előző szakaszban előállított zip fájlként át kell hozni a saját gépünkön a megfelelő baseline könyvtárba. Innen a projekt a System > Baselines > Restore Selected Baseline System… menüponttal visszaállítható. Itt meg kell adni a zip fájl elérési útvonalát, a célkönytárat, ahova a projekt létre fog jönni, illetve a célprojekt nevét:
Ha a megadott projektnév már létezik, akkor a visszaállítás nem fog sikerülni. Ekkor két dolgot tehetünk: vagy másik projektnevet adunk a célprojektnek, vagy előbb töröljük a régi változatot a 2.4.1-es pontban leírtak szerint, majd ismét megkíséreljük a visszaállítást.
13
BME Irányítástechnika és Informatika Tanszék Szoftver labor 3.
2012.
2.5 Modellezés Egy új diagramot többféleképpen is létrehozhatunk. Például egy X típusú diagramot a következő módokon: • • •
File > New... > X menüpont használata Az OpenAmeos fő ablakában a megfelelő diagramtípuson jobb egérkattintással a New menüpont kiválasztása Az OpenAmeos fő ablakában a megfelelő diagramtípus kiválasztása, majd a diagramok listáján jobb egérkattintással a New menüpont kiválasztása
Fontos megjegyezni, hogy az OpenAmeos a modellelemeket nevük alapján azonosítja, illetve a háttérben rendel hozzájuk egy egyedi GUID-ot az átnevezések megkönnyítéséhez. Ennek a módszernek nagyon nagy előnye, hogy egy modellelem több különböző diagramon is szerepelhet, és mindenhol ugyanazt a modellelemet jelenti. Így egy modellről különböző nézeteket is készíthetünk az egyes diagramokon. A hátrány ebben a módszerben az, hogy egy projekten belül például különböző package-ekben nem lehetnek azonos nevű osztályok. 2.5.1 UML profile Hozzunk létre egy új UML profile-t! Ekkor a következő képernyőt láthatjuk:
14
BME Irányítástechnika és Informatika Tanszék Szoftver labor 3.
2012.
A HSZK gépein az UML profile importálása a virtualizációs környezet miatt nem működik. Egy minimális UML profile-t azonban készíthetünk magunknak. Például ahhoz, hogy az <
> sztereotípiát használhassuk, a következő UML profile-t rajzoljuk meg:
Ebben egy „UML” nevű profile package belsejében egy „UmlClass” nevű metaosztályt és egy „interface” nevű sztereotípiát kell felvenni, és a sztereotípiától a metaosztály felé egy kiterjesztés kapcsolatot kell felvenni. Mentsük el a diagramot valamilyen néven, és ettől kezdve az osztálydiagramon az <> sztereotípia használható lesz. 2.5.2 Use-case diagram Hosszunk létre egy új use-case diagramot! Ekkor a következő képernyő fogad minket:
15
BME Irányítástechnika és Informatika Tanszék Szoftver labor 3.
2012.
Use-case illetve aktor rajzolásához kattintsunk a megfelelő ikonra, majd pedig a rajzterületre. Ekkor megjelenik a megfelelő elem, és nevet adhatunk neki. Ezt a nevet bármikor megváltoztathatjuk, ha az elemen jobb gombbal kattintunk, majd a Rename ... Systemwide... menüpontot választjuk. Ha biztosak akarunk lenni benne, hogy ne legyen névütközés, célszerű inkább a Check Impact Of Systemwide Rename... menüpontot használni:
Itt a Check Impact gomb hatására az OpenAmeos ellenőrzi, hogy a névváltoztatás sikeres lesz-e, és amennyiben igen, akkor fel is ajánlja a névváltoztatás végrehajtását:
Ez egy jóval biztonságosabb módszer, mint az egyszerű átnevezés. Öröklés, include, extend és kommunikáció vonalak rajzolásához kattintsunk a megfelelő ikonra az eszköztáron, majd a rajzterületen kattintsunk a forrás elemen, végül pedig kattintsunk a célelemen. Ha készen vagyunk, akkor mentsük el a diagramot. Természetesen rajzolás közben is lehet menteni, sőt, ezt érdemes gyakran elvégezni.
16
BME Irányítástechnika és Informatika Tanszék Szoftver labor 3.
2012.
2.5.3 Osztálydiagram Hozzunk létre egy új osztálydiagramot! Ekkor a következő ablak fogad minket:
A baloldali ikonok működése hasonló a use-case diagraméhoz. Egy package-be azok a modellelemek tartoznak, amelyek a rajzon fizikailag a package keretén belül vannak. Lehetőség van package-ek egymásba ágyazására is. Mint már említésre került, az OpenAmeos nevük alapján azonosítja a modellelemeket, ezért figyeljünk arra, hogy például két különböző package-ben nem lehet ugyanolyan nevű osztály! Itt az osztálydiagramon nagyon fontos szerepet játszik az ablak alján található tulajdonságok (properties) ablak. Ha ezt véletlenül sikerül bezárni, akkor egy modellelemen történő duplakattintással mindig előhozhatjuk.
17
BME Irányítástechnika és Informatika Tanszék Szoftver labor 3.
2012.
Hozzunk létre egy osztályt, adjunk neki nevet, majd kattintsunk rá duplán, és vizsgáljuk meg a tulajdonságok ablak egyes füleit:
A Class fülön az osztályra általánosan jellemző tulajdonságokat adhatjuk meg. Például azt, hogy absztrakt legyen. Az egyes modellelemeknek adhatunk színt is, ezáltal könnyen áttekinthető diagramokat készíthetünk. Az Extensibility fülön rendelhetünk sztereotípiákat a modellelemekhez. Például egy osztály esetén a projekt létrehozásakor beimportált UMLStandard profilból hozzárendelhető az <> sztereotípia. Ehhez válasszuk ki a szereotípiát, majd kattintsunk a kis jobbra mutató nyílra (a HSZKban sajnos nem működik a profile import, így ott ez az opció sajnos nem elérhető, kivéve ha egyénileg elkészítjük a saját UML profile diagramot, lásd a 2.5.1. szakaszt):
Végül kattintsunk az Apply gombra az ablak alján, hogy érvényre jusson a változtatás. Ettől kezdve az osztály már interfészként fog viselkedni. Ha az UMLStandard profil nem látható ebben az ablakban, akkor ez azt jelenti, hogy elfelejtettük a projekt létrehozásakor beimportálni (vagy a HSZK-ban vagyunk, és ott ez az opció nem működik). Megoldásként menjünk vissza az OpenAmeos főablakára, és a bal felső listában a diagramok között a Profile-on jobb gombbal kattintva válasszuk az Import Profiles... menüpontot! A megjelenő ablakban jelöljük ki az UMLStandard profilt, és kattintsunk az OK gombra! Windows Vista és Windows 7 operációs rendszereken valamilyen okból kifolyólag jónéhányszor (akár 10-12-szer is) meg fog jelenni az UAC (User Account Control) ablak. Itt mindig engedélyezzük a műveletet!
18
BME Irányítástechnika és Informatika Tanszék Szoftver labor 3.
2012.
A Members fülön adhatunk attribútumokat és metódusokat az osztályhoz, például:
A Class Attr illetve Class Op jelentése az, hogy az adott attribútum illetve metódus statikus-e. Alapértelmezettként egyik sem statikus, de a legördülő menüvel ezen változtathatunk. Egy metódus argumentumait az UML szabványnak megfelelően kell megadni: az argumentumok vesszővel vannak elválasztva és minden argumentumnál előbb a név utána pedig kettősponttal a típus következik. Fontos még megvizsgálni az alsó sort ezen a fülön:
Itt a kis ikonok jelentése rendre: a táblázat mentése, új sor beszúrása az aktuális sor fölé, új sor beszúrása az aktuális sor alá, aktuális sor törlése, aktuális sor mozgatása felfelé, aktuális sor mozgatása lefelé. Ezek segítségével átrendezhetjük az attribútumok illetve a metódusok sorrendjét. Az ikonok utáni füleken egyéb programnyelv-specifikus beállításokat rendelhetünk az egyes attribútumokhoz és metódusokhoz. Mielőtt egy másik modellelemre váltunk, mindig célszerű az Apply gombbal véglegesíteni a tulajdonságok ablakban történt változásokat, és csak ezután áttérni a másik modellelemre, mivel így az OpenAmeos figyelmeztetni tud az esetleges hibás beállításokra. Asszociációk esetén az első fül így néz ki:
19
BME Irányítástechnika és Informatika Tanszék Szoftver labor 3.
2012.
Itt megadható, hogy az asszociáció melyik vége milyen szerepkörű, milyen multiplicitású, van-e qualifier, milyen típusú aggregáció van (nincs/aggregáció/kompozíció) és hogy navigálható-e az adott irányba. Lehetőség van a többi modellelemnél is arra, hogy duplakattintással megnyissuk rájuk ezt a tulajdonságok ablakot, de ezekre már ritkábban van szükség. 2.5.4 Szekvencia diagram Hozzunk létre egy szekvencia diagramot! Ekkor a következő ablak fogad majd minket:
A baloldali ikonok működése hasonló a use-case diagraméhoz. Sajnos ez a típusú diagram még nem teljesen UML 2 konform, például loop és alt lehetőségek nincsenek. Itt a szekvencia diagramon érdemes kihasználni azt, hogy az OpenAmeos különböző diagramokon át is tud kapcsolatot teremteni a modellelemek között. Vegyünk fel például egy Aktor elemet itt a szekvencia diagramon és hagyjuk üresen a nevét! Ezután kattintsunk jobbgombbal a megmaradt függőleges fekete csíkon és válasszuk a Choose Actor Symbol Name… menüpontot! Ekkor a megjelenő listából kiválaszthatjuk a use-case diagramokon már korábban megrajzolt aktorok közül azt, amelyiket itt a szekvencia diagramon ábrázolni szeretnénk.
20
BME Irányítástechnika és Informatika Tanszék Szoftver labor 3.
2012.
Ugyanígy eljátszhatjuk ezt egy objektummal is. Vegyünk fel egy aktív vagy passzív objektumot, és hagyjuk üresen a nevét! Ezután a szürke illetve fekete szaggatott csíkon jobb gombbal kattintva válasszuk a Choose ActiveObject Symbol Name… illetve Choose PassiveObject Symbol Name… menüpontot, és a listából kiválaszthatjuk az osztálydiagramon már megrajzolt osztályok közül azt, amelyiket az objektum típusának szánunk. Az objektumok között futó nyilakon duplán kattintva azok tulajdonságait lehet szerkeszteni.
2.6 Kódgenerálás Ha megrajzoltuk a kívánt diagramokat, az OpenAmeos segítségével lehetőség van automatikus kódgenerálásra. Az OpenAmeos generátora jóval többre képes, mint a többi kereskedelmi modellező eszköz generátora. Nemcsak egy egyszerű szkeletont állít elő az osztálydiagramok alapján, hanem kezeli például az alapértelmezett visszatérési értékeket, képes konstruktorokat örököltetni, klónozó függvényeket implementálni, sőt, akár egy állapotgép működését is képes programkódra leképezni. A kódgenerátorok egy speciális TDL nevű scriptnyelven íródtak, és teljes forrásuk megtalálható az OpenAmeos telepítési könyvtára alatt a templates\uml\tdl\Languages könyvtárban, így ezeket igény esetén bármikor tetszőlegesen bővíthetjük újabb konstrukciókkal. Ez a lehetőség azonban meghaladja e tárgy kereteit, így mi csak a generátorok futtatásával fogunk foglalkozni. Az OpenAmeos 10.2-es verziójával a következő kódgenerátorokat kapjuk meg:
Elsősorban a C, C#, C++ és Java generátorokat szoktuk használni, de ezeken kívül még más generátorok is elérhetők.
21
BME Irányítástechnika és Informatika Tanszék Szoftver labor 3.
2012.
Válasszuk ki a Java generátort! Ekkor a következő beállítások adhatók meg a generátorhoz:
A General Parameters alatt az Output to sor mondja meg, hogy a generált programkódok hova fognak kerülni. A Script Parameters a Java nyelvre vonatkozó speciális beállításokat tartalmazza. Ezek közül néhány fontosabb: •
•
•
• •
Visibility o DEF_CLASS_VISIB: az osztályok alapértelmezett láthatósága o DEF_ATTR_VISIB: a property-k (attribútumok) alapértelmezett láthatósága o DEF_OP_VISIB: a metódusok alapértelmezett láthatósága Associations o DEF_COLL_CLASS: sok multiplicitású asszociációvég esetén a kollekció osztálya o DEF_ROLE_VISIB: asszociációvég alapértelmezett láthatósága Constructors/Finalizer o CREATE_DEF_CTOR: legyen-e alapértelmezett konstruktor o CREATE_FULL_CTOR: legyen-e minden property-t inicializáló konstruktor o DEF_CTOR_VISIB: az automatikusan készülő konstruktorok láthatósága Operations o CREATE_DEF_RETURN: legyen-e alapértelmezett visszatérési érték a metódusokban Additional Constructs o ACCESSOR_METHODS: getter-setter metódusok generálása a property-khez o CREATE_STANDARD_OPS: toString(), equals() és clone() metódusok automatikus előállítása
22
BME Irányítástechnika és Informatika Tanszék Szoftver labor 3.
2012.
Ha a kívánt beállításokat megtettük, akkor a Java generátoron jobb egérgombbal kattintva válasszuk ki a Run Script… menüpontot! Ekkor az output könyvtárban előállnak a generált kódok. Az OpenAmeos lehetőséget biztosít arra, hogy ha a forráskódban módosításokat végzünk, akkor a változatások újrageneráláskor megmaradjanak. Ezt úgy éri el, hogy a generált kódban speciális kommenteket helyez el. Például egy metódus kódja így néz ki: public double foo(int a, string b) { double retVal = 0.0D; //#ACD# M(UDOP::UID_A3B383AC-98F0-4a70-A2A2-65E672D32137) ---- method body //user defined code to be added here ... //#end ACD# return retVal; }
A retVal változó az automatikus visszatérési értéket jelenti. Ennek meglétét az előző listában az Operations / CREATE_DEF_RETURN beállítással szabályozhatjuk. Alapértelmezettként be van kapcsolva, így a generált kód mindig azonnal hiba nélkül fordítható. A #ACD# és #end ACD# tartalmú sorokat nem szabad kitörölni. Az ezek közé írt bármilyen más programkód újrageneráláskor megmarad. Ami változtatás ezeken kívül történik, az viszont elvész. Ezt ki is próbálhatjuk. Változtassuk meg a forráskódod egy-két helyen, és nézzük meg mi történik egy esetleges újrageneráláskor! Ha esetleg újrageneráltuk a kódot, és egy változást rossz helyre írtunk, és az elveszett, akkor még egy lehetőségünk van a visszaállításra. Minden generáláskor minden fájlból keletkezik egy .bak kiterjesztésű változat is, ami az újragenerálás előtti változatot megőrzi, így egy lépésig visszamenőleg még van lehetőség a visszaállításra. Még egy módon veszhet el kód a generálás során. Ez pedig az az eset, amikor például egy metódust törlünk egy osztályból. Ekkor a metódus kódja nyilvánvalóan törlődni fog, azonban a generátor az újragenerált fájl végére kommentként beszúrja ezt a törölt kódot, így az is még egy lépésig visszamenőleg visszaállítható.
23