User Tools

Site Tools


nyariegyetem2016

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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]] 
-  * 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 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 ​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ő projektekamelyek ​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)! 
nyariegyetem2016.1467804900.txt.gz · Last modified: 2016/07/06 13:35 by deva