This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
nyariegyetem2016 [2016/07/06 13:35] deva |
nyariegyetem2016 [2016/07/07 17:10] (current) deva |
||
---|---|---|---|
Line 23: | Line 23: | ||
=== Letöltések === | === Letöltések === | ||
- | * Az előadás diasora | + | * Az előadás [[http://txtuml.inf.elte.hu/nyariegyetem/txtuml.pdf|diasora]] |
- | * A feladatok megoldásához szükséges szoftverkörnyezet | + | * [[http://txtuml.inf.elte.hu/nyariegyetem/eclipse-nyariegyetem.zip|Eclipse 4.5.2 + txtUML 0.4.1 verzió]] |
- | * Mintamegoldások: | + | * [[http://txtuml.inf.elte.hu/nyariegyetem/projects.zip|Példák és feladatok]] |
- | * osztálymodellezés | + | * 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 //File// -> //Import...// -> //General// -> //Existing 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. |
- | * állapotmodellezés | + | * osztálymodellezés: [[http://txtuml.inf.elte.hu/nyariegyetem/megoldasok/university.zip|megoldás]] |
- | * végrehajtható modellezés | + | * állapotmodellezés: [[http://txtuml.inf.elte.hu/nyariegyetem/megoldasok/alarm.zip|megoldás]] |
- | * "életszerű" modellezési feladatok | + | * végrehajtható modellezés: [[http://txtuml.inf.elte.hu/nyariegyetem/megoldasok/alarm_main.zip|megoldás]] |
+ | * "életszerű" modellezési feladat: [[http://txtuml.inf.elte.hu/nyariegyetem/megoldasok/vendingmachine.zip|megoldás]] | ||
=== Feladatok === | === Feladatok === | ||
Line 35: | Line 36: | ||
== Előkészületek == | == Előkészületek == | ||
- | * Töltse le a szükséges szoftvert, csomagolja ki a zip fájlt! | + | * Töltse le a [[http://txtuml.inf.elte.hu/nyariegyetem/eclipse-nyariegyetem.zip|szükséges szoftvert]] és a [[http://txtuml.inf.elte.hu/nyariegyetem/projects.zip|feladatokat]], majd csomagolja ki a két zip fájlt (például az asztalra)! |
- | * Az ''eclipse-nyariiskola'' könyvtárban az ''eclipse'' futtatható állományt kell elindítani. | + | * 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: ekkor a (szintén zip fájlból kicsomagolt) ''workspace-nyariiskola'' könyvtárt kell megadni (az elérési útvonalával együtt). Használja a fájlválasztó dialógusablakot a könyvtár kiválasztásához. | + | * 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 ellenőrizze, hogy megtalálható-e a menüsorban a //txtUML// menü, és a bal oldalon elhelyezkedő //Project explorer// területen láthatóak-e a következő Eclipse projektek:\\ //eloadas//, //_1_osztalymodellezes//, //_2_allapotmodellezes//, //_4_modellezes// | + | * Az Eclipse elindulása után: //File// -> //Import...// -> //General// -> //Existing 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 //Project// -> //Clean// menüpont segítségével fordítsa újra őket! | ||
+ | * Ellenőrizze, hogy a //Project// -> //Build Automatically// opció be van-e kapcsolva! | ||
== Osztálymodellezés == | == Osztálymodellezés == | ||
Line 57: | Line 60: | ||
- 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! | - 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! | ||
- 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! | - 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! | ||
- | - Egy szignál, egy állapot és egy állapotátment 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! | + | - 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! |
- | - Ha a risztó //élesített// állapotban mozgást érzékel, //riasztás// állapotba kerül. | + | - Ha a riasztó //élesített// állapotban mozgást érzékel, //riasztás// állapotba kerül. |
- Vegyen fel egy szignált a riasztó kikapcsolásához is. Ennek legyen egy adattagja, ami a kikapcsoláskor megadott jelszót reprezentálja! | - Vegyen fel egy szignált a riasztó kikapcsolásához is. Ennek legyen egy adattagja, ami a kikapcsoláskor megadott jelszót reprezentálja! | ||
- 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.) | - 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.) | ||
Line 64: | Line 67: | ||
== Végrehajtható modellezés == | == Végrehajtható modellezés == | ||
- | == Életszerű modellezési feladatok == | + | |
+ | A következő feladatokat a ''_2_allapotmodellezes'' projekt (vagy a hozzá tartozó mintamegoldás) továbbfejlesztésével kell megoldani. | ||
+ | |||
+ | - Í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). | ||
+ | - A //Package Explorer//-ben kattintson jobb egérgombbal az ''alarm'' csomagra, és válassza a //New// -> //Class// 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! | ||
+ | - A létrehozott Java fájlba másolja be a következő importokat: <code> | ||
+ | import alarm.model.AlarmDevice; | ||
+ | import hu.elte.txtuml.api.model.Action; | ||
+ | import hu.elte.txtuml.api.model.ModelExecutor; | ||
+ | </code> | ||
+ | - A main metódusba másolja be a következő utasításokat: <code> | ||
+ | ModelExecutor.Settings.setExecutorLog(true); | ||
+ | AlarmDevice device = Action.create(AlarmDevice.class, "titok"); | ||
+ | Action.start(device); | ||
+ | ModelExecutor.shutdown(); | ||
+ | </code> | ||
+ | - Szükség esetén generálja le, és nyissa meg az //AlarmDevice// állapotgépét, hogy az látható legyen! | ||
+ | - Válassza a //Run// -> //Run 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! | ||
+ | - 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: | ||
+ | - Helyes jelszó küldése. | ||
+ | - Helytelen jelszó küldése. | ||
+ | - Mozgás hatására bekövetkező riasztás. | ||
+ | - 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). | ||
+ | - 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. | ||
+ | |||
+ | - A //Run// -> //Run 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. | ||
+ | - Az elvárt működés: | ||
+ | - A fenti sárga gombokkal pénzt lehet bedobni az automatába, az válaszként az eddig összesen bedobott összeget írja ki. | ||
+ | - Az italok nevére kattintva vásárlást lehet indítani. | ||
+ | - Ha nem elég a pénz, akkor ezt üzenet jelzi. | ||
+ | - Ha a kért ital kifogyott, ezt is üzenet jelzi. | ||
+ | - 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. | ||
+ | - Ha nincs bedobva pénz, akkor az italok nevére kattintva az üzenetben az adott ital ára jelenik meg. | ||
+ | - A return gomb segítségével a bedobott pénz visszakérhető vásárlás nélkül. | ||
+ | - 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. | ||
+ | - 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! | ||
+ | - Tervezze meg és implementálja az alkalmazás osztálymodelljét, generáljon osztálydiagramot! | ||
+ | - Készítse el az egyes osztály(ok) állapotmodelljét és generáljon állapotdiagramokat! | ||
+ | - 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. | ||
+ | - Egészítse ki a modellt utasításokkal (entry, exit, effect, műveletek)! |