Programozási technológia II 3. előadás. Objektumorientált tervezés. 2016 Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.

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

Programozási technológia 2.

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

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

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

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

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

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

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

Összetett alkalmazások

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

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

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

Előzmények

A SZOFTVERTECHNOLÓGIA ALAPJAI

Bánsághi Anna 1 of 67

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

Modellalkotás UML-ben

Szoftvertechnológia 8. gyakorlat. Tervezés Giachetta Roberto

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

2. Beadandó feladat dokumentáció

Összefüggő szakmai gyakorlat témakörei. 13 évfolyam. Információtechnológiai gyakorlat 50 óra

WebSphere Adapters. 6. változat 2. alváltozat. WebSphere Adapter for SAP Software felhasználói kézikönyv 6. változat 2. kiadás

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

IBM WebSphere Adapters 7. változat 5. alváltozat. IBM WebSphere Adapter for Oracle E-Business Suite felhasználói kézikönyv 7. változat 5.

Összefüggő szakmai gyakorlat témakörei évfolyam. 9. évfolyam

MVC Java EE Java EE Kliensek JavaBeanek Java EE komponensek Web-alkalmazások Fejlesztői környezet. Java Web technológiák

10. évfolyam 105 óra azonosító számú Hálózatok, programozás és adatbázis-kezelés 105 óra Adatbázis- és szoftverfejlesztés gyakorlat tantárgy

Ismeretanyag Záróvizsgára való felkészüléshez

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.

A rendszert négy komponensből építjük fel, amelyek a következők:

Rendszerterv. 1. Funkcionális terv Feladat leírása:

Szoftverprototípus készítése. Szoftverprototípus készítése. Szoftverprototípus készítése

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

Karbantartás. Az ESZR Karbantartás menüjébentudjuk elvégezni az alábbiakat:

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

Karbantartás. Az ESZR Karbantartás menüjébentudjuk elvégezni az alábbiakat:

3. Beadandó feladat dokumentáció

TERMÉKTERVEZÉS PANDUR BÉLA TERMÉKTERVEZÉS

Informatikai Kar. 3. fejezet. alapismeretek. Giachetta Roberto

.NET Microsoft.Net Framework

Előszó. Bevezetés. Java objektumok leképzése relációs adatbázisokra OJB-vel Viczián István Viczián István

2. Beadandó feladat dokumentáció

eseményvezérelt megoldások Vizuális programozás 5. előadás

2. Beadandó feladat dokumentáció

Adatbázisok* tulajdonságai

Szoftvertechnológia. Feladatgyűjtemény. Eötvös Loránd Tudományegyetem Informatikai Kar Programozáselmélet és Szoftvertechnológiai Tanszék

Welcome3 Bele pteto rendszer

Techtrading Műszaki Fejlesztő és Kereskedelmi Kft.

Objektum Orientált Szoftverfejlesztés (jegyzet)

RIA Rich Internet Application

Adatstruktúrák, algoritmusok, objektumok

Bánsághi Anna

Egységes és objektumközpontú adatbázis-kezelés (2. rész)

Szervlet-JSP együttműködés

2.1.A SZOFTVERFEJLESZTÉS STRUKTÚRÁJA

Blonde. Szépségszalon, Szolárium, Spa, Fitness. Ügyviteli Rendszer. Funkcionális Specifikáció. Verzió 1.1

Alkalmazott modul: Programozás

Objektumorientált programozás C# nyelven

Csoport neve: Kisiskolások Feladat sorszáma: 2. Feladat címe: Oktatási intézmény honlapja, oktatási naplóval. E-Project.

!!" KÉSZÍTK: ERDÉLYI LAJOS KOLLÁR NÁNDOR WD6OGW BUK8Y7

Osztály és objektum fogalma

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

axióma alapú automatizált teszteléssel

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

Hálózatkezelés: Távoli elérés szolgáltatások - PPP kapcsolatok

Book Template Title. Author Last Name, Author First Name

Programozási nyelvek Java

Elemi alkalmazások fejlesztése III.

TELEPÍTSÜNK GYORSAN ÉS EGYSZERŰEN SULIX PROFESSIONALT

2. fejezet Hálózati szoftver

Webes alkalmazások fejlesztése Bevezetés. Célkitűzés, tematika, követelmények. A.NET Core keretrendszer

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

Operációs rendszerek. A Windows NT felépítése

Adatbázis-kezelés ODBC driverrel

TÉRINFORMATIKA AZ INTERNETEN

1. Funkcionális terv Feladat leírása: 1.2. Rendszer célja, motivációja:

Webes alkalmazások fejlesztése Bevezetés. Célkitűzés, tematika, követelmények. A.NET Core keretrendszer

ANDROID 2.3 TÁBLAGÉP KEZELÉSI ÚTMUTATÓ

ZH mintapélda. Feladat. Felület

ELTE, Informatikai Kar december 12.

1. sz. melléklet: Komplex portálrendszer fejlesztése szakmai specifikációja

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

Java. Perzisztencia. ANTAL Margit. Java Persistence API. Object Relational Mapping. Perzisztencia. Entity components. ANTAL Margit.

Tartalomjegyzék 5 TARTALOMJEGYZÉK

Elemi alkalmazások fejlesztése IV. Adatbázis-kezelés ActiveX vezérlıkkel - 1

Gate Control okostelefon-alkalmazás

Programozási technológia 2.

Fejlesztési tapasztalatok multifunkciós tananyagok előállításával kapcsolatban Nagy Sándor

Ismerkedés a Windows Explorer-rel

INFORMÁCIÓS- ÉS VEZÉRLŐSZOFTVER A SZÁMÍTÓGÉP-KOMPATIBILIS FUNKCIÓVAL BÍRÓ VÉRNYOMÁSMÉRŐKHÖZ

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

UML (Unified Modelling Language)

Elektronikus közhiteles nyilvántartások Megvalósítási tanulmány


Több app. Egy kódbázis

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

Nemzeti Alaptanterv Informatika műveltségterület Munkaanyag március

Komponens modellek. 3. Előadás (első fele)

A Polycom RealPresence Group Series készülékek és tartozékok szoftverének és opcióinak telepítése. Áttekintés

Átírás:

Eötvös Loránd Tudományegyetem Informatikai Kar Programozási technológia II 3. előadás Objektumorientált tervezés 2016 Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto

Objektumok, osztályok Az objektumorientált tervezés során a rendszert az objektumok mentén építjük fel, ahol az objektum a valóság absztrakcióját adja biztosít egy elvárt funkcionalitást adat és működés egymásba burkolásából épül fel Egy adott feladatban az objektumokat (osztályokat) be kell azonosítanunk azáltal, hogy milyen funkciókat azonosítottunk az elemzés során, és azok milyen adatokkal dolgoznak a valóságban milyen építőelemeket tudnánk megfeleltetni a funkcióknak ELTE IK, Programozási technológia II 3:2

A tervezés fázisai A tervezés általában több fázisból épül fel, amely során finomítunk a terven mivel már az első fázis alapján beazonosítani a szükséges objektumokat, és azok felépítését meglehetősen nehézkes minden fázisban bevezethetünk új osztályokat a beazonosított feladatokra tovább pontosíthatjuk a már létező osztályok felépítését, az implementációs megkötéseket felbonthatunk osztályokat, amennyiben túl bonyolulttá, túl szerteágazóvá válnak összevonhatunk osztályokat, amennyiben túlzottan elaprózódnak ELTE IK, Programozási technológia II 3:3

A tervezés alapelvei Az objektumorientált tervezés során öt alapelvet célszerű követnünk (SOLID): Single responsibility principle (SRP): egy programegység csak egyvalamiért felelhet Open/closed principle (OCP): a programegységek nyitottak a kiterjesztésre, de zártak a módosításra Liskov substitution principle (LSP): az objektumok helyettesíthetőek altípusaik példányával Interface segregation principle (ISP): egy általános interfész helyett több kliens specifikus interfész Dependency inversion principle (DIP): az absztrakciótól függünk, nem a konkretizációtól ELTE IK, Programozási technológia II 3:4

Az architektúra Szoftver architektúrának nevezzük a szoftver fejlesztése során meghozott elsődleges tervezési döntések halmazát azon döntések, amelyek megváltoztatása később jelentős újratervezését igényelné a szoftvernek kihat a rendszer felépítésére, viselkedésére, kommunikációjára, nem funkcionális jellemzőire és megvalósítására A szoftver architektúra elsődleges feladata a rendszer magas szintű felépítésének és működésének meghatározása, a komponensek és relációk kiépítése meghatározza a szolgáltatott és elvárt interfészek halmazát, a kommunikációs csatornákat és csatlakozási pontokat ELTE IK, Programozási technológia II 3:5

Minták a tervezésben A szoftver architektúráját különböző szempontok szerint közelíthetjük meg, pl.: a szoftver által nyújtott szolgáltatások (funkciók) szerint a felhasználó és a futtató platform közötti tevékenységi szint szerint az adatátadás, kommunikáció módja szerint Az architektúra létrehozása során mintákra hagyatkozunk, a szoftver teljes architektúráját definiáló mintákat nevezzük architekturális mintáknak (architectural pattern), az architektúra alkalmazásának módját, az egyes komponensek összekapcsolását segítik elő a tervminták (design pattern) ELTE IK, Programozási technológia II 3:6

A monolitikus architektúra Minden szoftver rendelkezik architektúrával A legegyszerűbb felépítést az monolitikus architektúra (monolithic architecture) adja nem különböztetjük meg az egyes feladatköröket (pl. megjelenítés, adatkezelés), hanem egységesen kezeljük őket alkalmazás felhasználó megjelenítés tevékenységek adatkezelés ELTE IK, Programozási technológia II 3:7

1. esettanulmány 1. esettanulmány: 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 ELTE IK, Programozási technológia II 3:8

1. esettanulmány Használati esetek: Rendelés lezárása «include» folyamatban lévő rendelések lekérdezése Marika néni Hó megadása «include» Ital felvétele «precedes» Havi fogyasztás lekérdezése «include» Új rendelés indítása Adatok mentése «invokes» Bezárás Fogyasztás lekérdezése Étel felvétele «include» «precedes» «precedes» Adatok betöltése «precedes» Napi fogyasztás lekérdezése «include» «include» «include» Ár megadása Név megadása «include» Törzsvásárolói szám megadása «include» Törzsvásárló fogyasztásának lekérdezése Nap megadása ELTE IK, Programozási technológia II 3:9

1. esettanulmány Szerkezeti tervezés (0. fázis): a programban rendeléseket kezelünk, amelyek tételekből állnak a tételek a hamburger, ufó, palacsinta, kóla, narancs, tea, amelyek mind nagyon hasonlóak, csak néhány részletben térnek el rendelések sorozatát kell kezelnünk a programban, amelyek száma folyamatosan bővül a programot egy menün keresztül kezeljük, amely biztosítja a felhasználó felé a funkciókat, minden funkció ugyanazzal a rendelés sorozattal dolgozik ELTE IK, Programozási technológia II 3:10

1. esettanulmány Szerkezeti tervezés (1. fázis): a feladatban fellelhető tárgykörök a menü, a rendelések sorozata, a rendelés, valamint a rendelés tételei (italok, ételek) rendelés tételei (Item): hasonlóan viselkednek, ám némileg eltérően ezért megvalósításban öröklődést használunk, specializáljuk a 3 ételt, illetve italt rendelés (Order): tartalmazza a tételeket (mivel a rendelések száma változhat, ezért láncolt listát használ) menü (Menu): tartalmazza a rendeléseket (láncolt listában) ELTE IK, Programozási technológia II 3:11

1. esettanulmány Pancake Orange Ufo Hamburger Item -items * Tea Coke Order -orders * Menu List ELTE IK, Programozási technológia II 3:12

1. esettanulmány Szerkezeti tervezés (2. fázis): láncolt lista (List): külön megvalósítást igényel, sablonos típusként kétszeresen láncolt, fejelemes, aciklikus reprezentáció lehetőséget ad a beszúrásra (elején, végén, közben), törlésre, kiürítésre, és méret lekérdezésre a listaelem (ListItem) tárolja az adatot és a két mutatót a hibát kivétellel jelezzük, egy felsorolási típussal (Exceptions) a lista bejárható, a bejáró (Iterator) a szabványos műveleteket tárolja ELTE IK, Programozási technológia II 3:13

1. esettanulmány Szerkezeti tervezés (2. fázis): rendelési tételek (Item): minden esetben ismert a név, a bruttó és a nettó ár ám ezek csak az ételek esetén változnak rendelések (Order): adatai az azonosító (ez automatikus), a törzsvásárlói szám és a dátum, valamint, hogy folyamatban van-e lehetőséget ad új elem felvételére, nettó/bruttó érték lekérdezésére menü (Menu): biztosítja a mentést/betöltést, valamint a menüfunkciókat ELTE IK, Programozási technológia II 3:14

1. esettanulmány Szerkezeti tervezés (3. fázis): a cím szerinti hivatkozásokat mutatókon keresztül kezeljük a listaelemet és a lista kivételeit beágyazott osztályként hozzuk létre, a listaelem egyszerűsége miatt lehet rekord (struct) a lista megfelelő használatához szükséges destruktor, másoló konstruktor, értékadás művelet, kiíró operátor, indexelő operátor a rendelési elem ősosztályban megvalósítunk egy virtuális destruktort ELTE IK, Programozási technológia II 3:15

1. esettanulmány Szerkezeti tervezés (lista): ValueType : class -_next -_prev + _data :ValueType + _next :ListItem* + _prev :ListItem* «struct» List::ListItem + ListItem(ListItem*, ListItem*) + ListItem(ValueType, ListItem*, ListItem*) -_current List::Iterator - _current :ListItem* + Iterator() + Iterator(Iterator&) + operator++() :Iterator& + operator++(int) :Iterator& + operator--() :Iterator& + operator--(int) :Iterator& + operator*() :ValueType {query} + operator==(iterator&) :bool {query} + operator!=(iterator&) :bool {query} -_tail -_head - _head :ListItem* - _size :int - _tail :ListItem* List + List() + ~List() + List(List&) + operator=(list&) :List& + Begin() :Iterator {query} + End() :Iterator {query} + RBegin() :Iterator {query} + REnd() :Iterator {query} + Insert(Iterator&, ValueType) :void + InsertFirst(ValueType) :void + InsertLast(ValueType) :void + Remove(Iterator&) :ValueType + RemoveFirst() :ValueType + RemoveLast() :ValueType + Clear() :void + Size() :int {query} «friend» + operator<<(std::ostream&, List&) :std::ostream& «enumeration» List::Exceptions LIST_IS_EMPTY ELTE IK, Programozási technológia II 3:16

1. esettanulmány Szerkezeti tervezés (rendelések): Menu - _orders :List<Order*> + Menu() + ~Menu() + Run() :void + LoadData() :void + SaveData() :void - WriteMainMenu() :void - WriteRatingsMenu() :void - AddOrder() :void - ShowRatingsForMonth(int, int) :void - ShowRatingsForCard(int) :void - ShowRatings() :void + ShowRatingsForDay(int, int, int) :void + ShowCurrentOrders() :void + CloseOrder(int) :void -_orders * Order - _cardnumber :int - _items :List<Item*> - _number :int - _date :tm + Order(int, int, tm) + AddItem(Item*) :void + GetNumber() :int {query} + GetCardNumber() :int {query} + Items() :List<Item*>& {query} + GetNetValue() :int {query} + GetTotalValue() :int {query} + GetDate() :tm {query} {ValueType = Order*} -_orders -_items Item * {ValueType = Item*} -_items ValueType : class List ELTE IK, Programozási technológia II 3:17

1. esettanulmány Szerkezeti tervezés (tételek): Coke + Coke() + GetTotalValue() :int {query} + GetType() :char {query} + GetName() :std::string {query} Hamburger - _name :std::string - _totalvalue :int + Hamburger(std::string, int) + GetTotalValue() :int {query} + GetType() :char {query} + GetName() :std::string {query} Tea + Tea() + GetTotalValue() :int {query} + GetType() :char {query} + GetName() :std::string {query} Orange + Orange() + GetTotalValue() :int {query} + GetType() :char {query} + GetName() :std::string {query} Item + ~Item() + GetNetValue() :int {query} + GetTotalValue() :int {query} + GetType() :char {query} + GetName() :std::string {query} Ufo - _name :std::string - _totalvalue :int + Ufo(std::string, int) + GetTotalValue() :int {query} + GetType() :char {query} + GetName() :std::string {query} Pancake - _name :std::string - _totalvalue :int + Pancake(std::string, int) + GetTotalValue() :int {query} + GetType() :char {query} + GetName() :std::string {query} ELTE IK, Programozási technológia II 3:18

A modell/nézet architektúra A programszerkezet felépítése akkor ideális, ha teljesen külön programegységbe tudjuk leválasztani a felhasználói felülettel kapcsolatos részeket a ténylegesen a feladat megoldását szolgáltató funkcionalitástól Ezt a felbontást követve jutunk el a modell/nézet (MV, modelview) architektúrához, amelyben a modell tartalmazza a feladat végrehajtását szolgáló programegységeket, az állapotkezelést, valamint az adatkezelést, ezt nevezzük alkalmazáslogikának, vagy üzleti logikának a nézet tartalmazza a grafikus felhasználói felület megvalósítását, a felület elemeit és az eseménykezelőket ELTE IK, Programozási technológia II 3:19

A modell/nézet architektúra a felhasználó a nézettel kommunikál, a modell és a nézet egymással alkalmazás felhasználó megjelenítés nézet eseménykezelés adatkezelés modell állapotkezelés ELTE IK, Programozási technológia II 3:20

A modell/nézet architektúra A modell és a nézet kapcsolatát úgy kell megvalósítani, hogy a nézet ismerheti a modell felületét (interfészét), és hívhatja annak (publikus) műveleteit a modellnek semmilyen tudomása sem lehet a nézetről, ezért nem hívhatja annak műveleteit, de eseményeken keresztül kommunikálhat vele nézet metódushívás események modell A megvalósításban a nézet hivatkozhat a modellre (pontosabban a felületére) ELTE IK, Programozási technológia II 3:21

Csomagdiagram A csomagdiagram (package diagram) célja a rendszer felépítése a logikai szerkezet mentén, azaz az egyes rétegek, illetve csomagok azonosítása és a csomagba tartozó osztályok bemutatása <csomagnév> + <osztály> + <osztály> <csomagnév> + <osztály> a csomagok között is létrehozhatunk kapcsolatokat az osztályok közötti kapcsolatok érvényesek: függőség, asszociáció, általánosítás, megvalósítás ELTE IK, Programozási technológia II 3:22

Csomagdiagram használat (use): a csomag felhasznál egy másikat beágyazás (nesting): a csomag egy másiknak importálás (import): a csomag betölti a másikat összeillesztés (merge): a csomag tartalmazza a másik teljes funkcionalitását Adatkezelés Megjelenítés Grafikus megjelenítés «import» «merge» Amennyiben egy réteg több csomagból is áll, akkor azokat beágyazott csomagként jelölhetjük a diagramban ELTE IK, Programozási technológia II 3:23

2. esettanulmány 2. esettanulmány: 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, Programozási technológia II 3:24

2. esettanulmány Használati esetek: első kártya felfordítása lépés «include» «precedes» új játék «include» «precedes» második kártya felfordítása nevek megadása «precedes» beállítások «include» játékos «include» táblaméret megadása «include» kilépés kártyacsomag megadása ELTE IK, Programozási technológia II 3:25

2. esettanulmány Szerkezeti tervezés: a játékot kétrétegű architektúrában valósítjuk meg a modell tartalmazza: magát a játékot, amit egy kezelőosztály felügyel (GameManager), valamint hozzá segédosztályként a játékost (Player) a kártyacsomagokat (CardPack) a nézet tartalmazza: a játék főablakát (MainWindow), amely tartalmaz egy menüt és egy státuszsort a beállítások segédablakát (ConfigurationDialog) ELTE IK, Programozási technológia II 3:26

2. esettanulmány a játékfelületet megjelenítő vezérlőt (GameWidget), amely tartalmazza a játékmezővel kapcsolatos tevékenységeket ehhez segédosztályként a felhasználói információkat kiíró vezérlőt (PlayerStatusWidget, ezt előléptetett vezérlővel állítjuk be a felülettervezőben), valamint a képet megjeleníteni tudó egyedi gombot (ImageButton) a nézet a modell publikus műveleteit hívja, és eseményeket is kaphat tőle egy csomag kártyát erőforrásként csatolunk az alkalmazáshoz (packs.qrc), hogy mindig legyen legalább egy csomag kártya ELTE IK, Programozási technológia II 3:27

2. esettanulmány Szerkezeti tervezés (csomagok): ELTE IK, Programozási technológia II 3:28

2. esettanulmány 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, Programozási technológia II 3:29

2. esettanulmány 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, Programozási technológia II 3:30

A szoftverrendszer Szoftvernek nevezzük a program(ok), dokumentáció(k), konfiguráció(k), valamint adatok együttese mivel a megoldandó feladatok összetettek lehetnek, a megoldást nem feltétlenül egy program, hanem több program tudja megadni a végrehajtás során ezek a programok egymással kommunikálnak (adatot cserélnek) Egymással kommunikáló programok álkotta szoftvereket nevezzük szoftverrendszernek (software system) a rendszerben jelen lévő programokat nevezzük a rendszer komponenseinek (component) ELTE IK, Programozási technológia II 3:31

Komponensek A szoftver komponens egy adott funkcionalitásért felelő, fizikailag elkülönülő része a rendszernek önállóan (újra)felhasználható, telepíthető belső működése rejtett, a kapcsolatot megfelelő felületen (interface) keresztül teremti meg szolgáltathat olyan funkcionalitást, amelyet más komponensek használnak fel, ehhez tartozik egy szolgáltatott felület (provided interface) felhasználhat más komponenseket, amelyek funkcionalitását egy elvárt felületen (required interface) keresztül érhetik el ELTE IK, Programozási technológia II 3:32

Komponensek Egy szoftverrendszerben számos komponens található, pl. mobil alkalmazás, asztali alkalmazás, weblap (biztosítják a kapcsolatot a felhasználóval) webszolgáltatás (gondoskodik az adatok továbbításáról) adatbázis (gondoskodik az adatok megfelelő tárolásáról) asztali alkalmazás mobil alkalmazás weblap webszolgáltatás adatbázis ELTE IK, Programozási technológia II 3:33

Komponensek Egy program is felbontható komponensekre, amennyiben egyes részeit újrafelhasználhatóvá szeretnénk tenni Egy program komponensei lehetnek: végrehajtható állomány (executable), amely biztosítja a belépési pontot az alkalmazásba programkönyvtár (library), amely adott funkcionalitások gyűjteménye (nem végrehajtható), objektumorientált környezetben osztályok gyűjteménye (class library) végrehajtható állomány programkönyvtár programkönyvtár ELTE IK, Programozási technológia II 3:34

Komponensdiagram A szoftverrendszer komponenseit UML komponensdiagram (component diagram) segítségével ábrázolhatjuk ismerteti a rendszer komponenseit, a szolgáltatott/elvárt felületeket és a közöttük fennálló kapcsolatokat (connector) <szolgáltatott felület> <elvárt felület> <komponens> <kapcsolat> <komponens> a komponens diagramnak osztálydiagram elemeket is elhelyezhetünk (pl. felület külön megjeleníthető) ELTE IK, Programozási technológia II 3:35

Komponensdiagram Pl.: asztali alkalmazás mobil alkalmazás webszolgáltatás weblap SQL adatbázis ELTE IK, Programozási technológia II 3:36

Telepítési diagram A szoftverrendszerek komponensei akár különböző hardver eszközökre is kihelyezhetőek, amelyeken interakcióba lépnek a környezetükkel (más szoftverekkel) A szoftverrendszert kihelyezési és környezeti szempontból az UML telepítési diagram (deployment diagram) ábrázolja ismerteti azon csomópontokat (node), amelyekre az egyes alkotóelemei (artifact) találhatóak <csomópont> <alkotóelem> <csomópont> <alkotóelem> ELTE IK, Programozási technológia II 3:37

Telepítési diagram A rendszer alkotóeleme lehet bármilyen, fizikailag elkülönülő tartozéka a szoftvernek pl. mobil alkalmazás, weblap, kódfájl, adatfájl, adatbázis, konfigurációs fájl a komponenseket jelölhetjük komponensként A rendszer csomópontja lehet: egy hardver eszköz (device), amelyen futtatjuk a szoftvert pl. mobiltelefon, szerver gép egy végrehajtási környezet (execution environment), amely biztosítja szoftverek futtatását, pl. webszerver, virtuális gép, adatbázis-kezelő ELTE IK, Programozási technológia II 3:38

Telepítési diagram Pl.: ELTE IK, Programozási technológia II 3:39

Adatformátumok A szoftverrendszer tervezése (system design) mellett foglalkoznunk kell a rendszer által kezelt adatok kezelésének módjával, formátumának meghatározásával, ez az adat tervezés (data design) minden, a szoftver (vagy komponensei) számára bemenetként, vagy kimenetként szolgáló adat formátumát, felépítését meg kell adnunk (pl. adatfájl, adatbázis, konfigurációs fájl, felhasználó által letölthető adatok) összetett adatok esetén támaszkodhatunk létező formátumokra (pl. CSV, XML, JSON), vagy létrehozhatunk egyedi formátumot ELTE IK, Programozási technológia II 3:40

1. esettanulmány 1. esettanulmány: 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 ELTE IK, Programozási technológia II 3:41

1. esettanulmány Tervezés (telepítés): a program egy komponensben valósul meg, egy személyi számítógépen fog futni a program közvetlenül az operációs rendszeren fut, nincs külön igénye a végrehajtási környezetre a program az adatokat egy fájlban (coffeshop.dat) szöveges formában fogja tárolni ELTE IK, Programozási technológia II 3:42

1. esettanulmány Tervezés (adatformátum): a fájlban rendelések következnek egymás után, minden rendelésnél adott az azonosító, a dátum, a törzsvásárolói kártya száma (vagy 0, amennyiben nincs) és a tételek száma a rendelés utána felsoroljuk a tételeket, minden tételnél megadjuk a típust (ehhez elég egy karakter) amennyiben a tétel egy étel, akkor rögzítjük a pontos nevet, illetve a bruttó árat CSV formátumnak megfelelően a fájlban a tartalmi elemeket (rendelés, tétel) sortörés választja el, a soron belül a tartalmat pontosvessző segítségével választjuk el ELTE IK, Programozási technológia II 3:43

1. esettanulmány Tervezés (adatformátum): a fájl szerkezetének sémája: <rendelés azonosító>;<dátum>;<törzsv. szám>; <tételek száma> <típus: h/u/p/t/n/k>;<étel neve>;<étel ára> <típus: h/u/p/t/n/k>;<étel neve>;<étel ára> <rendelés azonosító>;<dátum>;<törzsv. szám>; <tételek száma> pl.: 184601;2015-11-11;73;2 h;béke;800 t ELTE IK, Programozási technológia II 3:44

2. esettanulmány 2. esettanulmány: 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 ELTE IK, Programozási technológia II 3:45

2. esettanulmány Tervezés (telepítés): a program egy komponensben valósul meg, egy személyi számítógépen fog futni, és igényli a QT keretrendszer meglétét a program a kártyacsomagok képeit külön tárolja ELTE IK, Programozási technológia II 3:46

2. esettanulmány Tervezés (adatformátum): minden kártyacsomagnak van egy neve, valahány lapja, illetve egy hátoldala, ezeket képfájlban, PNG formátumban tároljuk a kártyacsomagokat könyvtáranként helyezzük el, minden könyvtárban található egy szöveges fájl (name.txt), amely tartalmazza a csomag nevét a hátlapot egy fájlban (back.png) tároljuk, ez sosem változik az előlapok fájljait sorszámozzuk (<sorszám>.png), és feltételezzük, hogy minden fájl más képet tartalmaz ELTE IK, Programozási technológia II 3:47

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, Programozási technológia II 3:48

3. esettanulmány Használati esetek: adminisztrációs felület apartmanok listázása «precedes» bejelentkezés webes felület «precedes» apartman keresés apartman szerkesztése «include» apartman képeinek feltöltése «precedes» adminisztrátor felhasználó «precedes» «invokes» «include» «include» apartman foglalása apartman adatainak megadása/módosítása «include» új apartman felvitele «invokes» «extend» adatbázis foglalás ütközésének ellenőrzése apartmanok lekérdezése apartmanok tárolása ELTE IK, Programozási technológia II 3:49

3. esettanulmány Tervezés (komponensek, telepítés): a rendszerben található egy webes, valamint egy adminisztrációs kliens, amelyet külön alkalmazások valósítanak meg a webes kliens egy weblap, amelyet egy webszerverrel futtatunk, és ASP.NET keretrendszer segítségével valósítjuk meg az adminisztrációs kliens egy asztali alkalmazás, amelyet.net keretrendszerben valósítunk meg, ezért a.net virtuális gépe (CLR) futtatja ELTE IK, Programozási technológia II 3:50

3. esettanulmány Tervezés (komponensek, telepítés): a két alkalmazás közös adatokat használ, amelyeket relációs adatbázisban tárolunk, ehhez MSSQL-t használunk a weblap és az adatbázis egy közös szerveren helyezkedik el, így a weblap közvetlenül hozzáfér az adatbázishoz az asztali alkalmazás más számítógépen fog futni, ezért biztonsági okokból nem férhet hozzá közvetlenül az adatbázishoz, a hozzáféréshez közbeiktatunk egy webszolgáltatást A webszolgáltatást egy webszerverrel futtatjuk, és ASP.NET WebAPI keretrendszer segítségével valósítjuk meg ELTE IK, Programozási technológia II 3:51

3. esettanulmány Tervezés (komponensek): «.NET desktop application» TravelAgencyAdmin REST «ASP.NET webservi... TravelAgencyService «ASP.NET webpag... TravelAgencyWeb SQL «MSSQL database» TravelAgencyDatabase SQL ELTE IK, Programozási technológia II 3:52

3. esettanulmány Tervezés (telepítés): ELTE IK, Programozási technológia II 3:53

3. esettanulmány Tervezés (adatformátum): az adatbázisban a következő séma szerint tároljuk az adatokat: városok (city): azonosító, városnév; épületek (building): azonosító, név, város azonosító, utca, tengerpart távolság, tengerpart-típus (számként), jellemzők (binárisan összeillesztve), megjegyzés; apartmanok (appartment): azonosító, épület azonosító, szám, ágyak száma, pótágyak száma, felújítás alatt vane; ügyfelek (customer): azonosító, név; ELTE IK, Programozási technológia II 3:54

3. esettanulmány Tervezés (adatformátum): ELTE IK, Programozási technológia II 3:55

A rendszerterv A tervezés eredménye a szoftver rendszerterve (software design description, SDD), amely tartalmazza: a program statikus szerkezetét, azaz a programegységek feladatát, részletes leírását és a köztük lévő relációkat a program dinamikus szerkezetét, azaz a program eseményeinek kiváltódását és hatásait, a programegységek állapotainak változását, az üzenetküldések megvalósítását a tárolt, kezelt, és eredményül adott adatok formáját, leírását a programok belső és külső interfészeinek leírását ajánlásokat az implementáció számára (stratégia, függőségek, programozási nyelv, tesztelési módszerek) ELTE IK, Programozási technológia II 3:56

A rendszerterv A rendszerterv felépítése: 1. előszó (célközönség, dokumentum-történet) 2. bevezetés (szoftver célja, helye, szükségessége, előnyei, fejlesztési módszertan) 3. fogalomtár (technikai áttekintés) 4. rendszer architektúra (magas szintű áttekintés, UML csomag-, komponens-, állapotdiagram) architektúrális minták funkcionális megfeleltetés 5. adat tervezés (adatformátumok leírása) ELTE IK, Programozási technológia II 3:57

A rendszerterv A rendszerterv felépítése: 6. rendszer tervezés (alacsony szintű áttekintés) statikus terv (UML osztály-, objektumdiagram) dinamikus terv (UML állapot-, szekvencia- és aktivációs diagram) interfész leírás felhasznált algoritmusok és minták 7. felhasználói felület (áttekintés, felületi terv) 8. implementációs ajánlások 9. függelék (pl. adatbázis terv, becsült hardver szükségletek) 10. tárgymutató ELTE IK, Programozási technológia II 3:58