Analízis modell kidolgozása



Hasonló dokumentumok
Szkeleton tervezése. 100 Generalis faliora. Csapattagok: Konzulens: Szabó András március 21.

Szkeleton beadása. 100 Generalis faliora. Csapattagok: Konzulens: Szabó András március 29.

és az instanceof operátor

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Johanyák Zsolt Csaba: Ugráló gomb oktatási segédlet Copyright 2008 Johanyák Zsolt Csaba

OOP: Java 8.Gy: Abstract osztályok, interfészek

Osztályok. 4. gyakorlat

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Megoldás. Feladat 1. Statikus teszt Specifikáció felülvizsgálat

JAVA PROGRAMOZÁS 2.ELŐADÁS

Interfészek. PPT 2007/2008 tavasz.

C++ programozási nyelv

Ugráló gomb oktatási segédlet Ugráló gomb

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

Már megismert fogalmak áttekintése

A követelmények leírása

Dokumentáció. 1. Beadandó feladat

Programozási nyelvek Java

inels timer Működési elv:

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Eseménykezelés - Lottó játék

Analízis modell kidolgozása I.

JAVA PROGRAMOZÁS 3.ELŐADÁS

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Szoftvertechnolo gia gyakorlat

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Programozási nyelvek II. JAVA

Bánsághi Anna 2014 Bánsághi Anna 1 of 31

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Osztálytervezés és implementációs ajánlások

Java és web programozás

Space Invaders Dokumenta cio

Programozás I. 5. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

RESIDENT EVIL CODENAME: NIK

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

A Java nyelv. Dialógus ablakok. Elek Tibor

Verkehrsmeldungen am UML

Programozási Nyelvek: C++

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Programozási nyelvek Java

BME MOGI Gépészeti informatika 8.

2. Beadandó feladat dokumentáció

Szerepjáték rendszerterv

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

OOP és UML Áttekintés

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Szoftvertechnológia alapjai Java előadások

ZH mintapélda. Feladat. Felület

Smart Pointer koncepciója

Programozási nyelvek Java

Enterprise JavaBeans. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Az Enterprise JavaBeans

Se S r e ial a iza z t a ion o n (in n Ja J v a a v ) a Szerializáció

Osztálytervezés és implementációs ajánlások

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

Objektumorientált programozás C# nyelven

Webes alkalmazások fejlesztése 10. előadás. Webszolgáltatások tesztelése (ASP.NET Core) Cserép Máté

3. Osztályok II. Programozás II

Programozási nyelvek II.: JAVA

Enterprise JavaBeans 1.4 platform (EJB 2.0)

Alkalmazott Modul III 6. gyakorlat. Objektumorientált programozás: öröklődés és polimorfizmus

Programozási nyelvek Java

Programozás 2. gyakorlat

Java grafikai lehetőségek

Smalltalk 3. Osztályok létrehozása. Készítette: Szabó Éva

Előzmények

Java és web programozás

OEP Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1. Feladat. Elemzés 1

1. Öröklés Rétegelés Nyilvános öröklés - isa reláció Korlátozó öröklődés - has-a reláció

Levelezős Programozás beugró (Java) december 1.

Programozás II gyakorlat. 6. Polimorfizmus

OE.Prog2.Jatek.Jatekter névtéren belül készítsük el az alábbiakat: Új osztály: JatekElem. A JatekElem osztályt egészítsük ki az alábbiakkal:

I. Objektumorientált programozás

Programozási nyelvek Java

Bevezetés a Python programozási nyelvbe

Abstract osztályok és interface-ek. 7-dik gyakorlat

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

Pénzügyi algoritmusok

Bánsághi Anna 2014 Bánsághi Anna 1 of 33

Eseményvezérelt alkalmazások fejlesztése I 11. előadás. Szoftverek tesztelése

Java. Java Message Service. ANTAL Margit. JMS API technológia. ANTAL Margit. Sapientia - EMTE

Objektum orientált kiterjesztés A+ programozási nyelvhez

Java Server Pages - JSP. Web Technológiák. Java Server Pages - JSP. JSP lapok életciklusa

2. Beadandó feladat dokumentáció

Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

KINDERGARTEN. 46 InFoka. Dady Róbert. Csapattagok: Konzulens:

Generikus Típusok, Kollekciók

A szerzõrõl... xi Bevezetés... xiii

Java felhasználói felület

ELTE SAP Excellence Center Oktatóanyag 1

Bevezető. Servlet alapgondolatok

Programozás I ZH, Név:... A. csoport EHA: pont Gyakorlatvezető:...

C++ programozási nyelv

Tervminták a valósidejű gyakorlatban

Programozási nyelvek II.: JAVA

Gyakorlati vizsgatevékenység A

Szimulációs technikák

Programozás BMEKOKAA146. Dr. Bécsi Tamás 7. előadás

Java programozási nyelv 4. rész Osztályok II.

Átírás:

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.