Analízis modell kidolgozása 100 – Generalis faliora Konzulens:
Szabó András
Csapattagok: Kenéz Tamás Kiss Gergely Papp Gergely Rostás Gábor
TLSXNP KNJU43 L584UF N7WH3P
[email protected] [email protected] [email protected] [email protected]
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:
Generalis faliora
nincs 1..n nincs
-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 Hivatalos megbeszélésen való részvétel
2005.03.10. 18-19.
Papp
2005.03.10. 21-23.
Kiss, Papp
2005.03.14. 10-12.
Online konzultáció
Kiss, Papp,
Online konzultáció
Rostás
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
Generalis faliora
A felmerülő kérdések online megbeszélése, a dokumentum csiszolása, a hibák kijavítása
- 14 -
2005. március 16.