Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
1
Tervezési minták és a PHP 5
Nagy Gusztáv
2
Ajánlott előismeretek
Programozási alapismeretek Osztály, objektum, öröklődés Objektumorientált tervezés PHP4
3
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
4
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
5
Fontosabb minták
6
Szerkezeti minták Hogyan alkothatunk meg nagyobb szerkezeteket, hogyan tudjuk összekapcsolni az osztályokat, objektumokat magasabb szintű szolgáltatást nyújtó egységekké.
7
Összetétel minta Faszerkezet építése 2 féle objektumból: primitív és összetett objektumból.
8
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.
9
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.
10
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.
11
Viselkedési minták Algoritmusok és felelősségi körök objektumokhoz rendelése áll a középpontban.
12
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?
13
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.
14
A Modell-View- Controller minta
15
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
16
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
17
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
18
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();
19
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.
20
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
21
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
22
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.
23
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
24
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ó
25
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
26
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
27
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.
28
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); ...
29
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();
30
Ö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!
31
Források Programtervezési minták (C++, Smalltalk) PHP manual / Classes and Objects / Patterns
32
Források Paul A.J. Braam: Design Patterns applied to Web Programming in PHP Core PHP Programming, Chapter _ch29.pdf (letölthető minta fejezet)
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.