Tervezési minták és a PHP 5

Slides:



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

„Esélyteremtés és értékalakulás” Konferencia Megyeháza Kaposvár, 2009
AZ OOP ALAPJAI.
C++ programozási nyelv Gyakorlat hét
Programozás III OOP ALAPOK.
Az MVC tervezési minta 2. előadás.
Programozás III KOLLEKCIÓK 2..
Programozás III FACTORY, KOMPOZÍCIÓ és EGYEBEK.
1Objektumorientált elemzés és tervezés – Dinamikus modellezés Gyurkó György Objektumorientált elemzés és tervezés Dinamikus modellezés.
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.
OBJEKTUMORIENTÁLT PROGRAM
Osztályok Garbage collection.  általában minden osztálynak vannak adattagjai és/vagy metódusai ◦ adattagok megadása:  [láthatóság] [static] [final]
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.
C# tagfüggvények.
6. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
5. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
6. Előadás Merevítő rendszerek típusok, szerepük a tervezésben
Darupályák tervezésének alapjai
1 Bevezetés a funkcionális programozásba 2009.
1Objektumorientált elemzés és tervezés - Alapfogalmak Gyurkó György Objektumorientált elemzés és tervezés Alapfogalmak.
Objektumorientált tervezés és programozás II. 3. előadás
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.
Objektum orientált programozás a gyakorlatban
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.
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.
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.
3. előadás.  Apache szerver tudnivalók  Az index.php .htaccess – web-szerverünk beállításai  Konfigurációs állományok  Adatbázis kapcsolódás beállítása.
Generics Krizsán Zoltán. Bemutató A.NET 2.0 verziótól. A.NET 2.0 verziótól. Típusparaméter Típusparaméter Más nyelvben ez a template (sablon). Más nyelvben.
Határozatlan integrál
Objektum orientált programozás
Objektumvezérelt rendszerek tervezése 4.óra – Composite, Decorator © Fülöp Lajos.
Objektumvezérelt rendszerek tervezése 9.óra – Builder, Observer © Nagy Csaba.
Adamkó Attila UML2 Adamkó Attila
HTML ÉS PHP (Nagyon) rövid áttekintés. ADATBÁZISRENDSZEREK MŰKÖDÉSI SÉMÁJA Felh. interakció DB Connector MySQL ? A gyakorlaton:
Webes alkalmazásfejlesztés
Objektumorientált alapjai ISZAM III.évf. részére Bunkóczi László.
Haladó C++ Programozás Programtervezési minták – alapok Sonkoly Balázs
1Objektumorientált elemzés és tervezés – Dinamikus modellezés Gyurkó György Objektumorientált elemzés és tervezés Dinamikus modellezés.
5. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.
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.
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.
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.
Strukturális tervezési minták
Programtervezési minták
UML használata a fejlesztésben, illetve a Visual Studio 2010-ben
„Designer-barát” játéklogika
Viselkedési minták Behavioral patterns.
Beépített függvények használata programozáskor
Operációs rendszerek.
Hernyák Zoltán Programozási Nyelvek II.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Előadás másolata:

Tervezési minták és a PHP 5 Nagy Gusztáv nagy.gusztav@gamf.kefo.hu

Ajánlott előismeretek Programozási alapismeretek Osztály, objektum, öröklődés Objektumorientált tervezés PHP4

Miről lesz szó? Tervezési mintákról általában Néhány egyszerűbb minta Egy konkrét példa mintákra építve (egy általános honlap motor) PHP 5 OOP újdonságai

Mi a tervezési minta? Objektumközpontú szerkezet, amely a gyakorlatban bevált módszerek újrafelhasználását teszi lehetővé. Valaki egyszer leírta, én meg felhasználom 

Fontosabb minták

Szerkezeti minták Hogyan alkothatunk meg nagyobb szerkezeteket, hogyan tudjuk összekapcsolni az osztályokat, objektumokat magasabb szintű szolgáltatást nyújtó egységekké.

Összetétel minta Faszerkezet építése 2 féle objektumból: primitív és összetett objektumból.

Illesztő (Adapter) minta Adott osztály felületét az ügyfelek által igényelt felületté alakítja. E nélkül a szolgáltatást nyújtó és igénybevevő osztályok nem tudnának kapcsolódni az interfészek különbözősége miatt.

Híd (Bridge) minta Az elvont ábrázolást (interfészt) elválasztja a megvalósítástól, hogy a kettő egymástól függetlenül módosítható legyen. Egyszerű példa: ha halmaz-szerű műveleteket akarunk végezni, ne drótozzuk a kódba egy láncolt listát, lehet, hogy később kiegyensúlyozott keresőfa lesz belőle.

Díszítő (Decorator) minta Az objektumokhoz dinamikusan további felelősségi körök rendelhetők. Példa: ablak kiegészítése görgetősávval.

Viselkedési minták Algoritmusok és felelősségi körök objektumokhoz rendelése áll a középpontban.

Felelősséglánc minta Egy kérelem lehetséges címzettjeit sorba állítja, amelyen a kérelem addig halad, amíg valamelyik objektum nem tudja kezelni a kérést. Példa: Grafikus alkalmazás esetén billentyűleütés, vagy egérművelet történt. Melyik komponens fog reagálni?

Megfigyelő (Observer) minta Gondoskodni kell a kapcsolatban álló objektumok következetességének fenntartásáról úgy, hogy ne legyen túl szoros ez a kapcsolat. Megoldás: a megfigyelő a megfigyeltnél regisztrálja magát, így a megfigyelt tudja, kiket kell értesíteni esemény bekövetkezésekor.

A Modell-View- Controller minta

Miért jó szétválasztani? Bármelyiket könnyen lecserélhetem, a többit nem kell változtatni. Webfejlesztésben: Különböző nézetek kiszolgálása egyszerűen Adatábrázolástól független felépítés

1. verzió: kapcsolatok <?php class Modell { } class Nezet { private $modell; } class Vezerlo { private $modell; private $nezet; } $modell = new Modell(); $nezet = new Nezet(); $vezerlo = new Vezerlo(); ?> osztály objektum példányosítás adatelrejtés

2. verzió: kapcsolatok felépítése 1 class Nezet { private $modell; function __construct( Modell & $modell) { $this->modell =& $modell; } } konstruktor neve =& paraméter típus

2. verzió: kapcsolatok felépítése 2 class Vezerlo { private $modell; private $nezet; function __construct() { $this->modell = new Modell(); $this->nezet = new Nezet ($this->modell); } } $vezerlo = new Vezerlo();

A Singleton (Egyke) minta Garantálja, hogy az osztályból csak egy példányt lehessen létrehozni. pl. a Vezerlo osztályból véletlenül sem tudunk több példányt létrehozni.

3. verzió: Egyke minta 1 class Vezerlo { private $modell; private $nezet; private function __construct() { $this->modell = new Modell(); $this->nezet = new Nezet ($this->modell); } privát konstruktor

3. verzió: Egyke minta 2 private static $peldany = null; public static function & peldanyosit() { if ( self::$peldany == null) self::$peldany = new Vezerlo(); return self::$peldany; } } $vezerlo = Vezerlo::peldanyosit(); statikus függvény, adattag self

A Factory (Gyár) minta Három rokon minta: Abstract Factory (Elvont gyár), Builder (Építő) és Factory Method (Gyártó függvény) Az objektumok példányosítását rugalmasan kezeljük: csak futás közben derül ki, melyik osztály példánya lesz.

4. verzió: Többalakúság és Gyár minta interface Modell { function alapNezet(); function & fejlec(); function & lablec(); function & tartalom(); function & balblokk(); function & jobblokk(); } interfész

4. verzió: modell class hierMenuModell implements Modell { function alapNezet() { // itt adatbázisból kellene kiolvasni return "Alap"; } function & fejlec() { //... } function & lablec() { //... } function & tartalom() { //... } function & balblokk() { //... } function & jobblokk() { //... } } implementáció

4. verzió: nézet abstract class Nezet { private $modell; function __construct(Modell & $modell) { $this->modell =& $modell; } abstract function mutat(); } absztrakt függvény absztrakt osztály

4. verzió: nézetek class AlapNezet extends Nezet { function mutat() { echo "<html><body>„ echo "ok.</body></html>"; } } class NyomtatasNezet extends Nezet { function mutat() { echo "<html><body>„ echo "nyomtat...</body></html>"; } } öröklődés

4. verzió: vezérlő konstruktor class Vezerlo { private $modell; private $nezet; private function __construct( Modell & $modell, Nezet & $nezet) { $this->modell =& $modell; $this->nezet =& $nezet; } … Már nem a példányosítás a konstruktor feladata.

4. verzió: vezérlő gyártás 1 public static function & gyart( $modelltip, $nezettip, $vezerlotip) { if ( self::$peldany == null) { $modellosztaly = $modelltip."Modell"; $modell = new $modellosztaly(); if ( (!isset($nezettip)) || (strlen($nezettip) == 0) ) $nezettip = $modell->alapNezet(); $nezetosztaly = $nezettip."Nezet"; $nezet = new $nezetosztaly($modell); ...

4. verzió: vezérlő gyártás 2 $vezerloosztaly = $vezerlotip."Vezerlo"; self::$peldany = new $vezerloosztaly($modell,$nezet); } // if ( self::$peldany == null) vége return self::$peldany; } ... } $vezerlo = Vezerlo::gyart("hierMenu", "", "alap"); $vezerlo->mutat();

Összefoglalás A kezdő programozó arra büszke, hogy az egész kódot ő írta. A profi arra, hogy a kódjának nagy része újra felhasznált. Nem szégyen, sőt hasznos mások ötleteit ellesni tervezési szinten is. A tervezési mintákat pont ezért írják le az okosok. Kellemes tanulást kívánok!

Források Programtervezési minták http://www.kiskapu.hu (C++, Smalltalk) PHP manual / Classes and Objects / Patterns http://www.php.net/manual/hu/language.oop5.patterns.php

Források Paul A.J. Braam: Design Patterns applied to Web Programming in PHP http://www.cs.vu.nl/~pajbraam/Essay_OOP.pdf Core PHP Programming, Chapter 29 http://www.phptr.com/content/images/0130463469/samplechapter/01 30463469_ch29.pdf (letölthető minta fejezet)