Swedish store (C#) Óbudai Egyetem, Programozás 2 Mérnök Informatikus szak, BSc Labor. Bedők Dávid 2013.03.05. v0.1



Hasonló dokumentumok
C++ programozási nyelv

C++ programozási nyelv

és az instanceof operátor

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

Interfészek. PPT 2007/2008 tavasz.

Objektumorientált programozás C# nyelven

Már megismert fogalmak áttekintése

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

Bevezetés a Python programozási nyelvbe

Java programozási nyelv 5. rész Osztályok III.

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

Programozási alapismeretek 4.


Objektumorientált programozás C# nyelven

Bevezetés a programozásba előadás: Öröklődés

Adatbázis rendszerek I

Programozás III. - NGB_IN001_3

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

JAVA PROGRAMOZÁS 2.ELŐADÁS

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

Programozási nyelvek Java

Objektumorientált paradigma és a programfejlesztés

OOP #14 (referencia-elv)

.Net adatstruktúrák. Készítette: Major Péter

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

Programozási technológia

Láncolt lista Bináris keresőfa Gráf Hasító táblázat. Programozás II. labor 2. rész (Adatszerkezetek)


Programozás módszertan p.1/46

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

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

C#, OOP. Osztályok tervezése C#-ban

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

Programozás III KIINDULÁS. Különböző sportoló típusok vannak: futó, magasugró, focista, akik teljesítményét más-más módon határozzuk meg.

Programozás II gyakorlat. 6. Polimorfizmus

Absztrakció. Objektum orientált programozás Bevezetés. Általános Informatikai Tanszék Utolsó módosítás:

Nagy HF u tmutato 2011/2012 II. fe le v


Globális operátor overloading

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

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

Programozási nyelvek Java

Lakóház tervezés ADT 3.3-al. Segédlet

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

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

ABAP dictionary objektumok SAP adatmodell Táblák kezelése. Az SAP programozása 1. Tarcsi Ádám

Programozás 1. 2.gyakorlat

Programozási nyelvek II.: JAVA

Csoportosítsd a szövegben található szavakat! / Group the words according to the text.

ELTE SAP Excellence Center Oktatóanyag 1

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

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

Adatbázis rendszerek. 4. előadás Redundancia, normalizálás

Fordított és szkript nyelvek összehasonlító elemzése. Sergyán Szabolcs

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

Objektumorientált paradigma és programfejlesztés Bevezető

Szakköri segédanyag. Írta: Bátfai Norbert október 26.

Adatbázis, adatbázis-kezelő

Generikus Típusok, Kollekciók

DEKORTECH STÚDIÓ. szolnok tiszaligeti sétány 85 nm-es lakás lakberendezési tervezése

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

OOP. #6 (VMT és DMT) v :33:00. Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj.

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök

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

A DOLLÁROS PIZZA TÖRTÉNETE, AVAGY MENNYIT ÉR A BITCOIN?

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Programozás alapjai II. (7. ea) C++

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

KONSZIGNÁCIÓ - NyTkNc0Dps7K7aTb

Programozás. C++ osztályok. Fodor Attila. Pannon Egyetem Műszaki Informatikai Kar Villamosmérnöki és Információs Rendszerek Tanszék

Adatszerkezetek 2. Dr. Iványi Péter

Hogyan válasszunk ki egy teljesen masszív tölgyfa ágyat? Hogyan válasszunk ki egy. teljesen masszív bükk ágyat? Tölgyfa ágyak.

DL KÜLTÉRI ,-EUR 129,-EUR 89,-EUR. DL MALA/ P. DL / MALAGA TABLE 80x80. DL GOA szék

Programozási nyelvek Java

PHP5 Új generáció (2. rész)

OOP. Alapelvek Elek Tibor

RESIDENT EVIL CODENAME: NIK

Multimédiás adatbázisok

Objektum orientált programozás Bevezetés

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

Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba

Teljesítmény Mérés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Teljesítmény Mérés / 20

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

500. AA Megoldó Alfréd AA 500.

DL KÜLTÉRI ,-EUR 129,-EUR 89,-EUR. DL MALA/ P. DL / MALAGA TABLE 80x80. DL GOA szék

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

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

Adatbázisok az iskolában 2012 Adatmodellezés. Dr. Balázs Péter

,Raktár bútorcsoport árlista

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

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

THM. BUTOR ,- 10% kedvezmény ,- /db ,- Mert szeretem. /db

Adatbázis alapú rendszerek

CSOPORTSZOBA III. 2 BD55793 Fektetőágy tároló. 2 BD Görgős műanyag tároló - 9 fiókos. 2 FA_1532 Fogmosópohár tartó, fogassokkal

Programozási nyelvek Java

NORMALIZÁLÁS. Funkcionális függés Redundancia 1NF, 2NF, 3NF

C# versus Java. Óbudai Egyetem, Java Standard Edition Mérnök Informatikus szak, BSc Labor 3. Bedők Dávid v0.4

Átírás:

Swedish store (C#) Óbudai Egyetem, Programozás 2 Mérnök Informatikus szak, BSc Labor Bedők Dávid 2013.03.05. v0.1

Feladat A Swedish store alkalmazás egy bútoráruházat szeretne modellezni*. Az alkalmazás azért jöhet létre, mert: az áruház vezetése szeretne sok pénzt keresni a vevőket ki kell tudni szolgálni annak érdekében, hogy a vezetők sok pénzt kereshessenek * szimulációs alkalmazás, melynek kiemelt célja, hogy valós üzleti problémát járjon körbe, azonban számos ponton egyszerűsítéseket tartalmaz, hogy az elméleti anyag maradhasson hangsúlyos

Kezdeti követelmények Három különféle típusú bútort szeretnénk eladni a vevőknek. A vevők pontos kiszolgálása érdekében a következő adatokat szeretnénk tárolni minden egyes bútorról: milyen szobába való elsődlegesen (pl. Konyha, Fürdőszoba, Kamra, Előszoba, stb.) milyen anyagból készült elsődlegesen (pl. Tölgyfa, Bükkfa, Műanyag, Fém, stb.) milyen dimenziókkal rendelkezik (szélesség, magasság, mélység/hosszúság) mennyibe kerül EUR valutában bútor fántázia neve, mely a könnyebb azonosíthatóságot segíti (egyediségét nem kell ellenőrizni, de érdemes különböző neveket választani tesztelésnél)

Asztalokról tárolt további adatok hozzá adott székek száma (tételezzük fel, hogy ezek benne vannak az árban, vagyis ha nincsenek benne az árban, akkor értéke 0) karcálló az asztal, avagy nem? összecsukható kisebb méretűre, avagy nem?

Ágyakról tárolt további adatok milyen matrac tartozik hozzá (pl. Antiallergén, Komfortos, Egészséges, stb.) egyszemélyes avagy franciaágy? összecsukható kisebb méretűre, avagy nem? beépített lámpával rendelkezik-e, avagy sem?

Szekrényekről tárolt további adatok hány darab polccal rendelkezik? milyen típusú ajtó van rajta (pl. Kétszárnyú, Toló, Redőny, stb.) van-e rajta tükör, avagy nincs? beépített lámpával rendelkezik-e, avagy sem?

Kezdeti modell A követelmények elég jól vezetik azt, hogy a bútorokról tárolt közös adatokat egy közös ős osztályban érdemes tárolni, hiszen a redundancia csökkentése kiemelten fontos szempont, és természetesen a cég vezetése szempontjából csak "bútorok" vannak, őket különösebben nem érdekli hogy milyen tételek eladásából van a profit (ez nyilván azért nem így van a valóságban, de a modellben igen!)

Osztály diagram Megj.: a jelölt interface-ekkel most ne foglalkozzunk (később visszatérünk majd ehhez)

Probléma Az ősosztály nem tud megoldást adni minden redundancia eltűntetésére. Vannak olyan tulajdonságok, melyek újabb köztes ős osztály létrehozását sugallják, azonban többszörös öröklés nélkül ezt nem tudjuk megvalósítani minden irányból! Ezért a középső osztályszintet nem vezetjük be, és a redundancia alkalmazásánál maradunk.

Szükséges elméleti ismeretek Programozás 1... Nem virtuális metódusok kontra virtuális metódusok Korai-késői kötés Virtuális metódus tábla Absztrakt osztályok Absztrakt metódusok

Áruház Egy halom bútor és elérhető raktármennyiség tárolása egységesen egy áruház osztály példányaként reprezentálva. Eleddig nem tanult generikus típus alapvető bevezetése itt előnyös: Dictionary<Key, Value> A generikus típusok elméletét későbbre tartogatjuk (ez komolyabb anyag), egyelőre csak a fenti típus felhasználásával ismerkedjünk meg!

Követelmények az áruházzal kapcs. Új árucikk felvétele Név alapján árucikk keresése Új árucikk érkeztetése (név alapján meglévő kikeresése, és új beérkezett mennyiség raktárkészlethez csatolása) Számos keresési feltétel szerint bútorok listájának előállítása az érdeklődő vevők számára Árucikk eladása

Probléma Egy Dictionary-ban minden egyes Kulcs csak egyszer szerepelhet, azonban az csak "félmegoldás", ha a név alapján egyezőnek tekintünk két bútort, nem beszélve arról, hogy mindez az alkalmazásnak nem lesz két azonos bútor (két azonos névvel (sőt adatokkal) rendelkező bútor duplikálva is megjelenhet jelenleg a szótárban! Megoldás: overload Equals(), GetHashCode() Object-ből, esetleg overload == és!= operátor

Feladat Size osztályban Equals() és GetHashCode() metódusok felülírása (általános eset) AbstractFurniture osztályban Equals és GetHashCode() metódusok felülírása (speciális eset: egy objektum sosem lehet "csak AbstractFurniture") Leszármazott bútor osztályokban Equals() és GetHashCode() metódusok felülírása Equals: reflexív, szimmetrikus, tranzitív, konzisztens, null biztos GetHashCode: konzisztens, Equals true esetén a hashcode-ok azonosak (fordítva nem igaz!)

Probléma Vevői igény: melyik bútorok csukhatók össze kisebb méretűre? Erre jelenleg nem tudunk válaszolni.. az ágyak és az asztalok lehetnek "compact"-ok, viszont ezt csak ronda beégetéssel tudánk lekezelni, ami karbantarthatatlan kódot eredményez Megoldás: interface-ek bevezetése

Feladat interface CompactSizeCapable (Bed, Table) interface BuiltInLampCapable (Bed, Wardrobe) Generikus List<Item> használata List<AbstractFurniture> listallcompactsizecapablefurniture() metódus a Store osztályban

Új üzleti igény A profit növelése érdekében a cég vezetése mostantól kiegészítőket is szeretne árusítani, de a jelenlegi osztályokat a már megvalósult integráció miatt (bla, bla... sosem késő refaktorálni..) nem módosíthatjuk! Az új termékeknek is egy céljuk van: profit termelése, vagyis hogy el lehessen őket adni. Vezessük be az új osztályt, és a közös viselkedést a bútorokkal!

Feladat interface Salable class AbstractMarketGood : Salable class Lamp : AbstractMarketGood class DinnerwareSet : AbstractMarketGood

Áruház refaktorálása Új típus: Dictionary<Salable, Int32> Gyakorlatilag mindenhol csak az AbstractFurniture-t kell kicserélni Salable-re. A Salable interface által definiált viselkedés valójában nem más, mint a Store osztályból hívott nyílvános AbstractFurniture metódusok listája!

Kérdések?