návrhové vzory v programování

17
Návrhové vzory v programování Jan Tichý WebCamp, 27. března 2008

Upload: medio-interactive-sro

Post on 28-Jun-2015

1.572 views

Category:

Documents


9 download

TRANSCRIPT

Page 1: Návrhové vzory v programování

Návrhové vzory v programování

Jan TichýWebCamp, 27. března 2008

Page 2: Návrhové vzory v programování

Program přednášky

Co jsou návrhové vzory

Typy návrhových vzorů

Příklady konkrétních návrhových vzorů

Literatura a elektronické zdroje

Page 3: Návrhové vzory v programování

Co jsou návrhové vzory

• Obecné řešení častého problému při návrhu software

• Explicitně pojmenované obecné principy, které programátoři intuitivně dávno znají

• Návrhové vzory × algoritmy × knihovny

Page 4: Návrhové vzory v programování

Proč používat návrhové vzory

• Podporují správné programátorské postupy• Podporují principy čistého OOP• Nevymýšlíte již vymyšlené• Rozšiřitelnost a znovupoužitenost aplikace• Čitelnost aplikace, jednotná filozofie

Page 5: Návrhové vzory v programování

Typy návrhových vzorů

• Creational patterns – Factory, Singleton, Builder, Prototype, Object Pool...

• Structural patterns – Adapter, Bridge, Composite, Decorator, Facade...

• Behavioral patterns – Chain of Responsibility, Iterator, Observer, Strategy, Template Method...

• Architectural patterns – MVC,

• Concurrency patterns – Read Write Lock...

Page 6: Návrhové vzory v programování

Factory Method

instance se nezískává přes konstruktor, ale nepřímo pomocí statické metody

metoda může vracet i již existující instanci

nejsme vázáni konkrétní třídou instance

v obecnějším pojetí deklaruje jen rozhraní, konkrétní typy instance určují potomci

často využívána v rámci ostatních vzorů

Page 7: Návrhové vzory v programování

Singleton

v aplikaci nejvýše jedna instance nějaké třídy

typicky instance aktuálního uživatele

například Zend_Auth, Zend_Registry, Zend_Controller_Front, pooly, cache apod.

využívá Factory Method

konstruktor, klonování, serializovatelnost

z puristického hlediska není úplně čistý

Page 8: Návrhové vzory v programování

Singleton: proč objekt a nikoliv třída

objekt může implementovat rozhraní

odkaz na něj se může předávat jako parametr

je možné i v průběhu aplikace rozhodnout, které třídy bude vytvářený objekt instancí

pokud odpovídá nějakému objektu reálného světa, je zpravidla vhodné jej instancovat

Page 9: Návrhové vzory v programování

Library class

seskupené statické metody

nevytváří se instance, jen statické volání

mělo by se zabránit možnosti instancování

pokud je potřeba nějaká statická proměnná, možná bude vhodnější použít singleton

například Zend_Json

Page 10: Návrhové vzory v programování

Iterator

zajišťuje sekvenční přístup k nějakému seznamu, kontejneru, poli apod.

zapouzdřuje vnitřní implementaci uložištěv PHP (SPL) zabudovaný interface Iterator,

jeho implementace lze použít v cyklu foreachsprávně by neměl být instancován přímo, ale

pomocí Factory method nad daným uložištěmnapř. Zend_Config, Zend_Form apod.

Page 11: Návrhové vzory v programování

Template Method

definuje základní kostru nějakého algoritmu

dílčí kroky mohou definovat až jednotliví potomci pomocí překrytých metod

struktura algoritmu ale zůstává stejná

šablonová metoda je zpravidla finální

rodič je zpravidla abstraktní

Page 12: Návrhové vzory v programování

Adapter

potřebuji, aby třída měla jiné rozhraní, než má

mezi ni a sebe vložím adaptér, který převede skutečné rozhraní na mnou požadované

sjednocení různých rozhraní do jednotného

požadované rozhraní dáno zpravidla nějakým definovaným interface – tři možnosti realizace

např. Zend_Auth, Zend_Db, Zend_Translate

Page 13: Návrhové vzory v programování

Decorator

Alternativa k dědění

Přidává k objektu další dodatečnou funkčnost

Původní objekt zabalí do jiného objektu

Vnější objekt zajišťuje nové funkce, vše ostatní deleguje na původní objekt

Oba dva by měli mít společného rodiče (abstraktní třída či interface)

Page 14: Návrhové vzory v programování

Observer

Pozorovatelé se na začátku zaregistrují u pozorovaného objektu

Při nějaké události pak pozorovaný objekt upozorní všechny registrované pozorovatele

Typicky u událostmi řízeného programování

Registrace dynamicky anebo natvrdo v kódu

Page 15: Návrhové vzory v programování

Literatura

Erich Gamma, Richard Helm, Ralph Johnson, John Vlisside: Design Patterns: Elements of Reusable Object-Oriented Software. Addison Wesley, 1995.

Erich Gamma, Richard Helm, Ralph Johnson, John Vlisside: Návrh programů pomocí vzorů. Stavební kameny objektově orientovaných programů. Grada, 2003.

Rudolf Pecinovský: Návrhové vzoryComputer press, 2007.

Page 16: Návrhové vzory v programování

Elektronické zdroje

• Bruce Eckel: Thinking in patterns. www.bruceeckel.com

• Wikipedia: en.wikipedia.org/wiki/Design_pattern (computer_science)

• Vince Huston: www.vincehuston.org/dp/

• Miloš Dvořák: Návrhové vzory (design patterns)objekty.vse.cz/Objekty/Vzory

• Pavel Drbal: objekty.vse.cz

• Ilja Kraval: www.objects.cz

Page 17: Návrhové vzory v programování

Díky za pozornost

Otázky, připomínky, doplnění?

www.phpguru.cz ;-)