User Tools

Site Tools


nyariegyetem2016

21. ELTE Kárpát-medencei Nyári Egyetem, Informatika szekció, txtUML tananyagok

2016. július 7.

A programsorozat weblapja itt elérhető.

Bevezető

Az UML modellezést hagyományosan szoftverrendszerek architektúrájának tervezésére szokták használni. Az UML eszköztára azonban ma már futtatható modellek létrehozását is lehetővé teszi, így nincs szükség a “tervezés” és a “kódolás” szétválasztására. Mivel a grafikus UML diagramok szerkesztése nehézkes, különösen a viselkedés részletes leírása esetén, ezért egy szöveges modellező nyelvet fogunk használni a feladatok megoldásához, a grafikus diagramokat pedig generálni fogjuk. Kipróbáljuk továbbá a modellek interaktív futtatását, és összekapcsolását Java-ban írt szoftverekkel.

Tervezett program, 2016. július 7.

  • 9:00-9:45 Bevezető, osztálymodellezés
  • 9:45-10:30 Osztálymodellezés a gyakorlatban
  • Szünet
  • 11:00-11:30 Állapotmodellezés
  • 11:30-12:15 Állapotmodellezés a gyakorlatban
  • Ebédszünet
  • 14:00-14:45 Végrehajtható modellezés
  • 14:45-15:30 Végrehajtható modellezés gyakorlat
  • Szünet
  • 16:00-17:15 Egy “életszerű” modellezési feladat

Letöltések

  • Az előadás diasora
  • Mintamegoldások: A nap folyamán folyamatosan tesszük elérhetővé az egyes gyakorlati feladatok mintamegoldásait. A letöltött mintamegoldásokat ki kell csomagolni, majd az Eclipse-ben a FileImport…GeneralExisting Projects into Workspace választás után a dialógusablakban a kicsomagolt könyvtárt kell megadni, és a Finish gombra kattintva a projekt megjelenik a munkaterületen.

Feladatok

Előkészületek
  • Töltse le a szükséges szoftvert és a feladatokat, majd csomagolja ki a két zip fájlt (például az asztalra)!
  • Az eclipse-nyariegyetem könyvtárban az eclipse futtatható állományt kell elindítani.
  • Az Eclipse rákérdez, hogy melyik workspace-t (munkaterületet) használja: az alapbeállítás megfelel, de másik (üres, erre a célra létrehozott) könyvtár is választható.
  • Az Eclipse elindulása után: FileImport…GeneralExisting Projects into Workspace. A dialógusablakban a második zip fájlból kicsomagolt projects könyvtárt kell megadni. A Finish gombra kattintva bekerülnek a munkaterületre a következő projektek, amelyek a bal oldalon elhelyezkedő Project explorer területen láthatóak:
    eloadas, _1_osztalymodellezes, _2_allapotmodellezes, _4_modellezes
  • Ha a projekteken hibát jelez az Eclipse, akkor a ProjectClean menüpont segítségével fordítsa újra őket!
  • Ellenőrizze, hogy a ProjectBuild Automatically opció be van-e kapcsolva!
Osztálymodellezés

A következő feladatokat az _1_osztalymodellezes projekt university.xtxtuml fájljában kell megoldani, a diagram definíció(ka)t pedig a UniversityDiagram.java fájlban kell elhelyezni.

  1. Készítsen egy egyetem (University) osztályt, amelynek adattagjai a neve és az alapítás éve, és rendelkezik egy művelettel a név megváltoztatásához! (A művelet törzse üresen hagyható.)
  2. Egészítse ki a diagramleírást az elkészült osztállyal, és generálja le az osztálydiagramot! Érdemes a dialógusablakban az állapotgépek generálására vonatkozó opciót kikapcsolni, hogy ne keletkezzenek felesleges, üres állapotdiagramok.
  3. Az egyetemnek vannak karjai (Faculty), azokon belül pedig tanszékei (Department). Ezek mindegyikének van neve. Modellezze ezt két új osztály és két kompozíció segítségével! Egészítse ki a diagramleírást és generálja újra az osztálydiagramot!
  4. Vegyen fel egy új osztályt személyek (Person) modellezéséhez. Minden személynek van neve és telefonszáma.
  5. Általánosítás segítségével modellezze, hogy a személyek lehetnek hallgatók vagy munkatársak, a munkatársak pedig oktatók vagy ügyintézők. A hallgatókról nyilvántartjuk a kreditjeik számát, a munkatársakról a fizetésüket, az oktatókról pedig, hogy rendelkeznek-e PhD fokozattal.
  6. Asszociációk segítségével modellezze a következőket: Minden hallgató az egyetem valamelyik karán tanul. Minden munkatárs valamelyik tanszék dolgozója. Minden tanszékeknek van egy vezetője, aki tanár. Senki sem vezethet egyszerre több tanszéket. Egészítse ki a diagramleírást és generálja újra az osztálydiagramot!
Állapotmodellezés

A következő feladatokat a _2_allapotmodellezes projekt AlarmDevice.xtxtuml fájljában kell megoldani.

  1. Az AlarmDevice osztály egy riasztóberendezést reprezentál, ami kezdetben kikapcsolt állapotban van. Vegyen fel egy kezdőállapotot és egy kezdő állapotátmenetet a kikapcsolt állapothoz!
  2. Generálja le az AlarmDeviceDiagram leírás segítségével az osztálydiagramot és a hozzá tartozó állapotdiagramot! Az állapotdiagram generálására vonatkozó opciót be kell kapcsolni a dialógusablakban!
  3. Egy szignál, egy állapot és egy állapotátmenet hozzáadásával modellezze a következőket: Ha a riasztót bekapcsoljuk, akkor élesített állapotba kerül. Generálja újra a diagramot!
  4. Ha a riasztó élesített állapotban mozgást érzékel, riasztás állapotba kerül.
  5. Vegyen fel egy szignált a riasztó kikapcsolásához is. Ennek legyen egy adattagja, ami a kikapcsoláskor megadott jelszót reprezentálja!
  6. Egy elágazás-állapot segítségével modellezze a következőt: Ha a riasztó élesítve van, és a kikapcsoláskor helyes jelszót adunk meg, akkor a riasztó kikapcsol. Helytelen jelszó esetén riaszt. Generálja újra diagramot! (Az átmenetek őrfeltételei nem fognak látszani a generált diagramon, ez a generálás hiányossága.)
  7. Egyetlen új állapotátmenet segítségével modellezze a következőt: Riasztás állapotból helyes jelszó megadásával kikapcsolható a riasztó, helytelen jelszó esetén továbbra is riaszt. Generálja újra a diagramot!
Végrehajtható modellezés

A következő feladatokat a _2_allapotmodellezes projekt (vagy a hozzá tartozó mintamegoldás) továbbfejlesztésével kell megoldani.

  1. Írjon konstruktort az AlarmDevice osztályhoz, amely paraméterként megkapja a riasztó jelszavát. A konstruktor olyan művelet, amelynek neve azonos az osztály nevével és nincs visszatérési típusa (még void sem).
  2. A Package Explorer-ben kattintson jobb egérgombbal az alarm csomagra, és válassza a NewClass menüpontot! A dialógusablakban töltse ki az új Java osztály nevét (pl. Test) és kapcsolja be a main metódus generálására vonatkozó opciót! A Finish gomb segítségével hozza létre a Java osztályt!
  3. A létrehozott Java fájlba másolja be a következő importokat:
    import alarm.model.AlarmDevice;
    import hu.elte.txtuml.api.model.Action;
    import hu.elte.txtuml.api.model.ModelExecutor;
  4. A main metódusba másolja be a következő utasításokat:
    ModelExecutor.Settings.setExecutorLog(true);
    AlarmDevice device = Action.create(AlarmDevice.class, "titok");
    Action.start(device);
    ModelExecutor.shutdown();
  5. Szükség esetén generálja le, és nyissa meg az AlarmDevice állapotgépét, hogy az látható legyen!
  6. Válassza a RunRun configurations menüpontot! A dialógusablak bal oldalán lévő listában válassza a txtUML Application-t, majd a lista fölött kattintson a New launch configuration ikonra (fehér lap plusz jellel)! A Project és a Main class mezőkben az aktuális projektnek és a main függvényt tartalmazó Java osztálynak kell lennie. Kattintson a Run gombra! Ha minden helyesen van beállítva, akkor az állapotdiagramon animációval mutatja, ahogyan a kezdő állapotátmenet végrehajtásra kerül. Figyelje meg az alul látható Console-ban megjelenő üzeneteket!
  7. A main metódusban az Action.start hívás után küldjön szignálokat a device-nak az Action.send metódus segítségével! Futtassa újra a korábban beállított indítókonfigurációt és ellenőrizze, az állapotgép viselkedését az animáció alapján! Kísérletezzen a következő esetekkel:
    1. Helyes jelszó küldése.
    2. Helytelen jelszó küldése.
    3. Mozgás hatására bekövetkező riasztás.
    4. Olyan szignál küldése, amire az adott állapotban nem reagál az állapotgép (pl. két élesítés egymás után).
  8. Egészítse ki a modellt egy Timeout szignállal, és módosítsa a riasztó viselkedését úgy, hogy mozgás érzéselése esetén várakozó állapotba kerüljön. Ha a várakozó állapotban helyes jelszó érkezik, akkor a riasztó kikapcsol, hibás jelszó vagy Timeout hatására viszont riaszt. Ellenőrizze a megoldás helyességét a main függvény módosításával a diagram animáció követésével!
Egy komplex modellezési feladat

Ezeket a feladatokat a _4_modellezes projektben kell megoldani.

  1. A RunRun configurations… menü segítségével hozzon létre egy új Java Application típusú futtatási konfigurációt, ahol a Project: _4_modellezes, a Main class: tester.Tester. A konfiguráció futtatása grafikusan megjelenít egy italautomatát, de a gombok nem működnek rajta. A feladat az, hogy a VendingMachine.xtxtuml fájlban létre kell hozni az automata működését leíró modellt, a Glue.java fájlban pedig össze kell kötni azt a grafikus felhasználói felülettel.
  2. Az elvárt működés:
    1. A fenti sárga gombokkal pénzt lehet bedobni az automatába, az válaszként az eddig összesen bedobott összeget írja ki.
    2. Az italok nevére kattintva vásárlást lehet indítani.
      1. Ha nem elég a pénz, akkor ezt üzenet jelzi.
      2. Ha a kért ital kifogyott, ezt is üzenet jelzi.
      3. Egyébként az üzenet tájékoztat a vásárlás sikerességéről, és a visszaadott pénz mennyiségéről.
    3. Ha nincs bedobva pénz, akkor az italok nevére kattintva az üzenetben az adott ital ára jelenik meg.
    4. A return gomb segítségével a bedobott pénz visszakérhető vásárlás nélkül.
    5. A fenti fehér mezőbe egy számot írva és valamelyik ital nevére kattintva a “karbantartó” az adott italból a megadott darabszámot teszi be az automatába, így növeli a készletet.
  3. Vizsgálja meg a Glue.java fájlt, derítse fel, hogy milyen szignálok fognak jönni a grafikus felület irányából a modellbe, és tervezze meg, hogy a grafikus felületen megjelenítendő üzenetet lekérdező metódus hogyan fogja az üzenetet lekérni a modellből!
  4. Tervezze meg és implementálja az alkalmazás osztálymodelljét, generáljon osztálydiagramot!
  5. Készítse el az egyes osztály(ok) állapotmodelljét és generáljon állapotdiagramokat!
  6. A Glue.java fájlban a jelölt helyeken hozzon létre objektumokat a modell osztályaiból és kapcsolja őket össze szükség szerint! A fájl egyes függvényeiből küldjön szignálokat az objektumoknak.
  7. Egészítse ki a modellt utasításokkal (entry, exit, effect, műveletek)!
nyariegyetem2016.txt · Last modified: 2016/07/07 17:10 by deva