Szoftvertechnológia 6. előadás. Objektumorientált tervezés: állapotkezelés. Objektumorientált tervezés: állapotkezelés



Hasonló dokumentumok
Programozási technológia II 3. előadás. Objektumorientált tervezés Giachetta Roberto

Informatikai Kar. 3. fejezet. alapismeretek. Giachetta Roberto

Árverés kezelés ECP WEBSHOP BEÉPÜLŐ MODUL ÁRVERÉS KEZELŐ KIEGÉSZÍTÉS. v ECP WEBSHOP V1.8 WEBÁRUHÁZ MODULHOZ

Szoftvertechnológia 6. előadás. Objektumorientált tervezés: állapotkezelés. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

SAP JAM. Felhasználói segédlet

Models are not right or wrong; they are more or less useful.

Beállítások CLASSBOOK-óratervező. Első belépés

Kérjük, hogy mielőtt elkezdené használni a Csavarhat webáruházat, gondosan olvassa végig ezt a segédletet.

Programozás I gyakorlat

HENYIR felhasználói dokumentáció

Linux Mint 8 telepítése

Ablakok használata. 1. ábra Programablak

A beállítási segédprogram Használati útmutató

Számítógépes vírusok

Segítünk online ügyféllé válni Kisokos

Tartalomjegyzék - 2 -

Az első lépések. A Start menüből válasszuk ki a Minden program parancsot. A megjelenő listában kattintsunk rá az indítandó program nevére.

Felhasználói Kézikönyv Kisbanki NetBOSS - IVR

A WEBES FELÜLET HASZNÁLATA. Munkáltatói oldalról. Fejér Megyei Kormányhivatal Munkaügyi Központja Székesfehérvár 2011.

Útmutató az EPER-ben már regisztrált szervezetek elektori jelentkezéséhez

Szakképzés - Meghatalmazás használata

Neptun rendszer jelentkezési segéd

Elemi adatszerkezetek

ÁFA felhasználói dokumentum Lezárva:

Tanúsítvány és hozzá tartozó kulcsok feltöltése Oberthur kártyára és Oberthur SIM termékre

Vodafone ReadyPay. Használati útmutató

Többfelhasználós adatbázis környezetek, tranzakciók, internetes megoldások

A Felhasználónév és Jelszó mezőkbe írjuk be az adatainkat, majd kattintsunk a Bejelentkezés gombra, vagy üssük le az Enter billentyűt.

Szoftvertechnológia 3. előadás. Objektumorientált tervezés: alapismeretek. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

A TÁMOP KIEMELT PROJEKT KERETÉBEN KIALAKÍTOTT INFORMATIKAI RENDSZER

Belépési útmutató a MIAG weboldalra

E-számla igénylése három lépéssel!

Tartalom. 1. A dokumentum célja... 2

A táblázatkezelő felépítése

Pénzügyi program indításkor legfontosabb tennivalók

Vegyes tételek könyvelése felhasználói dokumentum Lezárva:

E-ADÓ RENSZER HASZNÁLATI ÚTMUTATÓ

Külső eszközök Felhasználói útmutató

Minta programterv a 1. házi feladathoz

3. HÉT: CRM RENDSZEREK A GYAKORLATBAN FUNKCIONALITÁSOK

isource Bevezető beszállítók részére March 3rd, 2016

Fordítóprogramok Készítette: Nagy Krisztián

Osztály szint tagok. Krizsán Zoltán 1 [2012. március 12.] Objektumorientált programozás C# alapokon tananyag

Conjoint-analízis példa (egyszerűsített)

Érettségi feladatok Algoritmusok egydimenziós tömbökkel (vektorokkal) 1/6. Alapműveletek

Felhasználói útmutató Dahua gyártmányú digitális képrögzítő eszközökhöz

HWDEV-02A GSM TERMOSZTÁT

V. Kétszemélyes játékok

Töltse ki értelemszerűen a vevő nevét, irányítószámát, település, utca házszám mezőket, valamint a partner adószáma mezőket.

Üresként jelölt CRF visszaállítása

My Hipernet Home üzembehelyezési útmutató

MIPIM 2011 SZOLGÁLTATÁSCSOMAGOK

CAD-CAM

2016. JANUÁR 1-TŐL ÉRVÉNYES MÓDOSÍTÁSOK A DR. NONA INTERNATIONAL TÁRSASÁG MARKETING TERVÉBEN

Hálózati beállítások gyorsútmutatója

Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek

Az aktiválódásoknak azonban itt még nincs vége, ugyanis az aktiválódások 30 évenként ismétlődnek!

2. Beadandó feladat dokumentáció

Vodafone GPRS Kapcsolat létrehozása Win2000 alatt a Connect Me használata nélkül

SJ5000+ MENÜBEÁLLÍTÁSOK. E l e c t r o p o i n t K f t., B u d a p e s t, M e g y e r i ú t F s z. 1. Oldal 1

Shared IMAP beállítása magyar nyelvű webmailes felületen

FTP-kapcsolat létrehozása FlashFXP alatt

Vasúti információs rendszerek gyakorlat

Erste MobilBank Felhasználói kézikönyv

Digitális technika (VIMIAA01) Laboratórium 1

BOLYAI MATEMATIKA CSAPATVERSENY FŐVÁROSI DÖNTŐ SZÓBELI (2005. NOVEMBER 26.) 5. osztály

AWP TELEPÍTÉSE- WINDOWS7 64 OPERÁCIÓS RENDSZEREN

SÜTIK TÖRLÉSE. Készült: Módosítva:

Programozás. A programkészítés lépései. Program = egy feladat megoldására szolgáló, a számítógép számára értelmezhető utasítássorozat.

Fábián Zoltán Hálózatok elmélet

Vállalkozásfinanszírozás

Vektoros elemzés végrehajtása QGIS GRASS moduljával 1.7 dr. Siki Zoltán

DPR Szakmai nap október 17. PTE Felnőttképzési és Emberi Erőforrás Fejlesztési Kar

TANMENET. Tantárgy: Informatika Osztály: 9B. Heti óraszám: 2

Fedél végeselemes analízis

Tantárgyi program. 9. A tantárgy hallgatásának előfeltétele, előképzettségi szint: 10. A tantárgy tartalma:

1. forduló. MEGOLDÁSOK Pontszerző Matematikaverseny 2015/2016-os tanév

elektronikus kitöltés és benyújtás

Időzített rendszerek és az UPPAAL

HÁLÓZATSEMLEGESSÉG - EGYSÉGES INTERNET SZOLGÁLTATÁS-LEÍRÓ TÁBLÁZAT

Tanulmányi keretrendszer az APPI-ban

Programozási technológia 2.

2011. március 9. Dr. Vincze Szilvia

Jelentés a kiértékelésről az előadóknak

N Y Í R E G Y H Á Z A M E G Y E I J O G Ú V Á R O S T e l e p ü l é s r e n d e z é s i e s z k ö z e i n e k m ó d o s í t á s a

A TŰZVÉDELMI TERVEZÉS FOLYAMATA. Dr. Takács Lajos Gábor okl. építészmérnök BME Építészmérnöki Kar Épületszerkezettani Tanszék

KOMPLEX TERVEZÉS TERVEZÉSI SZAKIRÁNY TARTÓSZERKEZETI FELADATRÉSZ 1. félév

Adatok ábrázolása, adattípusok. Összefoglalás

Bevezetés a Programozásba II 12. előadás. Adatszerkezetek alkalmazása (Standard Template Library)

MINTA. Fizetendô összeg: ,00 HUF. Telefonon: / ben: Interneten:

V. Játékok. Kétszemélyes, teljes információjú, véges és determinisztikus, zéró összegű, játékok. Állapottér-reprezentáció. Grundy mama játéka

OmniTouch 8400 Instant Communications Suite 4980 Softphone

Dr. Kulcsár Gyula. Virtuális vállalat félév. Projektütemezés. Virtuális vállalat félév 5. gyakorlat Dr.

FORTE MAP 5.0 Felhasználói tájékoztató

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

EPER E-KATA integráció

Szerelőműhely nyilvántartás Rendszerterv

Elektronikus öltözőszekrényzárak

ingyenes tanulmány GOOGLE INSIGHTS FOR SEARCH

ÚTMUTATÓ A KONTROLL ADATSZOLGÁLTATÁS ELKÉSZÍTÉSÉHEZ (2012-TŐL)

Átírás:

Eötvös Loránd Tudományegyetem Informatikai Kar Szoftvertechnológia 6. előadás Objektumorientált tervezés: állapotkezelés 2015 Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Objektumok állapota Az objektumok állapottal (state) rendelkeznek, ahol az állapot adatértékeinek összessége két objektum állapota ugyanaz, ha értékeik megegyeznek (ettől függetlenül az objektumok különbözőek) az állapot valamilyen esemény (műveletvégzés, kommunikáció) hatására változhat meg amennyiben egy objektum csak egy állapottal rendelkezik, akkor az objektum változtathatalan (immutable) Az objektumok életciklussal rendelkeznek, létrejönnek (a konstruktorral), működést hajtanak végre (további műveletekkel), majd megsemmisülnek (a destruktorral) ELTE IK, Szoftvertechnológia 6:2 Amennyiben egy objektumorientált szoftver működését szeretnénk megvizsgálni, fontos szerepet tölt be az objektumok lehetséges állapotainak modellezése mivel a lehetséges állapotok a viselkedési mintától függenek, ezért az osztályok alapján állapítjuk meg Az objektumok állapotait, és a köztük lévő állapotátmeneteket az állapotdiagram, vagy állapotautomata (state machine) segítségével tudjuk modellezni <értékek> <esemény> <értékek> Állapot (state): az objektum értékeinek (mezőinek) összessége, amely befolyásolja az objektum felhasználhatóságát, az objektummal végezhető tevékenységeket rendelkezik egy (egyedi) elnevezéssel megadhatjuk benne a konkrét értékeket, vagy használhatjuk csupán az elnevezést általában nem egy konkrét értékkombinációt, hanem értékkombinációt lehetséges halmazát ábrázolja, amelyekre egy adott feltétel, az állapotinvariáns fennáll az állapot addig marad fent, amíg az adatok értékei kielégítik az invariánst ELTE IK, Szoftvertechnológia 6:3 ELTE IK, Szoftvertechnológia 6:4 Esemény (event, trigger): az objektummal végzett tevékenység, kommunikáció (metódushívás, eseménykiváltás) lehet elnevezése, paraméterei, feltétele és hatása lehet reflexív, ebben az esetben nem okoz állapotváltást, és belső eseménynek nevezzük Pl. (egyetemi kurzus): üres feliratkozás leiratkozás feliratkozás szabad helyekkel rendelkezõ feliratkozás leiratkozás megtelt Feladat: Valósítsuk meg a verem (Stack) adatszerkezetet aritmetikai reprezentáció mellett. Lehessen elemet behelyezni (push), kivenni (pop), kitörölni a teljes vermet (clear), lekérdezni a tetőelemet (top), üres-e (isempty), illetve tele van-e a verem (isfull), valamint mi az aktuális mérete (size). a verem működését a tömbben lévő elemek száma befolyásolja ha nincs elem a tömbben, nem lehet kivenni, lekérdezni ha a tömbben lévő elemek száma eléri a maximumot, nem lehet behelyezni leiratkozás ELTE IK, Szoftvertechnológia 6:5 ELTE IK, Szoftvertechnológia 3:6 1

Statikus tervezés: Dinamikus tervezés (állapotok): T : class Stack - _values :T[] - _top :int - _size :int + Stack(int) + ~Stack() + isempty() :bool {query} + isfull() :bool {query} + push(t) :void + pop() :T + top() :T {query} + clear() :void + size() :int {query} «enumeration» Exceptions BAD_SIZE STACK_FULL STACK_EMPTY ELTE IK, Szoftvertechnológia 3:7 ELTE IK, Szoftvertechnológia 3:8 Feltételek és hatás Az esemény rendelkezhet: Feltételek és hatás Pl. (egyetemi hallgató): paraméterekkel, amelyek az eseményre vonatkoznak feltétellel (guard), amelynek a teljesülése szükséges az átmenet bekövetkeztével hatással (effect), amely egy, az állapotátmenet hatására végrehajtott tevékenység (akció) <esemény>(<paraméterek>) [<feltétel>] /<hatás> ELTE IK, Szoftvertechnológia 6:9 ELTE IK, Szoftvertechnológia 6:10 Kezdő és végállapot Az objektumok létrehozásukkor egy kezdeti állapotból (initial state) indulnak, majd életciklusuk végén egy végállapottal (final state) terminálnak Kezdő és végállapot Pl. (egyetemi hallgató): a kezdőállapotnak és végállapotnak általában nem adunk nevet kezdőállapotba és végállapotból nem vezet átmenet, a kezdőállapotból történő átmenetnek nincs feltétele, vagy hatása ELTE IK, Szoftvertechnológia 6:11 ELTE IK, Szoftvertechnológia 6:12 2

Feladat: Készítsünk egy programot, amelyben egyetemi oktatók, hallgatók és kurzusok adatait tudjuk tárolni. Statikus tervezés: a kurzus (Course) rendelkezik névvel, oktatóval, hallgatókkal, kreditszámmal és maximális létszámmal a hallgató felveheti a kurzust (register), amennyiben még van szabad hely, és még nem jelentkezett rá (ekkor a kurzus megjelenik a hallgatónál is), és lejelentkezhet róla (unregister), amennyiben jelentkezett már rá (ekkor a kurzust a hallgatótól is elvesszük) kezdetben a kurzus üres (nincs jelentkezett hallgató), és csak üres kurzus törölhető ELTE IK, Szoftvertechnológia 6:13 ELTE IK, Szoftvertechnológia 4:14 Dinamikus tervezés (kurzus állapotai): Az állapothoz általában a működésben egy időintervallum, az eseményhez egy időpont tartozik programfutás állapot esemény állapot Ugyanakkor egy adott tevékenység időben is elhúzódhat, így magát a tevékenységet is ábrázolhatjuk állapotként a tevékenység állapotba vezető, és onnan kivezető esemény sokszor csak a tevékenység kezdetét és végét jelenti, ezért nem kap külön elnevezést ELTE IK, Szoftvertechnológia 6:15 ELTE IK, Szoftvertechnológia 6:16 Pl. (sakkjátszma): Elágazások Az állapotváltások során könnyen előfordulhatnak elágazások, ciklusok, amelyeket modellezhetünk feltételhez kötött eseménnyel választással (choice), ahol csak a feltételeket adjuk meg Az elágazás végeztével újra egy pontban egyesül az állapot, amely ábrázolható csomóponttal (junction) [<feltétel>] <esemény> <esemény> [<feltétel>] <esemény> ELTE IK, Szoftvertechnológia 6:17 ELTE IK, Szoftvertechnológia 6:18 3

Általánosított állapotok Pl. (egyetemi hallgató vizsgaidőszaka): Állapotok leírása Az állapoton belül is megfogalmazhatjuk a tevékenységeket, ehhez három fázist vehetünk fel a belépési (entry) fázis tartalmazza az állapotba való belépéskor végrehajtandó tevékenység a végrehajtó (do) fázis az állapotban végrehajtandó tevékenység a kilépési (exit) fázis az állapotból kivezető tevékenység Pl. (egyetemi oktató): ELTE IK, Szoftvertechnológia 6:19 ELTE IK, Szoftvertechnológia 6:20 Általánosított állapotok Lehetőségünk az állapotok általánosítására (generalization), amely egy általános állapottal ábrázolunk több lehetséges állapotot, és a köztük lévő átmenetet Általánosított állapotok Pl. (egyetemi hallgató): <általánosított állapot> ekkor az általános állapot is egy állapotautomata lesz, amelynek tartalmát kifejthetjük (a későbbiekben) az általánosított állapot belépési pontja lesz az állapotautomata kezdőállapota, kilépési pontja pedig a végállapota ELTE IK, Szoftvertechnológia 6:21 ELTE IK, Szoftvertechnológia 6:22 : Készítsük el Marika néni kávézójának eladási nyilvántartását végigkövető programot. a kávézóban 3 féle étel (hamburger, ufó, palacsinta), illetve 3 féle ital (tea, narancslé, kóla) közül lehet választani az ételek ezen belül különfélék lehetnek, amelyre egyenként lehet árat szabni, és elnevezni, az italok árai rögzítettek rendeléseket kell kezelnünk, amelyben tetszőleges tétel szerepelhet, illetve a rendelés tartozhat egy törzsvásárlóhoz lehetőségünk van utólagosan lekérdezni a függőben lévő rendeléseket, valamint napi, havi és törzsvásárolói számra összesített nettó/bruttó fogyasztást Statikus tervezés: Order - _cardnumber :int - _items :List<Item*> - _number :int - _date :tm Menu + Order(int, int, tm) - _orders :List<Order*> -_orders + AddItem(Item*) :void * + GetNumber() :int {query} + Menu() + GetCardNumber() :int {query} + ~Menu() + Items() :List<Item*>& {query} + Run() :void + GetNetValue() :int {query} + LoadData() :void + GetTotalValue() :int {query} + SaveData() :void + GetDate() :tm {query} - WriteMainMenu() :void - AddOrder() :void - WritStatsMenu() :void - ShowStatsForMonth(int, int) :void {ValueType = Order*} -_orders - ShowStatsForCard(int) :void + ShowStatsForDay(int, int, int) :void + ShowOpenOrders() :void + CloseOrder(int) :void -_items Item * {ValueType = Item*} -_items ValueType : class List ELTE IK, Szoftvertechnológia 6:23 ELTE IK, Szoftvertechnológia 6:24 4

Dinamikus tervezés: Dinamikus tervezés (Menu állapotai): a rendelés elemei változtathatatlan objektumok a rendelésen végrehajtunk tevékenységeket, ugyanakkor állapotai lényegteleneket a program futása szempontjából a menü futtatása hajtja biztosítja a lényeges tevékenységeket a különböző menüpontok segítségével, itt megjelenhet a főmenü, egyes statisztikák, az új rendelés megadása, vagy a nyitott rendelések a program azonban csak akkor lesz használható, ha az adatbetöltést elvégezzük, és természetesen terminálás előtt mentenünk is kell ELTE IK, Szoftvertechnológia 6:25 ELTE IK, Szoftvertechnológia 6:26 Dinamikus tervezés (usable állapotai): 3. esettanulmány 3. esettanulmány: Készítsük el egy utazási ügynökség apartmanokkal foglalkozó rendszerét. az apartmanok épületekben találhatóak, amelyek városokban találhatóak az épületek különböző adatokkal (leírás, szolgáltatások, pontos hely, tengerpart távolság, ), valamint képekkel rendelkeznek a felhasználók egy webes felületen keresztül foglalhatnak apartmanokat (adataik, valamint a foglalás időpontja megadásával), amelyeket városok szerint böngészhetnek a munkatársak egy grafikus felületű alkalmazásban szerkeszthetik az apartmanok adatait, képeit ELTE IK, Szoftvertechnológia 6:27 ELTE IK, Szoftvertechnológia 6:28 3. esettanulmány Dinamikus tervezés (adminisztrátor): 3. esettanulmány Dinamikus tervezés (adminisztrátor állapotai): először be kell jelentkeznünk az alkalmazásba a helyez felhasználónév és jelszó megadásával egy dialógusablakban (többször is próbálkozhatunk) ehhez először meg kell nyitni az adatbázissal a kapcsolatot a főablakban először betöltődnek az adatok, majd lehetőségünk van az adatok megtekintésére, szerkesztésére, és mentésére, illetve bezáráskor is mentjük a módosításokat sikertelen mentés esetén hibajelzést kapunk amennyiben nem sikerül megnyitni a kapcsolatot, vagy bezárjuk valamelyik ablakot, a program kilép ELTE IK, Szoftvertechnológia 6:29 ELTE IK, Szoftvertechnológia 6:30 5

3. esettanulmány Dinamikus tervezés (főablak állapotai): Aggregált állapotok Egymástól független, párhuzamosan fennálló állapotokat is kezelhetünk a rendszerben, ekkor állapotok aggregációjáról (aggregation) beszélünk egy osztályt állapotait kettő, vagy több szempont szerint állapítjuk meg, és eszerint különböző állapotokat definiálunk egy rendszer állapotait modellezzük, amely a benne szereplő osztályok állapotainak összessége Ugyan maguk az állapotok egymástól függetlenül léteznek, mégis hatással lehetnek egymásra tevékenységek, feltételek segítségével, pl. ugyanazon tevékenység okozhat párhuzamos állapotváltásokat ELTE IK, Szoftvertechnológia 6:31 ELTE IK, Szoftvertechnológia 6:32 Aggregált állapotok Aggregált állapotok Pl. (előadás): [<részállapot>] <aggregált állapot> [<részállapot>] ELTE IK, Szoftvertechnológia 6:33 ELTE IK, Szoftvertechnológia 6:34 Aggregált állapotok Állapot aggregáció esetén az állapotnak párhuzamos részállapotai (concurrent substate) keletkeznek a részállapotok lehetnek állapotátmenetek, általánosított állapotok, rendelkezhetnek kezdeti és végállapottal amennyiben az aggregált állapot rendelkezik kezdeti, vagy végállapottal, akkor minden részállapotnak is rendelkeznie kell vele az aggregált állapot belépési és kilépési eseményét, paramétereit, feltételét és hatását minden részállapot örökli : Készítsünk egy Memory kártyajátékot, amelyben két játékos küzd egymás ellen. A játékmezőn kártyapárok találhatóak, és a játékosok feladata ezek megtalálása. a játékban választhatunk kártyacsomagot, a játékosok megadhatják neveiket, valamint a játék méretét (kártyák száma) a játékosok felváltva lépnek, minden lépésben felfordíthatnak két kártyát, amennyiben egyeznek, úgy felfordítva maradnak és a játékos ismét léphet, különben 1 másodperc múlva visszafordulnak a játékot az nyeri, aki több kártyapárt talált meg ELTE IK, Szoftvertechnológia 6:35 ELTE IK, Szoftvertechnológia 6:36 6

Statikus tervezés (modell): Statikus tervezés (nézet): ELTE IK, Szoftvertechnológia 6:37 ELTE IK, Szoftvertechnológia 6:38 Dinamikus tervezés: a főablakot létrehozzuk, majd megjelenítjük (show), bezárásához (closeevent) megerősítést kérünk a felhasználótól, amelyben lehetősége van azt megszakítani (ignore), vagy elfogadni (accept) a megjelenítés alatt egymástól függetlenül kezeljük a játék modelljét (GameManager), valamint megjelenítését (GameWidget) a megjelenítésben fontos különbség, hogy a felület aktív, vagy sem, mivel csak előbbi esetben lehet egérrel kattintani (mouseclick) Dinamikus tervezés: amennyiben új játékot kezdünk (newgame), a felület aktív lesz, játék végén (gameover) pedig inaktívvá válik a játék modellje kezdetben egy kártyát sem mutat, de új játék kezdésekor (newgame) az összes kártyát megmutatja, majd automatikusan elrejti őket (hidecards) kiválasztás (selectcard) hatására előbb egyet, majd kettőt megmutathat (cardchanged) amennyiben a két kártya egyezik, és minden kártyát felfedtünk, vége a játéknak (gameover) ELTE IK, Szoftvertechnológia 6:39 ELTE IK, Szoftvertechnológia 6:40 Dinamikus tervezés (alkalmazás állapotai): Dinamikus tervezés (GameManager állapotai): ELTE IK, Szoftvertechnológia 6:41 ELTE IK, Szoftvertechnológia 6:42 7

Dinamikus tervezés (GameWidget állapotai): Hisztorizációs állapotok Általánosított állapotok esetén előfordulhat, hogy a végrehajtás megszakad, és a végrehajtást a megszakítás pontjában szeretnénk végezni, ebben az esetben hisztorizációs állapotot (history state) használatunk Pl. (előadás): ELTE IK, Szoftvertechnológia 6:43 ELTE IK, Szoftvertechnológia 6:44 Terminálás Amennyiben az állapotátmenetet nem a végállapotban szeretnénk bejezni, lehetőségünk van terminálni (terminate) az állapotautomatát egy szabályos megszakítási pont, amely nem hagyja abnormális állapotban a programot (pl. kivétel kiváltás, párhuzamos futtatás megszakítása) Párhuzamos programok állapotai Amennyiben az alkalmazás párhuzamosan is tud tevékenységeket végezni, szétválaszthajuk (fork) a végrehajtást, majd később összefuttathatjuk a párhuzamos működést (join) Pl. (előadás): Pl. (előadás): ELTE IK, Szoftvertechnológia 6:45 ELTE IK, Szoftvertechnológia 6:46 8