Programozás III FACTORY, KOMPOZÍCIÓ és EGYEBEK.

Slides:



Advertisements
Hasonló előadás
Osztály leszármaztatás
Advertisements

Krizsán Zoltán iit 1.1.  Aszinkron történésről értesítés egy vagy több objektum számára.  Delegátumok segítségével valósítja meg a C#.  event típus,
Tervezési minták és a PHP 5
Programozás III STRING-XML.
C++ programozási nyelv Gyakorlat hét
Programozás III OOP ALAPOK.
Programozás III KOLLEKCIÓK 2..
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Adatbányászati technikák (VISZM185)
Öröklődés 2..
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Csala Péter ANDN #4. 2 Tartalom  C# - ban előre definiált típusok  Változók  Változókkal műveletek  Elágazás  Ciklus.
Osztályok Garbage collection.  általában minden osztálynak vannak adattagjai és/vagy metódusai ◦ adattagok megadása:  [láthatóság] [static] [final]
Vizuális modellezés Uml és osztálydiagram UML eszközök
Abstract osztályok és interface-ek Beolvasás és kiíratás 7. gyakorlat.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 7. Gyakorlat Operator overloading.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 5. Gyakorlat Öröklődés, virtuális függvények,
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Tömbök ismétlés Osztályok Java-ban Garbage collection
Az objektum-orientált tervezési alapelvek kritikai vizsgálata
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
Java programozási nyelv 3. rész – Osztályok I.
A C++ programozási nyelvSoós Sándor 1/12 C++ programozási nyelv Gyakorlat - 8. hét Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet.
Java programozási nyelv 5. rész – Osztályok III.
C# tagfüggvények.
C# tagfüggvények.
Web-grafika (VRML) 10. gyakorlat Kereszty Gábor. Script típusok Elemi típusok: szám: egész vagy lebegőpontos – int / float – 1 / 1.1 string: ‘Hello World!’
© Kozsik Tamás Csomagok. © Kozsik Tamás A program tagolása Típusdefiníciók (osztályok, interfészek) Metódusok Blokk utasítások Csomagok.
A JAVA TECHNOLÓGIA LÉNYEGE Többlépcsős fordítás A JAVA TECHNOLÓGIA LÉNYEGE Platformfüggetlenség.
Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék
Objektumorientált tervezés és programozás II. 3. előadás
HEFOP 3.3.1–P /1.01 Az OOP elve A programozási paradigma (vagy elv) a számítógépes programok tervezésének és programozásának módszerét jelenti.
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
A PHP 5 újdonságai Az OOP terén. Miről lesz szó? Osztályok kezelése – Új direktívák – Konstruktor – Destruktor Interfészek Kivételkezelés.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
Java programozási nyelv Metódusok
1 Objektum orientált programozás Struktúrák és objektumok gyakorlat Nagy Szilvia.
1 Objektum orientált programozás Öröklődés: többszörös öröklődés, konstruktorok, destruktorok, overloading Nagy Szilvia.
Objektumvezérelt rendszerek tervezése 4.óra – Composite, Decorator © Fülöp Lajos.
Objektumvezérelt rendszerek tervezése
Programozás III OOP ALAPOK.
Objektumvezérelt rendszerek tervezése 5.óra – Singleton, Visitor, Abstract Factory © Nagy Csaba.
Programozás III KOLLEKCIÓK.
HTML ÉS PHP (Nagyon) rövid áttekintés. ADATBÁZISRENDSZEREK MŰKÖDÉSI SÉMÁJA Felh. interakció DB Connector MySQL ? A gyakorlaton:
Objektumorientált alapjai ISZAM III.évf. részére Bunkóczi László.
Ficsor Lajos CPP2 / 1 Származtatási mechanizmus a C++ nyelvben Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék.
Haladó C++ Programozás Programtervezési minták – alapok Sonkoly Balázs
1 Objektum orientált programozás Az objektumok és az osztályok – példányosodás Nagy Szilvia.
Programozás I. 3. gyakorlat.
Objektum orientált programozás 4. Mutatók, típusok és struktúrák Nagy Szilvia.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 6. gyakorlat.
Programozás III ÖTLETEK A FELADATMEGOLDÁSHOZ. A HF-EK APROPÓJÁN Néhány javaslat: 1. Jó lenne, ha a feladatmegoldás előtt átnéznék az előadás-anyagokat.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Programozás III JPA.
Krizsán Zoltán, iit C# osztályok 2 Adattagok  Osztály hatáskörben definiált változó.  Formája: [attribútum] [módosító] típus azonosító [=kezdő érték][,
A szoftver mint komplex rendszer: objektumorientált megközelítés.
Programtervezési minták
A C++ programozási nyelv
Web programozás és haladó fejlesztési technikák – C#
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Előadás másolata:

Programozás III FACTORY, KOMPOZÍCIÓ és EGYEBEK

futó, magasugró, focista, 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. Az egyszerűség kedvéért mindegyiket a nevük alapján regisztráljuk, és egy kérdésre adott válaszként dől el, hogy milyen sportágat űznek.

MEGOLDÁSRÉSZLET Vezérlő osztály:

FONTOS ÉSZREVÉTEL if(sportag == 1) { név bekérése; szül_év bekérése; szem_szám bekérése; az ugró létrehozása; } if(sportag == 2) { az focista létrehozása; if(sportag == 3) { név bekérése; szül_év bekérése; szem_szám bekérése; az futó létrehozása } Egy jó programban NINCS kódismétlés!!!

MEGOLDÁSRÉSZLET Kevésbé „fapadosan”: egy újabb osztály közbeiktatásával

FACTORY Ez az ú.n. „gyártó függvény” (Factory Method) tervezési minta. A minta célja: egy objektum létrehozása különböző információk alapján. bemeneti információ: az abc. Ez alapján a gyártófüggvény az x ősosztály valamelyik leszármazottját (xy vagy xz) példányosítja. A getClass hívására létrejövő objektum tényleges típusáról többnyire nem is kell tudnia a felhasználónak.

A PÉLDA MEGOLDÁSA FACTORY-VAL Vezérlő osztály:

ELEGÁNS MEGOLDÁS Még kevésbé „fapadosan” Javasolt felépítés: – interface (esetleg extends Comparable) – az interface-t implementáló abstract osztály – az abstract osztályt kiterjesztő további osztályok

TERVEZÉSI MINTÁK Gyakran előfordul, hogy a fejlesztés során hasonló feladatokat kell megoldani. A tervezési minták olyan objektum alapú megoldásokat, megoldásvázlatokat jelentenek, amelyek már bizonyítottak a gyakorlatban, és amelyeket érdemes felhasználni a saját tervezés során. Ezek felhasználásával rugalmasabb, könnyebben újra-hasznosítható, módosítható alkalmazásokat készíthetünk.

TERVEZÉSI MINTÁK CSOPORTOSÍTÁSA

TERVEZÉSI MINTÁK Létrehozási minták célja: Az objektumok létrehozása során speciális igényeket is ki lehessen elégíteni. Szerkezeti minták célja: Annak leírása, hogy hogyan lehet komplexebb struktúrákat létrehozni; jól használható program felületet nyújtó öröklési hierarchiát kialakítani; az objektumok összeillesztésének módját meghatározni.

TERVEZÉSI MINTÁK Viselkedési minták célja: Az objektumok egymás közti kommunikációjának segítése. Annak, aki programozói állást szeretne: Erich Gamma, Ralph Johnson, Richard Helm, John Vlissides: Programtervezési minták (Kiskapu kiadó) Rövidke kedvcsináló bevezető: Nagy Gusztáv: Java programozás http://nagygusztav.hu/java-programozas

A BANKOS FELADAT ÜGYESEBBEN Probléma: Ha az 5 fül 5 különböző panel-osztály, akkor állandóan át kell adogatni egymásnak a bankkártyák listáját. Megoldás: a/ statikus változó b/ singleton tervezési minta

SINGLETON (EGYKE) TERVEZÉSI MINTA Olyankor alkalmazható, amikor garantáltan egyetlen példányt akarunk létrehozni az osztályból. (Rugalmasabb, mint a statikus változó, mert bővíthető.)

SINGLETON (EGYKE) TERVEZÉSI MINTA Használata:

SINGLETON A BANKOSHOZ HASONLÓ PÉLDÁBAN vagy: Ekkor mindent implementálnunk kell.

SINGLETON A BANKOSHOZ HASONLÓ PÉLDÁBAN Használata:

MÁSIK PÉLDA Vannak vonatok. Minden vonatot jellemez egy egyedi azonosító, a kezdőállomása, végállomása, indulási ideje. Az állomások a nevükkel és koordinátáikkal adhatók meg. A vonat konstruktorának paraméterei: Az indulási időn kívül két Varos típusú objektum, ahol Varos egy olyan osztály, amely leírja egy város tulajdonságait, pl. a város nevét, földrajzi koordinátáit. Vagyis NEM string varosNev, int x, int y ! (hasonlóan a celebes példához)

OBJEKTUM KOMPOZÍCIÓ Az objektumorientált programozás magasabb lépcsőfoka, melynek lényege, hogy olyan osztályokat hozunk létre, melyek más osztályokkal paraméterezhetőek. Így olyan építőelemeket tudunk kialakítani, amelyeket jól kombinálhatunk egymással, és eltérő variációikkal eltérő működést érhetünk el. Pl: public class Vonat(){ private Varos induloAllomas, celAllomas; public Vonat(Varos idulo, Varos cel){ this.induloAllomas = indulo; …} …. }

KOMPOZÍCIÓ ÁLTALÁBAN Objektumok közötti tartalmazási reláció: gyenge tartalmazás: a rész kivehető az egészből erős tartalmazás: a rész nem vehető ki az egészből, a tartalmazó nem létezhet a tartalmazott nélkül aggregáció kompozíció Kompozíció: nem távolítható el a benne lévő obj., mert különben a külső is megsemmisülne.

KOMPOZÍCIÓ vs ÖRÖKLÉS class GyorsuloMozgas extends Mozgas{ private int gyorsulas; public GyorsuloMozgas(String haladasiIrany, int sebesseg) { super(haladasiIrany, sebesseg); } … A meglévő osztály bővítése helyett adjunk az új osztályhoz egy privát mezőt, ami a meglévő osztály egy példányára hivatkozik. Ez kompozíció, mert a meglévő osztály az új osztály egy komponensévé válik.

class GyorsuloMozgas { KOMPOZÍCIÓ vs ÖRÖKLÉS class GyorsuloMozgas { private int gyorsulas, sebesseg; private String haladasiIrany; private Mozgas m ; public GyorsuloMozgas(int gyorsulas, int sebesseg, String haladasiIrany) { this.gyorsulas = gyorsulas; this.sebesseg = sebesseg; this.haladasiIrany = haladasiIrany; m = new Mozgas(haladasiIrany,sebesseg); } public String irany() { return m.irany().haladasiIrany; … delegálás (továbbítás) – delegált metódus

kompozíció vs öröklődés, KOMPOZÍCIÓ vs ÖRÖKLÉS Úgy tűnik, hogy a kompozíció helyettesítheti az öröklést, de mégsem az a fő kérdés, hogy kompozíció vs öröklődés, hanem az, hogy egy adattag primitív típus-e, vagy objektum Pl.: class Jarmu{ private Motor m; public Jarmu(Motor m){ this.m = m; }

KOMPOZÍCIÓ vs ÖRÖKLÉS Javaslatok: Csak akkor használjunk öröklődést, ha egészen biztosak vagyunk benne, hogy az alkalmazás egész életciklusában „is a” (ez egy…) kapcsolat van, és ez meg is marad a két osztály között. Pl: személy – alkalmazott az alkalmazott egy szerep, amit a személy játszik; mi van, ha munkanélkülivé válik? mi van, ha egyszerre főnök is és alkalmazott is?

KOMPOZÍCIÓ vs ÖRÖKLÉS Javaslatok: Ne használjunk öröklést, ha kizárólag a kódismétlés elkerülése vagy a polimorfizmus a cél, és nincs tényleges „is a” kapcsolat az osztályok között. esetben sima kompozíció esetben interfészekkel megtámogatott kompozíció De mindez csak a „vájt fülűekre” vonatkozik, azokra, akik már ragyogóan tudják az öröklődést és tényleg különbséget tudnak tenni a kettő között!!

MÉG EGY PÉLDA Vannak hengerek, rudak, csövek – definiáljuk az osztályokat kompozíció segítségével, és teszteljük egy-egy példánnyal. Megoldás: witch\eloadasok\peldak\HengerCsoKompozicioval

NÉHÁNY IRODALOM http://www.artima.com/designtechniques/compoinh3.html http://www.javaworld.com/javaworld/jw-11-1998/jw-11-techniques.html http://www.javaworld.com/javaworld/jw-06-2001/jw-0608-java101.html http://www.javaworld.com/javaworld/jw-12-1998/jw-12-techniques.html?page=3 Google 