tervezési minták és a php 5

32
Tervezési minták és a PHP 5 Nagy Gusztáv [email protected]

Upload: baxter

Post on 20-Mar-2016

108 views

Category:

Documents


0 download

DESCRIPTION

Tervezési minták és a PHP 5. Nagy Gusztáv [email protected]. 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 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Tervezési minták  és a PHP 5

Tervezési minták és a PHP 5

Nagy Gusztá[email protected]

Page 2: Tervezési minták  és a PHP 5

2

Ajánlott előismeretekAjánlott előismeretek

Programozási alapismeretekOsztály, objektum, öröklődésObjektumorientált tervezés

PHP4

Page 3: Tervezési minták  és a PHP 5

3

Miről lesz szó?Miről lesz szó?

Tervezési mintákról általábanNéhány egyszerűbb mintaEgy konkrét példa mintákra építve

(egy általános honlap motor)

PHP 5 OOP újdonságai

Page 4: Tervezési minták  és a PHP 5

4

Mi a tervezési minta?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

Page 5: Tervezési minták  és a PHP 5

5

Fontosabb mintákFontosabb minták

Page 6: Tervezési minták  és a PHP 5

6

Szerkezeti mintákSzerkezeti minták

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

Page 7: Tervezési minták  és a PHP 5

7

Összetétel mintaÖsszetétel minta

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

Page 8: Tervezési minták  és a PHP 5

8

Illesztő (Adapter) mintaIllesztő (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.

Page 9: Tervezési minták  és a PHP 5

9

Híd (Bridge) mintaHí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.

Page 10: Tervezési minták  és a PHP 5

10

Díszítő (Decorator) mintaDí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.

Page 11: Tervezési minták  és a PHP 5

11

Viselkedési mintákViselkedési minták

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

Page 12: Tervezési minták  és a PHP 5

12

Felelősséglánc mintaFelelő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?

Page 13: Tervezési minták  és a PHP 5

13

Megfigyelő (Observer) Megfigyelő (Observer) mintaminta

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.

Page 14: Tervezési minták  és a PHP 5

14

A Modell-View-A Modell-View-Controller minta Controller minta

Page 15: Tervezési minták  és a PHP 5

15

Miért jó szétválasztani?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űenAdatábrázolástól független felépítés

Page 16: Tervezési minták  és a PHP 5

16

1. verzió: 1. verzió: kapcsolatokkapcsolatok

<?phpclass 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

Page 17: Tervezési minták  és a PHP 5

17

2. verzió:2. verzió:kapcsolatok felépítése 1kapcsolatok felépítése 1

class Nezet { private $modell; function __construct( Modell & $modell) { $this->modell =& $modell; }}

•konstruktor neve•=&•paraméter típus

Page 18: Tervezési minták  és a PHP 5

18

2. verzió:2. verzió:kapcsolatok felépítése 2kapcsolatok 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();

Page 19: Tervezési minták  és a PHP 5

19

A Singleton (Egyke) mintaA 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.

Page 20: Tervezési minták  és a PHP 5

20

3. verzió:3. verzió:Egyke minta 1Egyke minta 1

class Vezerlo { private $modell; private $nezet; private function __construct() { $this->modell = new Modell(); $this->nezet = new Nezet ($this->modell); }

•privátkonstruktor

Page 21: Tervezési minták  és a PHP 5

21

3. verzió:3. verzió:Egyke minta 2Egyke 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

Page 22: Tervezési minták  és a PHP 5

22

A Factory (Gyár) mintaA 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.

Page 23: Tervezési minták  és a PHP 5

23

4. verzió: 4. verzió: Többalakúság és Gyár minta Többalakúság és Gyár minta

interface Modell { function alapNezet(); function & fejlec(); function & lablec(); function & tartalom(); function & balblokk(); function & jobblokk();}

•interfész

Page 24: Tervezési minták  és a PHP 5

24

4. verzió: modell4. verzió: modellclass 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ó

Page 25: Tervezési minták  és a PHP 5

25

4. verzió: nézet4. 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

Page 26: Tervezési minták  és a PHP 5

26

4. verzió: nézetek4. verzió: nézetekclass 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

Page 27: Tervezési minták  és a PHP 5

27

4. verzió: 4. verzió: vezérlő konstruktorvezé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.

Page 28: Tervezési minták  és a PHP 5

28

4. verzió: 4. verzió: vezérlő gyártás 1 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);...

Page 29: Tervezési minták  és a PHP 5

29

4. verzió: 4. verzió: vezérlő gyártás 2vezé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();

Page 30: Tervezési minták  és a PHP 5

30

ÖsszefoglalásÖsszefoglalásA 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!

Page 31: Tervezési minták  és a PHP 5

31

ForrásokForrásokProgramtervezési minták

http://www.kiskapu.hu(C++, Smalltalk)

PHP manual / Classes and Objects / Patternshttp://www.php.net/manual/hu/language.oop5.patterns.php

Page 32: Tervezési minták  és a PHP 5

32

ForrásokForrásokPaul A.J. Braam: Design Patterns

applied to Web Programming in PHPhttp://www.cs.vu.nl/~pajbraam/Essay_OOP.pdf

Core PHP Programming, Chapter 29http://www.phptr.com/content/images/0130463469/samplechapter/0130463469_ch29.pdf (letölthető minta fejezet)