Programozási technológia 2.

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

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

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

3. Beadandó feladat dokumentáció

Programozási technológia 2.

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

Összetett alkalmazások

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

ELTE, Informatikai Kar december 12.

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

S01-7 Komponens alapú szoftverfejlesztés 1

2. Beadandó feladat dokumentáció

Programfejlesztési Modellek

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

UML (Unified Modelling Language)

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

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

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

Szoftvertechnológia 2. gyakorlat. Projektdefiníció és elemzés Giachetta Roberto

01. gyakorlat - Projektalapítás

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

2. Beadandó feladat dokumentáció

Programozási technológia

Programozási technológia

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

Adatbázis, adatbázis-kezelő

Grafikus felhasználói felületek. Dr. Szendrei Rudolf Informatikai Kar Eötvös Loránd Tudományegyetem. Programozási technológia I. Dr.

Két csomag elemeiből lehet a felületet elkészíteni: awt: heavy weight komponensek; swing: light weight komponensek (időben később).

ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu

A Java EE 5 plattform

Grafikus keretrendszer komponensalapú webalkalmazások fejlesztéséhez

Software Engineering Babeş-Bolyai Tudományegyetem Kolozsvár

Space Invaders Dokumenta cio

MŰSZAKI DOKUMENTÁCIÓ. Aleph WebOPAC elérhetővé tétele okostelefonon. Eötvös József Főiskola 6500 Baja, Szegedi út 2.

GráfRajz fejlesztői dokumentáció

3. Beadandó feladat dokumentáció

Előzmények

Nyilvántartási Rendszer

Szoftver-technológia II. Architektúrák dokumentálása UML-lel. Irodalom. Szoftver-technológia II.

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

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

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

Webes alkalmazások fejlesztése 7. előadás. Autentikáció és autorizáció (ASP.NET Core) Cserép Máté

Java Programozás 11. Ea: MVC modell

MŰSZAKI KÖVETELMÉNYEK, A KÖRKERESŐ SZOFTVER SPECIFIKÁCIÓJA, KÖLTSÉGVETÉS. A) Műszaki követelmények

Országos Területrendezési Terv térképi mel ékleteinek WMS szolgáltatással történő elérése, Quantum GIS program alkalmazásával Útmutató 2010.

Telepítési Kézikönyv

NightHawk AccessControl

Vonalkód olvasó rendszer. Specifikáció Vonalkód olvasó rendszer SoftMaster Kft. [1]

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

Szoftverarchitektúrák 3. előadás (második fele) Fornai Viktor

Könyvtári címkéző munkahely

Már megismert fogalmak áttekintése

Alkalmazások fejlesztése A D O K U M E N T Á C I Ó F E L É P Í T É S E

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

Zimbra levelező rendszer

Az iskolai rendszerű képzésben az összefüggő szakmai gyakorlat időtartama. 10. évfolyam Adatbázis- és szoftverfejlesztés gyakorlat 50 óra

Operációs rendszerek. Tanmenet

Programozási technológia

ALKALMAZÁSOK ISMERTETÉSE

GIS adatgyűjtés zseb PC-vel

CabMap hálózat-dokumentáló rendszer

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

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

Példa webáruház kialakítás rendszerdokumentáció

Szoftverarchitektúrák. 12. Sorozat portál (követelmény specifikáció)

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

30 MB INFORMATIKAI PROJEKTELLENŐR

A szürke háttérrel jelölt fejezet/alfejezet szövege a CD-mellékleten található. A CD-melléklet használata. 1. Elméleti áttekintés 1

1. beadandó feladat dokumentáció

Webes alkalmazások fejlesztése 3. előadás. Objektumrelációs adatkezelés (ASP.NET)

MS ACCESS 2010 ADATBÁZIS-KEZELÉS ELMÉLET SZE INFORMATIKAI KÉPZÉS 1

Image Processor BarCode Service. Felhasználói és üzemeltetői kézikönyv

BarAck.Net. Internetes csomagkezel. Felhasználói kézikönyv V 1.0. (2011. július 20.)

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

Földmérési és Távérzékelési Intézet

Szoftver újrafelhasználás

Autóipari beágyazott rendszerek. Komponens és rendszer integráció

1. Beadandó feladat dokumentáció

Egyetemi könyvtári nyilvántartó rendszer

Az SQL*Plus használata

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

Junior Java Képzés. Tematika

A tananyag beosztása, informatika, szakközépiskola, 9. évfolyam 36

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

Szoftvertechnológia 1. előadás. A szoftverfejlesztési folyamat Giachetta Roberto groberto@inf.elte.hu

Információ és kommunikáció

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

Microsoft SQL Server telepítése

Object Orgy PROJEKTTERV 1 (9) Adattípusok menedzselése Palatinus Endre

Magas szintű adatmodellek Egyed/kapcsolat modell I.

Átírás:

Programozási technológia 2. Dr. Szendrei Rudolf ELTE Informatikai Kar 2018.

Objektumok, osztályok Az objektumorientált tervezés során a rendszert az objektumok mentén építjük fel, ahol az objektum a 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 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 meglehetősen nehézkes már az első fázis alapján beazonosítani a szükséges objektumokat, és azok felépítését. Ezért, minden fázisban bevezethetünk új osztályokat a beazonosított feladatokra tovább pontosítjuk 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 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 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 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) 6

A monolitikus architektúra A legegyszerűbb felépítést a monolitikus architektúra (monolithic architecture) adja nincsenek programegységekbe szétválasztva a funkciók a felületet megjelenítő kód vegyül az adatkezeléssel, a tevékenységek végrehajtásával, stb. alkalmazás felhasználó megjelenítés tevékenységek adatkezelés 7

1. esettanulmány: Marika néni kávézója 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 8

1. esettanulmány: Marika néni kávézója 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 9

1. esettanulmány: Marika néni kávézója 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 10

1. esettanulmány: Marika néni kávézója 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) 11

1. esettanulmány: Marika néni kávézója Pancake Orange Ufo Hamburger Item -items * Tea Coke Order -orders * Menu List 12

1. esettanulmány: Marika néni kávézója 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 JAVA-ban ehhez csak egy megfelelő List implementációt kell választanunk. 13

1. esettanulmány: Marika néni kávézója 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 14

1. esettanulmány: Marika néni kávézója Szerkezeti tervezés (3. fázis): a cím szerinti hivatkozásokat referenciákra képezzük le Java-ban 15

1. esettanulmány: Marika néni kávézója Szerkezeti tervezés (rendelések): Order Menu - orders : List<Order> + Menu() + Run() : void + LoadData() : void + SaveData() : void - WriteMainMenu() : void - WriteRatingsMenu() : void - AddOrder() : void - ShowRatingsForMonth(int, int) : void - ShowRatingsForCard(int) : void - ShowRatings() : void - ShowRatingsForDay() : void - ShowCurrentOrders() : void - CloseOrder(int) : void - orders {ValueType = Order} - cardnumber : int - items : List<Item> - number : int - date : Date + Order(int, int, Date) + AddItem(Item) : void + GetNumber() : int {query} + GetCardNumber() : int {query} + Items() : List<Item> {query} + GetNetValue() : int {query} + GetTotalValue() : int {query} + GetDate() : Date {query} - orders - items List {ValueType = Order} - items ValueType : class * Item 16

1. esettanulmány: Marika néni kávézója Szerkezeti tervezés (tételek): Coke + Coke() + GetTotalValue() : int {query} + GetType() : char {query} + GetName() : String {query} Tea + Tea() + GetTotalValue() : int {query} + GetType() : char {query} + GetName() : String {query} Orange Item + GetNetValue() : int {query} + GetTotalValue() : int {query} + GetType() : char {query} + GetName() : String {query} Hamburger - name : String - totalvalue : int + Hamburger() + GetTotalValue() : int {query} + GetType() : char {query} + GetName() : String {query} Ufo - name : String - totalvalue : int + Ufo() + GetTotalValue() : int {query} + GetType() : char {query} + GetName() : String {query} + Orange() + GetTotalValue() : int {query} + GetType() : char {query} + GetName() : String {query} Pancake - name : String - totalvalue : int + Pancake() + GetTotalValue() : int {query} + GetType() : char {query} + GetName() : String {query} 17

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, model-view) 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 18

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 adatelérés modell állapotkezelés 19

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) 20

Csomagdiagram A csomagdiagram (package diagram) célja a rendszer felépítése a logikai szerkezet mentén, azaz az egyes 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 21

Csomagdiagram használat (use): a csomag felhasznál egy másikat beágyazás (nesting): a csomag egy másiknak a része importálás (import): a csomag betölti a másikat összeillesztés (merge): a csomag tartalmazza, és kibővíti 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 22

2. esettanulmány: Memory kártyajáték 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 23

2. esettanulmány: Memory kártyajáték 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 24

2. esettanulmány: Memory kártyajáték Szerkezeti tervezés: Az alkalmazást modell/nézet 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ékos adatait (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) 25

2. esettanulmány: Memory kártyajáték 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 hogy mindig legyen legalább egy csomag kártya 26

2. esettanulmány: Memory kártyajáték Szerkezeti tervezés (csomagok): 27

2. esettanulmány: Memory kártyajáték Szerkezeti tervezés (modell): CardPack - name : String - faces : List<Image> - back : Image + CardPack(String) + getname() : String {query} + cardcount() : int {query} + getfaces() : List<Image> {query} + getback() : Image {query} + getface(int) : Image {query} - name : String - hits : int - misses : int - victories : int Player + Player(String) + newgame() : void + addhit() : void + addmiss() : void + addvictory() : void + getname() : String {query} + gethits() : int {query} + getmisses() : int {query} + getvictories() : int {query} - cardpacks 1..* - players 2 GameManager - cardpacks : List<CardPack> - players : List<Player> - currentnumcols : int - currentnumrows : int - currentcardpackindex : int - currentplayerindex : int - timer : Timer - cardfound : List<Boolean> - foundcards : int - cardids : List<Integer> - firstcardindex : int - secondcardindex : int + allcardpack() : List<CardPack> {query} + currentpack() : CardPack {query} + currentplayer() : Player {query} + firstplayer() : Player {query} + secondplayer() : Player {query} + GameManager() + loadpacks(string) : void + shufflecards() : void - hidecards() : void + newgame(int, int) : void + selectcard(int) : void + setcurrentpack(cardpack) : void + setplayers(string, String) : void 28

2. esettanulmány: Memory kártyajáték Szerkezeti tervezés (nézet): - configurationdialog ConfigurationDialog - cardpacks : List<CardPack> - cardlabels : List<JLabel> + ConfigurationDialog(List<CardPack>, JComponent) + firstplayername() : String + secondplayername() : String + numberofrows() : int + numberofcolumns() : int + selectedcardpack() : CardPack + loadsettings() : void + savesettings() : void + setfirstplayername(string) : void + setsecondplayername(string) : void + setnumberofrows(int) : void + setnumberofcolumns(int) : void + checkvalues() : void + changecardpack(int) : void + setmaxrows() : void + setmaxcolumns() void JDialog GameWidget - manager : GameManager - buttons : List<ImageButton> - isconfigured : boolean - configurationdialog : ConfigurationDialog + GameWidget(JComponent) + cardchanged(int, Image) : void + gameover(string) void + newgame() : void + configuregame() : void + buttonclicked() : void - image : Image - buttons 4..* MainWindow JButton ImageButton - newgameaction : Action - exitaction : Action + ImageButton(JComponent) + image() : Image {query} + setimage(image) : void + clearimage() : void # paintcomponent(graphics) : void JPanel 2 - gamewidget PlayerStatusWidget - player: Player + PlayerStatusWidget(JComponent) + setplayer(player) : void + refreshplayer() : void - configureaction : Action - gamemenu : JMenu - gamewidget : GameWidget + MainWindow(JComponent) + closewindow() : void JPanel JFrame 29

A szoftverrendszer Szoftvernek nevezzük a program(ok), dokumentáció(k), konfiguráció(k), valamint adatok együttesét 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) 30

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 érheti el 31

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 32

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 (classlibrary) végrehajtható állomány programkönyvtár programkönyvtár 33

Komponensdiagram A szoftverrendszer komponenseit UML komponensdiagram (component diagram) segítségével ábrázolhatjuk ismerteti a rendszer komponenseit, a szolgáltatott/elvárt interfészeket é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. interfész külön megjeleníthető) 34

Komponensdiagram Példa: asztali alkalmazás mobil alkalmazás webszolgáltatás weblap SQL adatbázis 35

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), amelyeken az egyes alkotóelemei (artifact) találhatóak <csomópont> <alkotóelem> <csomópont> <alkotóelem> 36

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ő 37

Telepítési diagram Példa: 38

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 adattervezé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 az adattervezés is megfelelő modellekkel rendelkezik (pl. adatbázisok tervezhetőek egyed-kapcsolati modellel, vagy UML adatmodellel) 39

1. esettanulmány: Marika néni kávézója 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 40

1. esettanulmány: Marika néni kávézója 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 41

1. esettanulmány: Marika néni kávézója Tervezés (adattárolás): 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 42

2. esettanulmány: Memory kártyajáték 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 JRE keretrendszer meglétét A program a kártyacsomagok képeit külön tárolja JRE 43

2. esettanulmány: Memory kártyajáték Tervezés (adattárolás): Kártyacsomagok megvalósítása: 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 44

3. esettanulmány: Utazási ügynökség Feladat: 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 helyezkednek el 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 vendégek számára biztosítsunk egy webes felületet, amelyen keresztül apartmanokat kereshetnek, foglalhatnak a munkatársak számára biztosítsunk egy alkalmazást, amelyben szerkeszthetik az apartmanok adatait, képeit, valamint kezelhetik a foglalásokat 45

3. esettanulmány: Utazási ügynökség 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 46

3. esettanulmány: Utazási ügynökség 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 JRE keretrendszer segítségével valósítjuk meg Az adminisztrációs kliens egy asztali alkalmazás, amelyet JRE keretrendszerben valósítunk meg, ezért a JRE virtuális gép futtatja A két alkalmazás közös adatokat használ, amelyeket relációs adatbázisban tárolunk, ehhez MySQL-t használunk 47

3. esettanulmány: Utazási ügynökség 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 MySQL-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 Java Spring keretrendszer segítségével valósítjuk meg 48

3. esettanulmány: Utazási ügynökség Tervezés (komponensek): 49

3. esettanulmány: Utazási ügynökség Tervezés (telepítés): JRE 50

3. esettanulmány: Utazási ügynökség Tervezés (adattárolás): 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 van-e; ügyfelek (customer): azonosító, név; 51

3. esettanulmány: Utazási ügynökség Tervezés (adattárolás): 52

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) 53

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. adattervezés (adattárolás, formátumok leírása) 54

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ó 55