Analízis modell kidolgozása 100 Generalis faliora Konzulens: Szabó András Csapattagok: Kenéz Tamás TLSXNP arachnus@tvn.hu Kiss Gergely KNJU43 6er6e1y@gmail.com Papp Gergely L584UF pg554@hszk.bme.hu Rostás Gábor N7WH3P rg556@hszk.bme.hu 2005. március 16.
Objektum katalógus Container: Alaposztály: nincs Példányok: 0..n Komponensek: 0..n Package Változók: objectlist List tárolja a rajta lévő objektumokat Felelősségek: boolean hascollided(object:object) ellenőrzi, hogy ütköztek-e csomagok Ez az osztály a futószalagrendszer elemeinek őse. Production_Line: Alaposztály: Container Példányok: 0..n Komponensek: nincs Változók: Direction int a futószalag mozgásirányát tárolja length int a futószalag hosszát tárolja nextline Object tárolja, hogy a csomag a futószalag végéhez érve hova adódik át Felelősségek: void prodpackages(value:int) ez gondoskodik a csomagok előrelökéséről Egy tetszőleges futószalagot reprezentáló objektum. Switch: Alaposztály: Container Példányok: 0..n Komponensek: nincs Változók: nextlines Object[*] tárolja, hogy a váltó hova továbbíthatja a csomagokat actualdirection int a váltó által kiválasztott aktuális irány Generalis faliora - 2-2005. március 16.
Felelősségek: void toggle() az aktuális irányt változtatja void prodpackage() gondoskodik a csomagok előrelökéséről Egy tetszőleges váltót reprezentáló objektum. In_Truck: Alaposztály: nincs Példányok: 1 Komponensek: nincs Változók: nextline Object tárolja, hogy melyik futószalagra kerülnek a teherautóról a csomagok Packages List a teherautón lévő csomagokat tárolja Felelősségek: A csomagok elindítása (időzítés kérése a Timer-től) A bejövő teherautót reprezentáló objektum. Out_Truck: Alaposztály: nincs Példányok: 1..n Komponensek: nincs Változók: available boolean ha ez hamis, akkor a teherautó már nincs a pályán Felelősségek: Csomag fogadása esetén pontszám regisztrálása A kimenő teherautót reprezentáló objektum. Package: Alaposztály: Példányok: Komponensek: nincs 1..n nincs Generalis faliora - 3-2005. március 16.
Változók: color int tárolja a csomag színét perishable int ez jelzi a romlandóságát a csomagnak broken boolean ez a flag jelzi, hogy összetört-e a csomag fallen boolean ez jelzi, hogy a csomag leesett-e blown boolean jelzi, hogy felrobbant-e a csomag blowtime int tárolja, hogy mennyi idő alatt robban fel a csomag Felelősségek: void getcolor(color:int) lekéri a csomag színét void setcolor(color:int) beállítja a csomag színét Egy csomagot megvalósító objektum. Timer: Alaposztály: nincs Példányok: 1 Komponensek: nincs Változók: objectlist List tárolja az időzítésre beregisztrált objektumokat Felelősségek: void tick() az időzítő által mutatott időt növeli A modellben bekövetkező események időzítését biztosító objektum. Generalis faliora - 4-2005. március 16.
Osztályok leírása Container Azoknak az absztrakt alaposztálya ez, akik csomagot mozgatnak a modellben, azaz a futószalagé és a váltóé. Az ebben levő egyetlen adattag egy dinamikus objektumlista, amely az aktuális objektumon található csomagokat tárolja. A hascollided metódus alkalmas annak a megvizsgálására, hogy a paraméterként átadott csomag ütközik-e valamivel. Szoros összefüggésben lesz a csomagátadással csak a csomag átadásakor fog meghívódni. Ez a főosztály ismeri a TimerSet interface-t, továbbá implementálja a Timing interface-t, melyek arra szolgálnak, hogy időzítéseket lehessen beállítani az egyes objektumokra. Az időzítésről bővebben a Timer objektumnál. Implementálja továbbá a PackageListener inertfészt, amely a csomagok menedzselésére szolgál. Ezen az interfészen keresztül lehet csomagot hozzáadni és kivenni az egyes objektumokból. Production_line A Conatiner-ből származó, egy darab futószalagot reprezentáló objektum. Jellemzi az iránya (észak/dél/kelet/nyugat), a hossza és a rákövetkező objektum. (Itt és a továbbiakban is a rákövetkező objektum azt a futószalagot, váltót vagy kimenő teherautót jelenti, amelyiknek (a pálya elrendezése szerint) a csomagot továbbítania kell.) A prodpackages metódusa szolgál a modell előrehaladására: ez löködi a csomagokat a futószalagon. A rákövetkező objektumot pedig a setnextline metódussal lehet beállítani. Switch Ez is a Containerből származik, de ő egy váltót reprezentál. Adattagjai a rákövetkező objektumok tömbje (lehet tömböt használni, hiszen maximum három futószalag mehet ki a váltóból), és az éppen aktuális irány, amerre a váltó áll. Generalis faliora - 5-2005. március 16.
A toggle metódusával lehet a váltani ez mindig a következő érvényes helyzetbe állítja a váltót. A setnextlines metódussal pedig a rákövetkező futószalagok tömbjét lehet beállítani. In_Truck A beérkező teherautót reprezentáló osztály. Célszerűen egy példánya lesz a játék során. Jellemzik őt a platóján helyet foglaló csomagok (dinamikus tömbben, List-ben tárolva), valamint a rákövetkező objektum, ahová a csomagok leesnek róla. Out_Truck A kimenő teherautók osztálya. Jellemzi a színe és hogy elérhető-e. (A teherautók, ha megfelelő számú és színű csomagot kaptak, elhagyják a játékteret azaz az available flaget hamisra állítják.) Timer Óra objektum; az időzítésekért felel. (A modellben az órának semmi köze nincs a fizikai időhöz vö.: logikai óra). Ismeri a Timing interface-t és implementálja a TimerSet interface-t. Ha egy objektum időzítést kér az órától, akkor meghívja az órának a TimerSet interface-ben definiált addwatch metódusát, mellyel beregisztrálja magát (vagy egy másik objektumot) az óraobjektum listájába. Ha már többé nincs szükség az időzítésre (mert például a romlandó csomag egy kimenő teherautóra ért), akkor a removewatch metódussal lehet az időzítést törölni. Az óra tick metódusával lehet a modell előrehaladását elérni, ez eggyel csökkenti minden egyes benne tárolt objektum óráját. A gettimeleft metódus pedig visszaadja a paraméterül megadott objektum hátralévő idejét. Ha egy objektum időzítése lejár, akkor meghívja ennek az objektumnak a Timing interface-ben definiált timeoutaction metódusát, amely majd gondoskodik az ilyenkor szükséges tevékenységekről. Generalis faliora - 6-2005. március 16.
Az időzítéshez használt objektumreferenciákat egy listában tárolja; a lista minden eleme egy kételemű tömb (két Objektum-referenciával), az egyik elem tárolja a lejárati időt, a másik pedig a referenciát az objektumra. Package Egy csomagot reprezentáló objektum. Jellemzi a színe, valamint négy flag: perishable (romlandó-e), broken (ráestek-e), fallen (leesett-e), valamint blown (felrobbant-e). Az utóbbi hármat a futószalag tudja átállítani, és ha ezek akármelyike igaz lesz, akkor a csomag a következő frissítés alkalmával eltűnik a modellből. Ha a perishable flag igaz, akkor értelme van a blowtime adattagnak: ez tárolja romlandó csomag esetén a romlási időt. A getcolor metódussal lehet a csomag színét lekérdezni, a setcolor metódussal pedig beállítani azt. Generalis faliora - 7-2005. március 16.
Statikus struktúradiagram Generalis faliora - 8-2005. március 16.
Szekvencia-diagramok Az inicializálás szekvencia-diagramja Feladata: a modell alapállapotba hozása, előkészítése. Működés: A Model szülőobjektum létrehozza a Timer időzítő objektumot (mely szingleton objektum a rendszerben), a Timer feladata a modell elemeinek időzítése. A Model objektum létrehozza a modell elemeit, létrehozza a bejövő teherautót, a futószalagokat, a váltókat, és a kimenő teherautókat. A bejövő teherautót feltölti a pályában definiált színű és minőségű csomagokkal. Mindezek után összelinkeli a Generalis faliora - 9-2005. március 16.
pályának megfelelően a teherautókat, futószalagokat, váltókat azok setnextline és setnextlines metódusai segítségével. Végül bejegyzi a Timer-ben a pályaelemek első időzítéseit. Ezek után a Model-t tartalmazó fő osztály és majd a grafikus és vezérlő komponensek folytathatják működésüket, a játék modellje inicializálva van. A váltás szekvencia-diagramja Feladata: a váltó átállítása. Működése: a főosztályból a Model objektumba érkezik egy toggle() kérés, mely a megfelelő váltó wrapperéhez továbbítódik. A váltó wrappere meghívja a modellbeli váltó toggle() metódusát, mely hatására az átvált a következő futószalagra. A leesés, az összetörés és a csomagtovábbítás szekvenciadiagramja Generalis faliora - 10-2005. március 16.
Feladata: a csomag néhány eseményének összefoglalása (interface-eken keresztül). Működése: Csomagtovábbítás esetén a forrásobjektum a PackageListener interface-en keresztül adja át a csomagot a célobjektumnak. Ha a csomag leesik, akkor a célobjektum NULL, így a csomag egyszerűen eltűnik a modellből. Azt is itt tudjuk ellenőrizni, ha a csomagra ráesnek: mivel csomag csak egy helyen, a szalag elején érkezhet a futószalagra, így ezt elég ellenőrizni, ha új csomag érkezik egy futószalagra. A csapat megfontolt egy sokkal objektumorientáltabb megoldást ennél (a flageknél). Ennek a lényege az lett volna, hogy ahelyett, hogy flagekkel jelezzük, hogy egy csomag leesett-e, egy univerzális csomag-evő objektumot regisztráltunk volna a semmibe vezető futószalagok és váltók végéhez. Az lett volna ezzel a probléma (bár nagyon szép megoldás lenne), hogy összesen egy flaget spóroltunk volna meg (fallen), másrészt a feladat egyszerűségénél fogva ezt a megoldást feleslegesnek ítéltük. A csapat tagjai természetesen tisztában vannak azzal, hogy nagyobb rendszer esetén ez elkerülhetetlen fejlesztés lenne. Romlandó csomag első átadásának szekvencia-diagramja Feladata: Romlandó csomag esetén az időzítés beállítása. Működése: A bejövő teherautó, mielőtt még a szokásos módon továbbítaná a csomagot, a TimerSet interface-en keresztül beállít egy időzítést a csomagra. Generalis faliora - 11-2005. március 16.
Csomag felrobbanásának szekvencia-diagramja Feladata: a csomag felrobbantása. Működése: A fent részletezett módon a bejövő teherautó beállít egy időzítést a csomagra, majd a Timer ennek a bizonyos időzítésnek a lejártakor szól a csomagnak a Timing interface-en keresztül, hogy robbanjon fel (pontosabban meghívja annak a timeoutaction metódusát, aztán a csomag majd teszi a dolgát). Generalis faliora - 12-2005. március 16.
Állapotdiagramok Szerencsére egy állapotdiagramunk sincs. Generalis faliora - 13-2005. március 16.
Napló A napló tartalmazza, hogy az egyes csapattagok mit és mikor tevékenykedtek a projektért. 2005.03.07. 16-17. 2005.03.08. 16-17. Kenéz, Kiss, Papp, Rostás Kenéz, Kiss, Papp, Rostás Megbeszélés: Objektummodell tárgyalása A heti feladatok átbeszélése és kiosztása 2005.03.08. 20-21. Kiss Szekvencia-diagramok megrajzolása 2005.03.08. 21-23. Kenéz, Rostás Objektumkatalógus megírása 2005.03.10. 17-19. Kiss, Rostás 2005.03.10. 18-19. Papp Hivatalos megbeszélésen való részvétel 2005.03.10. 21-23. Kiss, Papp Online konzultáció 2005.03.14. 10-12. Kiss, Papp, Rostás Online konzultáció 2005.03.14. 16-18. Papp Az osztályleírások elkészítése 2005.03.15. 15-16. Papp A dokumentum formázása, napló megírása 2005.03.15. 18-19. Kiss A dokumentum átnézése 2005.03.15. 19-21. Kiss, Papp A felmerülő kérdések online megbeszélése, a dokumentum csiszolása, a hibák kijavítása Generalis faliora - 14-2005. március 16.