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

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

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

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

Eseményvezérelt alkalmazások fejlesztése I 7. előadás. Összetett grafikus felületű alkalmazások. Giachetta Roberto

Összetett alkalmazások

Eseményvezérelt alkalmazások fejlesztése I 6. előadás. Összetett alkalmazások megvalósítása. Giachetta Roberto

ELTE, Informatikai Kar december 12.

Programozási technológia 2.

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

3. Beadandó feladat dokumentáció

2. Beadandó feladat dokumentáció

2. Beadandó feladat dokumentáció

Szoftvertechnológia 8. előadás. Szoftverrendszerek tervezése. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

Informatikai Kar. 4. fejezet. Giachetta Roberto

Szoftvertechnológia 8. előadás. Szoftverrendszerek tervezése Giachetta Roberto

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

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

Programozási technológia II 2. előadás. Specifikáció és követelménymenedzsment

Szoftvertechnológia 4. előadás. Objektumorientált tervezés: általánosítás. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

Szoftvertechnológia 2. előadás. Every big computing disaster has come from taking too many ideas and putting them in one place.

Szoftvertechnológia 2. előadás. Specifikáció és követelménymenedzsment. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

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

Dr. Mileff Péter

Bevezetés a Programozásba II 8. előadás. Polimorfizmus Giachetta Roberto

Kölcsönhatás diagramok

Alkalmazott modul: Programozás 10. előadás. Objektumorientált programozás: tervezés és megvalósítás

Programozási technológia 2.

Szekvencia diagram. Szekvencia diagram Dr. Mileff Péter

Bevezetés a Programozásba II 5. előadás. Objektumorientált programozás és tervezés

Rendszer szekvencia diagram

Eseményvezérelt alkalmazások fejlesztése II 5. előadás. Windows Forms alkalmazások párhuzamosítása. Giachetta Roberto

Általános szoftver architektúrák

Dinamikus modell: állapotdiagram, szekvencia diagram

Modellalkotás UML-ben

3. Beadandó feladat dokumentáció

Alkalmazott modul: Programozás 11. előadás. Objektumorientált programozás: öröklődés

Eseményvezérelt alkalmazások fejlesztése I 8. előadás. Általános szoftver architektúrák. Giachetta Roberto

Eseményvezérelt alkalmazások fejlesztése I 5. előadás. Grafikus felületű alkalmazások architektúrája

Eseményvezérelt alkalmazások fejlesztése I 12. előadás. Összetett szoftver architektúrák. Giachetta Roberto

Elemi alkalmazások fejlesztése III.

UML (Unified Modelling Language)

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.

Szoftvertechnológia 1. előadás. A szoftverfejlesztési folyamat. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

3. Osztályok II. Programozás II

Programozás II. ATM példa Dr. Iványi Péter

Eseményvezérelt alkalmazások fejlesztése I 3. előadás. Dinamikus felületű alkalmazások. Giachetta Roberto

2. Beadandó feladat dokumentáció

3. Beadandó feladat dokumentáció

Thermo1 Graph. Felhasználói segédlet

GráfRajz fejlesztői dokumentáció

Szálkezelés. Melyik az a hívás, amelynek megtörténtekor már biztosak lehetünk a deadlock kialakulásában?

In short, software is eating the world.

Modell megvalósítása. Gregorics Tibor: Eseményvezérelt alkalmazások fejlesztése I.

Egyetemi könyvtári nyilvántartó rendszer

Eseményvezérelt alkalmazások fejlesztése II 5. előadás. Windows Forms alkalmazások párhuzamosítása. Cserép Máté

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

OOP. Alapelvek Elek Tibor

1. Beadandó feladat dokumentáció

Alkalmazások fejlesztése III. Qt 4 /C++ alapú MDI alkalmazás: Számlakészítő program 3/3

Programozási nyelvek Java

1. beadandó feladat: egyszerű grafikus felületű alkalmazás. Közös követelmények:

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

VISUAL UML A RENDSZERTERVEZÉS OKTATÁSÁBAN

Integrált keretrendszer

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

Magasabb szintű formalizmus: Állapottérképek (statecharts) dr. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

Programozási technológia

2) Tervezzen Stibitz kód szerint működő, aszinkron decimális előre számlálót! A megvalósításához

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET)

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

Webes alkalmazások fejlesztése 1. előadás. Webes alkalmazások és biztonságuk

Az SQL*Plus használata

Név: Neptun kód: Pontszám:

Eseményvezérelt alkalmazások fejlesztése I 5. előadás. Grafikus felületű alkalmazások architektúrája. Grafikus felületű alkalmazások architektúrája

A dokumentáció felépítése

Overview. Service. Application Activity Activity 2 Activity 3. Fragment. Fragment. Fragment. Frag ment. Fragment. Broadcast Receiver

Adattípusok, vezérlési szerkezetek. Informatika Szabó Adrienn szeptember 14.

Alkalmazott modul: Programozás. Programozási tételek, rendezések. Programozási tételek Algoritmusok és programozási tételek

Előzmények

Programozás I. Gyakorlás egydimenziós tömbökkel Többdimenziós tömbök Gyakorló feladatok V 1.0 ÓE-NIK-AII,

Tanrend jelentő képző szervek részére

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

DKÜ ZRT. A Portál rendszer felületének általános bemutatása. Felhasználói útmutató. Támogatott böngészők. Felületek felépítése. Információs kártyák

LabVIEW példák és bemutatók KÉSZÍTETTE: DR. FÜVESI VIKTOR

Objektumorientált paradigma és programfejlesztés Bevezető

Dokumentáció. 1. Beadandó feladat

A C# programozási nyelv alapjai

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

01. gyakorlat - Projektalapítás

Webes alkalmazások fejlesztése 12. fejezet. Szolgáltatás alapú kommunikáció (WCF) Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

Szoftvertechnológia 8. gyakorlat. Tervezés. Tervezés A szoftver életciklus

C# Szálkezelés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Szálkezelés / 21

// keressük meg a legnagyobb faktoriális értéket, ami kisebb, // mint százmillió

Objektumelvű programozás

Broadcast Service Widget

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET) Cserép Máté.

A könyv tartalomjegyzéke

Vizuális és eseményvezérelt programozás , II. félév BMF NIK

Átírás:

Eötvös Loránd Tudományegyetem Informatikai Kar Szoftvertechnológia 7. előadás Objektumorientált tervezés: végrehajtás Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto

The good thing about bubbles and arrows, as opposed to programs, is that they never crash. (Bertrand Meyer)

Végrehajtás modellezése Az objektumorientált programokat egymással kapcsolatban álló objektumok alkotják a lehetséges kommunikációs pontokat az osztálydiagramban feltérképeztük azonban a végrehajtás sorrendjére, időbeli lefolyására az osztálydiagram nem ad támpontot az állapotdiagram csak egy osztály szemszögéből jellemzi a működést, és elsősorban nem a végrehajtást modellezi A program működése során történő, objektumok és osztályok közötti interakciós folyamatokat kommunikációs, szekvencia, illetve tevékenység diagrammal modellezhetjük ELTE IK, Szoftvertechnológia 7:3

Kommunikációs diagram Az UML kommunikáció diagram (communications diagram) célja az objektumok közötti kommunikáció sorrendjének megállapítása ábrázolja az objektumokat és a köztük lévő kommunikációt, üzenetátadást (metódushívás, eseménykiváltás) az objektumok mellett szerepeltetheti a rendszer aktorait is, amelyek kezdeményezhetik az üzenetátadást az üzenetekhez rendel irányt és sorrendiséget 1: <üzenet> 2: <üzenet> <objektum> <objektum> <aktor> ELTE IK, Szoftvertechnológia 7:4

Kommunikációs diagram A kommunikációban ábrázolhatjuk a csoportokat, amelyek az egy híváslánchoz tartozó üzenetek (<csoport>.<sorszám> formátumban) az elágazásokat (<sorszám><ág> formátumban) a feltételeket ([<feltétel>] formátumban) 1: <üzenet> <objektum> 1.1b: [<feltétel>]:<üzenet> <objektum> <aktor> 1.1a: [<feltétel>]:<üzenet> 1.3: <üzenet> <objektum> <objektum> ELTE IK, Szoftvertechnológia 7:5

Kommunikációs diagram A kommunikációt az objektumok szemszögéből ábrázoljuk általában nem a teljes rendszer kommunikációját, csak egy leszűkített részét ábrázoljuk, amelyben egy megadott forgatókönyvet követünk pl. egy adott használati eset (funkció) teljesítésének megvalósítását adott feltételek mellett nem tartalmaz feltételt, ciklust, és nem látható az objektumok élettartama segíthet az objektumok viselkedési mintájának meghatározásában (ugyanakkor a pontos ábrázoláshoz szükséges a statikus szerkezet) ELTE IK, Szoftvertechnológia 7:6

Kommunikációs diagram Pl. (prezentáció): 1.1: teljes képernyőre vált 1: indít 2: léptet prezentáció szerkesztő oktató 1.2: léptet 2.1: [van még dia]:léptet prezentáció 1.3: megjelenít 2.2: megjelenít 1. dia 2. dia ELTE IK, Szoftvertechnológia 7:7

Kommunikációs diagram Feladat: Készítsünk egy programot, amelyben egyetemi oktatók, hallgatók és kurzusok adatait tudjuk tárolni. 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 a newcourse művelettel, a hallgató lejelentkezhet a kurzusról (unregister), amennyiben jelentkezett már rá (ekkor a kurzust a hallgatótól is elvesszük a removecourse művelettel ELTE IK, Szoftvertechnológia 7:8

Kommunikációs diagram Szerkezeti tervezés: UniversityCitizen UniversityStudent -_students * Course UniversityTeacher -_teacher - _coursename :string - _teacher :UniversityTeacher - _credits :int - _maxcount :int - _students :vector<universitystudent> -_courses * + Course(string, UniversityTeacher, int, int) + register(universitystudent) :bool + unregister(universitystudent) :void + name() :string {query} + teacher() :UniversityTeacher* {query} + credits() :int {query} + maxcount() :int {query} + currentcount() :int {query} ELTE IK, Szoftvertechnológia 4:9

Kommunikációs diagram Dinamikus tervezés (kommunikáció): 1: register(u: UniversityStudent) :bool 2: unregister(u: UniversityStudent) softwaretechnology :Course admin 1.1: [_students.size() < _maxcount]:newcourse(course) 2.1: [_students.contains(u)]:removecourse(course) :UniversityStudent ELTE IK, Szoftvertechnológia 7:10

Szekvencia diagram Az UML szekvencia diagram (sequence diagram) célja az objektumok közötti interakció időrendi ábrázolása tartalmazza a kommunikációs diagram elemeit, ugyanakkor nem sorrendiséget ad a kommunikációra, hanem időbeli lefolyást ábrázol <objektum> <objektum> <aktor> <üzenet> <üzenet> ELTE IK, Szoftvertechnológia 7:11

Szekvencia diagram A szekvenciában az objektumok (és az aktorok) életvonallal (lifeline) rendelkeznek, amely meghatározza létezésük időtartamát lehetnek aktívak, ekkor képesek kommunikáció kezdeményére A szekvenciában az üzeneteknek különböző típusait tudjuk ábrázolni szinkron üzenet: feldolgozását (végrehajtása) a hívó megvárja, addig nem végez további műveleteket aszinkron üzenet: feldolgozását a hívó nem várja meg, hanem tovább tevékenykedik visszatérési üzenet: egy korábbi üzenet feldolgozásának eredménye ELTE IK, Szoftvertechnológia 7:12

Szekvencia diagram <objektum> <okjektum> <aktor> <szinkron üzenet> <aszinkron üzenet>() <visszatérés> <reflexív üzenet> ELTE IK, Szoftvertechnológia 7:13

Szekvencia diagram Pl. (prezentáció): oktató prezentáció szerkesztő prezentáció 1. dia 2. dia indít teljes képernyőre vált indít megjelenít léptet [van még dia]:léptet megjelenít ELTE IK, Szoftvertechnológia 7:14

Objektumok élettartama A szekvencia során üzenet segítségével létrehozhatunk új objektumokat (a konstruktorral), ekkor elindul az életvonaluk megsemmisíthetünk objektumokat (a destruktorral), ekkor vége az életvonaluknak <objektum> <létrehozás> <új objektum> kommunikálhatunk az objektumokkal a két üzenet között <üzenet> <megsemmisítés> ELTE IK, Szoftvertechnológia 7:15

Összetett végrehajtás ábrázolása A szekvencia során ábrázolhatunk feltételes szakaszt (opt), amely csak a feltétel teljesülésekor hajtódik végre elágazást (alt), ahol a feltétel függvényében különböző ágakat hajthatunk végre ciklust (loop), ahol a tevékenységet a feltétel függvényében többször is végrehajtjuk párhuzamos szakaszt (par), ahol egyszerre párhuzamosan végezzük a tevékenységeket kritikus szakaszt (critical), amely nem végezhető párhuzamosan ELTE IK, Szoftvertechnológia 7:16

Összetett végrehajtás ábrázolása <objektum> <objektum> <üzenet> opt [<feltétel>] <feltételes üzenet> loop [<feltétel>] <ciklikus üzenet> <üzenet> ELTE IK, Szoftvertechnológia 7:17

Összetett végrehajtás ábrázolása Pl. (prezentáció szerkesztés): oktató új prezentáció prezentáció szerkesztő létrehoz prezentáció loop [nincs elég dia] új dia létrehoz dia hozzáad hozzáad dia sorszáma diát szerkeszt() módosít bezár opt [mentés] ment ment ELTE IK, Szoftvertechnológia 7:18

Esettanulmányok Tic-Tac-Toe játék Feladat: Készítsünk egy Tic-Tac-Toe programot, amelyben két játékos küzdhet egymás ellen. a programban jelenjen meg egy játéktábla, amelyen végig követjük a játék állását (a két játékost az X és 0 jelekkel ábrázoljuk) legyen lehetőség a játékosok neveinek megadására, új játék indítására, valamint játékban történő lépésre (felváltva) a program kövesse végig, melyik játékos hány kört nyert program automatikusan jelezzen, ha vége egy játéknak, és jelenítse meg a játékosok pontszámait ELTE IK, Szoftvertechnológia 7:19

Esettanulmányok Tic-Tac-Toe játék Szerkezeti tervezés: TicTacToeGame TicTacToeConsole - _game :TicTacToeGame + run() :void + exit() :void - getposition() :int - readplayernames() :void - readstep() :void - showgamestate() :void - _currentplayer :int - _gametable :int[,] - _playernames :string[] - _playerscore :int[] - _stepnumber :int + newgame() :void + stepgame(int, int) :void + setplayers(string, string) :void + getfield(int, int) :int {query} + getscore(int) :int + getwinner() :string {query} + isgameover() :bool {query} ELTE IK, Szoftvertechnológia 7:20

Esettanulmányok Tic-Tac-Toe játék Dinamikus tervezés (kommunikáció): A játék általános szekvenciája: a játékot futtatjuk (run) a játékosok megadják neveiket (readplayernames, setplayers) elindul a játék (newgame) a játékosok felváltva lépnek (readstep, stepgame) minden lépés közben megjelenítjük az állást (showgamestate, getfield), és ellenőrizzük az állapotot (isgameover) amennyiben vége van a játéknak, lekérdezzük a győztes nevét (getwinner) ELTE IK, Szoftvertechnológia 7:21

Esettanulmányok Tic-Tac-Toe játék Dinamikus tervezés (kommunikáció): player console :TicTacToeConsole _game :TicTacToeGame run() readplayernames() setplayers(string, string) newgame() loop [isgameover() = false] readstep() stepgame(int, int) loop getfield(int, int) :int isgameover() :bool getwinner() :string exit() ELTE IK, Szoftvertechnológia 7:22

Beágyazott diagramok Egy szekvenciába beágyazhatunk másik szekvenciát is (ref), ezzel csökkentve a diagram bonyolultságát <objektum> <objektum> <objektum> <üzenet> <üzenet> ref <beágyazott szekvencia> ELTE IK, Szoftvertechnológia 7:23

Időtartam A szekvenciában az idő relatív lefolyását tényleges időbeli lefolyássá is alakíthatjuk időtartam megadásával <aktor> <objektum> üzenetek és üzenetek közötti szakaszok rendelkezhetnek időtartammal az időtartam lehet pontos, intervallum, vagy korlát (alsó/felső) {2 s} <üzenet> {<10 ms} {<5ms} ELTE IK, Szoftvertechnológia 7:24

Esettanulmányok Marika néni kávézója Feladat: 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 a program kezelje a rendeléseket, amelyekben tetszőleges tételek szerepelhetnek, illetve a rendelés kapcsolódhat egy törzsvásárlóhoz biztosítsunk lehetőséget a függőben lévő rendeléseket lekérdezésére, valamint napi, havi és törzsvásárolói számra összesített nettó/bruttó fogyasztási statisztikák követésére ELTE IK, Szoftvertechnológia 7:25

Esettanulmányok Marika néni kávézója Szerkezeti tervezés: View::Menu - _ordermanager :OrderManager + Menu() + ~Menu() + run() :void - printmainmenu() :void - printaddorder() :void - printstatsmenu() :void - printstatsformonth() :void - printstatsforcustomer() :void + printstatsforday() :void + printopenorders() :void + printcloseorder() :void Model::OrderManager - _orders :List<Order> - _persistence :OrderPersistence + addorder(order) :void + closeorder(int) :void + openorders() :List<Order> {query} + order(int) :Order + loadorders(string) :void + saveorders(string) :void + monthlyincome(int, int) :int + dailyincome(int, int, int) :int + customerincome(int) :int Persistence::OrderPersistence + loadorders(string) :List<Order> + saveorders(string, List<Order>) :bool ELTE IK, Szoftvertechnológia 7:26

Esettanulmányok Marika néni kávézója Dinamikus tervezés: Egy tétel hozzáadásának szekvenciája: futtatjuk a menüt (run), amely először betölti az adatokat (loadorders) rendelés létrehozásakor (printaddorder) felvesszük a tételeket (additem), majd elmentjük a rendelést (addorder) listázva a nyitott rendeléseket (printopenorders) van lehetőségünk lezárni egy rendelést (printcloseorder, closeorder) a futásból történő kilépéskor elmentjük az adatokat (saveorders) ELTE IK, Szoftvertechnológia 7:27

Esettanulmányok Marika néni kávézója Dinamikus tervezés (rendelés felvétele, kommunikáció): user :Menu _ordermanager :OrderManager _persistence :OrderPersistence run() loadorders(string) loadorders(string) :List<Order> ref Add Order saveorders(string) saveorders(string, List<Order>) :bool ELTE IK, Szoftvertechnológia 7:28

Esettanulmányok Marika néni kávézója Dinamikus tervezés (Add Order): user :Menu _ordermanager :OrderManager printaddorder() Order(int, int, tm) :Order loop [items to add] additem(item) addorder(order) printopenorders() openorders() :List<Order> printcloseorder() closeorder(int) ELTE IK, Szoftvertechnológia 7:29

Esettanulmányok Memory játék Feladat: Készítsünk egy Memory kártyajátékot, amelyben két játékos küzd egymás ellen, és a cél kártyapárok megtalálása a játéktáblán. 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 lehessen a játékosok neveit megadni, kártyacsomagot választani, valamint a kártyák számát (a játéktábla méretét) szabályozni ELTE IK, Szoftvertechnológia 7:30

Esettanulmányok Memory játék Szerkezeti tervezés (modell): CardPack - _name :QString - _faces :QVector<QPixmap> - _back :QPixmap + CardPack(QString&) + getname() :QString {query} + cardcount() :int {query} + getfaces() :QVector<QPixmap> {query} + getback() :QPixmap& {query} + getface(int) :QPixmap& {query} -_cardpacks 1..* GameManager - _cardpacks :QVector<CardPack*> - _players :QVector<Player*> - _currentnumcols :int - _currentnumrows :int - _currentcardpackindex :int - _currentplayerindex :int - _timer :QTimer* - _cardfound :QVector<bool> - _foundcards :int - _cardids :QVector<int> - _firstcardindex :int - _secondcardindex :int QObject Player - _name :QString - _hits :int - _misses :int - _victories :int + Player(QString) + newgame() :void + addhit() :void + addmiss() :void + addvictory() :void + getname() :QString {query} + gethits() :int {query} + getmisses() :int {query} + getvictories() :int {query} -_players 2 + allcardpacks() :QVector<CardPack*> {query} + currentpack() :CardPack* {query} + currentplayer() :Player* {query} + firstplayer() :Player* {query} + GameManager() + ~GameManager() - loadpacks(qstring) :void + secondplayer() :Player* {query} - shufflecards() :void «signal» + cardchanged(int, QPixmap&) :void + gameover(qstring) :void + statuschanged(qstring) :void «slot» - hidecards() :void + newgame(int, int) :void + selectcard(int) :void + setcurrentpack(cardpack*) :void + setplayers(qstring, QString) :void ELTE IK, Szoftvertechnológia 7:31

Esettanulmányok Memory játék Szerkezeti tervezés (nézet): -configurationdialog ConfigurationDialog - _ui :Ui::ConfigurationDialog* - _cardpacks :QVector<CardPack*> - _cardlabels :QVector<QLabel*> QDialog + ConfigurationDialog(QVector<CardPack*>, QWidget*) + ~ConfigurationDialog() + firstplayername() :QString + secondplayername() :QString + numberofrows() :int + numberofcolumns() :int + selectedcardpack() :CardPack* - loadsettings() :void - savesettings() :void «slot» + setfirstplayername(qstring) :void + setsecondplayername(qstring) :void + setnumberofrows(int) :void + setnumberofcolumns(int) :void + checkvalues() :void + changecardpack(int) :void + setmaxrows() :void + setmaxcols() :void GameWidget - _ui :Ui::GameWidget* - _manager :GameManager* - _buttons :QVector<ImageButton*> - _isconfigured :bool - _configurationdialog :ConfigurationDialog* QWidget + GameWidget(QWidget*) + ~GameWidget() + gamemanager_cardchanged(int, QPixmap&) :void + gamemanager_gameover(qstring) :void «signal» + statuschanged(qstring) :void «slot» + newgame() :void + configuregame() :void + buttonclicked() :void -buttons 4..* - _image :QPixmap QPushButton ImageButton + ImageButton(QWidget*) + pixmap() :QPixmap {query} # paintevent(qpaintevent*) :void «slot» + setpixmap(qpixmap&) :void + clearpixmap() :void 2 -gamewidget QWidget PlayerStatusWidget - _ui :Ui::PlayerStatusWidget* - _player :Player* + PlayerStatusWidget(QWidget*) + ~PlayerStatusWidget() «slot» + setplayer(player*) :void + refreshplayer() :void QMainWindow MainWindow - _newgameaction :QAction* - _exitaction :QAction* - _configureaction :QAction* - _gamemenu :QMenu* - _gamewidget :GameWidget* + MainWindow(QWidget*) + ~MainWindow() # closeevent(qcloseevent*) :void ELTE IK, Szoftvertechnológia 7:32

Esettanulmányok Memory játék Dinamikus tervezés: Új játék indításának szekvenciája: új játék indításához először a főablakban (MainWindow) kell kiváltanunk (triggered) a megfelelő akciót (newgameaction) ennek hatására a főablak új játékot indít (newgame) a játék nézetében (GameWidget) a nézet beállítja a játék paramétereit (configuregame) a nézet létrehozza az új játékot (newgame) a modellben (GameManager) a modell megkeveri a kártyákat (shufflecards), majd eseménnyel jelzi az állapot változását (changestatus) ELTE IK, Szoftvertechnológia 7:33

Esettanulmányok Memory játék Dinamikus tervezés (új játék indítása, kommunikáció): MainWindow GameWidget GameManager user newgameaction.triggered() newgame() configuregame() newgame(rows, cols) changestatus(message) shufflecards() changestatus(message) ELTE IK, Szoftvertechnológia 7:34

Tevékenység diagram A kommunikációs és szekvencia diagramok az interakciót elsősorban az objektumok szempontjából közelítik meg, nem a végrehajtott tevékenységsorozat szemszögéből Az UML tevékenység diagram (activity diagram) célja, hogy a végrehajtás lefolyását a tevékenységek és a tevékenységekben felhasznált adatok szempontjából közelítse meg egy időbeli lefolyását látjuk a kommunikációnak, de a kommunikáció végrehajtója rejtett marad jelölésrendszere hasonlít az állapotdiagramra, ugyanakkor jelentésében közelebb áll a szekvenciadiagramhoz ELTE IK, Szoftvertechnológia 7:35

Tevékenység diagram elemei A tevékenység diagram egy tevékenységet (activity) ábrázol, amely egy munkafolyamat megvalósulása a munkafolyamat egyes lépései az akciók (action), amelyek adott funkciók végrehajtásai az akciókat a vezérlési folyam (control flow) köti össze, amely meghatározza sorrendjüket <tevékenység> <akció> <akció> <akció> ELTE IK, Szoftvertechnológia 7:36

A tevékenység diagram elemei A tevékenység során egy kezdeti állapotból (initial) egy végállapotba (final) vezetjük a vezérlési folyamot elágazhatunk adott feltételek mentén (decision) a végrehajtásban, illetve különböző ágakat összevonhatunk (merge) <akció> <akció> <akció> ELTE IK, Szoftvertechnológia 7:37

A tevékenység diagram elemei párhuzamosíthatunk (fork), valamint összefuttathatjuk (join) a párhuzamos végrehajtást <akció> <akció> <akció> <akció> általánosíthatjuk a tevékenységet (generalization, composite) <aktiváció> <aktiváció> ELTE IK, Szoftvertechnológia 7:38

A tevékenység diagram elemei Pl. (prezentáció elkészítése és előadása): elkészítés előadás új dia hozzáadása dia elmagyarázása [van még mondanivaló] [kész] dia betöltése [nincs kérdés] [van kérdés] válasz a kérdésre tartalom kitöltése [van hátra idő] [előadás vége] ELTE IK, Szoftvertechnológia 7:39

Adatok a tevékenységben Ábrázolhatjuk a tevékenység során átadott adatokat (objektumokat), amelynek két lehetősége: az átadott/átvett objektum beiktatása a vezérlési folyamba az átadott, illetve átvett objektum jelölése az akciónál (mint az akció bemenő, illetve kimenő értékei) <akció> <akció> <objektum> <objektum> <akció> <objektum> ELTE IK, Szoftvertechnológia 7:40

Tevékenységek felosztása Amennyiben azonosítani szeretnénk a tevékenységben betöltött szerepeket, feloszthatjuk a tevékenységet párhuzamos folyamokra (partitions), amelyek között szinkronizálhatunk (syncronization) <szerep> <szerep> <akció> <objektum> <akció> <akció> ELTE IK, Szoftvertechnológia 7:41

Tevékenységek felosztása Pl. (prezentáció elkészítése és előadása): oktató hallgató prezentáció elkészítése prezentáció feltöltése prezentáció oktató honlapjának megtekintése prezentáció áttekintése prezentáció nyomtatása prezentáció előadása jegyzetelés ELTE IK, Szoftvertechnológia 7:42

Esettanulmányok Marika néni kávézója Dinamikus tervezés (tevékenység): Az alkalmazás indításakor betöltjük az adatokat, majd használjuk a menüt, végül mentjük az adatokat run program load data use menu save data Lehetőségünk van új rendelés feltételére, amelyben létrehozunk egy új rendelést (esetlegesen törzsvásárlói kártya megadásával), tételeket veszünk fel, majd lezárjuk a rendelést (ha a vendég fizetett) ELTE IK, Szoftvertechnológia 7:43

Esettanulmányok Marika néni kávézója Dinamikus tervezés (tevékenységek): [customer has no card] add order [item is food] [customer has card] add card number select item type [item is drink] add item name :Order :Item add item price close order [guest asked for item] [guest paid] save item ELTE IK, Szoftvertechnológia 7:44