Semin aˇr Java N avrhov e vzory Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2009 Radek Koˇc ı Semin aˇr Java N avrhov e vzory 1/ 25

Podobné dokumenty
Semin aˇr Java N avrhov e vzory Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2008 Radek Koˇc ı Semin aˇr Java N avrhov e vzory 1/ 24

Obsah Znovupou ˇzitelnost N avrhov e vzory Z asady programov an ı Radek Koˇc ı Semin aˇr Java N avrhov e vzory, Z asady... 2/ 46

Semin aˇr Java X Radek Koˇc ı Fakulta informaˇcn ıch technologi ı VUT Duben 2011 Radek Koˇc ı Semin aˇr Java N avrhov e vzory, Z asady...

Návrhové vzory. Jakub Klemsa, Jan Legerský. 30. října Objektově orientované programování.

ČÁST 1. Zahřívací kolo. Co je a k čemu je návrhový vzor 33

Návrhové vzory OMO, LS 2014/2015

Vývoj informačních systémů. Architektura, návrh Vzory: Doménová logika

Návrhové vzory. n OO jazyky - široká paleta technických prostředků. n Návrhový vzor. n rozhraní!! n volnější vazby, parametrizace

Literatura. E. Gamma, R. Helm, R. Johnson, J. Vlissides The Gang of Four (GoF) Design Patterns Elements of Reusable Object-Oriented Software 1995

PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITY PALACKÉHO KATEDRA INFORMATIKY BAKALÁŘSKÁ PRÁCE. Návrhové vzory Dan Doležel

specifikuje vytvářené objekty pomocí prototypické instance nový objekt vytváří kopírováním prototypu

Design Patterns. Tomáš Herceg Microsoft MVP (ASP.NET)

Kód, který se nebude často měnit

, Brno Připravil: David Procházka Návrhové vzory

Vazba (volná, těsná) - míra znalosti jedné třídy*komponenty o druhé.

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

Zpracoval:

Abstract Factory úvod

Základy objektové orientace I. Únor 2010

Návrhové vzory Design Patterns

Úvod - problém. Při přidání nového modelu je nutné upravit. Kód, který se nebu de často měnit. n Mějme obchod s auty:

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

typová konverze typová inference

Vzor Továrna - Factory

Iterator & for cyklus

State. Známý jako. Účel. Použitelnost. Stav, Object for States. umožňuje objektu měnit svoje chování v závislosti na stavu objekt mění svou třídu

Generické programování

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Třídy. Instance. Pokud tento program spustíme, vypíše následující. car1 má barvu Red. car2 má barvu Red. car1 má barvu Blue.

návrhový vzor Singleton.

Chain of responsibility

KTE / ZPE Informační technologie

Arlow, J., Neustat, I.: UML2 a unifikovaný proces vývoje aplikací. Computer Press, Praha 2007.

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

Hiearchical MVC (Model-view-controller) vs. PAC (Presentation-abstraction-control)

Návrhový vzor Factory v JAVA API

Objekty v PHP 5.x. This is an object-oriented system. If we change anything, the users object.

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

George J. Klir. State University of New York (SUNY) Binghamton, New York 13902, USA

Jazyk C++ II. Šablony a implementace

Observer. Klasifikace. Alias. Smysl. Potřeba sledování změn objektu a notifikace. Obdoba systému událostí (C#, Java) vlastními prostředky

1. Dědičnost a polymorfismus

Problém, jehož různé instance je třeba často řešit Tyto instance lze vyjádřit větami v jednoduchém jazyce

SW_12. Vzor Příkaz - Command Vzor Návštěvník - Visitor

Dědičnost. seskupování tříd do hierarchie. potomek získá všechny vlastnosti a metody. provádí se pomocí dvojtečky za názvem třídy.

Objektově orientované programování v PHP 5. Martin Klíma

Jazyk C# (seminář 3)

Abstraktní třída a rozhraní

NMIN201 Objektově orientované programování 1 / :36:09

Abstraktní datové typy: zásobník

Parametrizované třídy Generics generické třídy. JDK zavádí mimo jiné tzv. parametrizované třídy - generics

Vyřešené teoretické otázky do OOP ( )

Obsah přednášky 9. Skrývání informací. Skrývání informací. Zapouzdření. Skrývání informací. Základy programování (IZAPR, IZKPR) Přednáška 9

Programování v C++ 2, 4. cvičení

Programování II. Návrh programu II

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Seminář Java IV p.1/38

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

IB111 Programování a algoritmizace. Objektově orientované programování (OOP)

NPRG031 Programování II 1 / :25:46

Dynamicky vázané metody. Pozdní vazba, virtuální metody

Teoretické minimum z PJV

Algoritmizace a programování

Třídy, polymorfismus. A0B36PR2-Programování 2 Fakulta elektrotechnická České vysoké učení technické

1. Programování proti rozhraní

Reflexe. Aplikační programování v Javě (BI-APJ) - 8 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

RMI Remote Method Invocation

Výchozí a statické metody rozhraní. Tomáš Pitner, upravil Marek Šabo

Vývoj informačních systémů. Architektura, návrh Vzory: Doménová logika

20. Projekt Domácí mediotéka

PB161 Programování v jazyce C++ Přednáška 7

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

PB161 Programování v jazyce C++ Přednáška 7

PB161 Základy OOP. Tomáš Brukner

Singleton obsah. Motivace Základní myšlenka Implementace Problémy. Dědičnost Obecná implementace Shrnutí. destrukce vícevláknovost

Výčtový typ strana 67

3 druhy UML diagramů

Návrhové vzory. Každý návrhový vzor má následující strukturu: Většina publikací návrhové vzory člení do následujících kategorií:

Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth

NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Jini (pronounced GEE-nee) Cvičení 8 - DS 2006

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

OMO. 6 - Behavioral Design Patterns. Ing. David Kadleček, PhD.

Facade. Známý jako. Účel. Motivace. Facade, Fasáda

Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

GENEROVÁNÍ ZDROJOVÝCH KÓDŮ APLIKACÍ POMOCÍ NÁVRHOVÝCH VZORŮ CODE GENERATION USING DESIGN PATTERNS

Singleton obsah. n Motivace. n Základní myšlenka. n Implementace. n Problémy. n Dědičnost. n Obecná implementace. n Shrnutí.

7.5 Diagram tříd pokročilé techniky

Quo vadis programování? Automatizace vyhodnocování studentských úloh

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

Programování v Javě I. Leden 2008

Platforma Java. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. Petr Krajča (UP) KMI/PJA: Seminář V. 27. říjen, / 15

Rudolf Pecinovský. Návrhové vzory

UJO Framework. revoluční architektura beans. verze

Dalším příkladem může být například výstup dat na různá zařízení, souborů, grafických rozhraní, sítě atd.

Programování v C++ 3, 3. cvičení

Jazyk C# (seminář 6)

Mediator motivace. FontDialog. závislosti mezi jednotlivými ovládacími prvky jsou netriviální

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Transkript:

Seminář Java Návrhové vzory Radek Kočí Fakulta informačních technologií VUT Duben 2009 Radek Kočí Seminář Java Návrhové vzory 1/ 25

Znovupoužitelnost Dědičnost implementace třídy pomocí jiné (již existující) znovupoužitelnost bílé skříňky výhody a nevýhody přímočaré použití, jednodušší úprava metod statické těsná vazba s nadřazenou třídou (problémy s modifikací) Radek Kočí Seminář Java Návrhové vzory 2/ 25

Znovupoužitelnost Skládání nová funkce = poskládání již existujících objektů znovupoužitelnost černé skříňky výhody a nevýhody dynamické objekty se používají přes rozhraní objekty lze za běhu zaměňovat (stejné typy) menší, jednodušší a přehlednější návrh Radek Kočí Seminář Java Návrhové vzory 3/ 25

Znovupoužitelnost Skládání class A { foo() { self.m(); m() { print("object A doing the job"); class B { A a; foo() { a.foo(); m() { print("object B doing the job"); B b; b.foo() => Object A doing the job. Radek Kočí Seminář Java Návrhové vzory 4/ 25

Znovupoužitelnost Skládání class A { foo() { self.m(); m() { print("object A doing the job"); class B { A a; foo() { a.foo(); m() { print("object B doing the job"); B b; b.foo() => Object B doing the job. Radek Kočí Seminář Java Návrhové vzory 5/ 25

Znovupoužitelnost Parametrizované typy (generické programování) templates v C++ (viz Standard Template Library STL) generics v Java 5 definují parametrizované typy má význam u staticky typovaných jazyků Radek Kočí Seminář Java Návrhové vzory 6/ 25

Znovupoužitelnost template <typename T> T max(t x, T y) { if (x < y) return y; else return x; max(3.0, 5.5); => T je typu double Radek Kočí Seminář Java Návrhové vzory 7/ 25

Návrhové vzory (design patterns) Objektově orientovaný návrh a programování znovupoužitelnost? zajištění znovupoužitelnosti obecný návrh zajištění aplikovatelnosti na řešený problém specifický návrh spor... přesto proč nevyužít řešení, které již fungovalo taková řešení jsou výsledkem mnoha pokusů a používání vzory pro řešení stejných typů problémů Radek Kočí Seminář Java Návrhové vzory 8/ 25

Návrhové vzory (design patterns) Návrhové vzory základní sada řešení důležitých a stále se opakujících návrhů usnadňují znovupoužitelnost umožňují efektivní návrh (výběr vhodných alternativ, dokumentace,... ) Radek Kočí Seminář Java Návrhové vzory 9/ 25

Návrhový vzor Návrhový vzor nazývá, zabstraktňuje a identifikuje klíčové aspekty běžné návrhové struktury popisuje komunikující objekty a třídy upravené k řešení obecného návrhového problému vzor je šablona pro řešení, nikoli implemeptace problému! Každý vzor popisuje problém, který se neustále vyskytuje, a jádro řešení daného problému. Umožňuje toto řešení používat mnohokrát, aniž bychom to dělali dvakrát úplně stejným způsobem. Některé vzory si konkurují, některé vzory mohou používat pro svou implementaci jiné vzory Radek Kočí Seminář Java Návrhové vzory 10/ 25

Návrhový vzor Prvky návrhového vzoru název krátký popis (identifikace) návrhového problému problém popis, kdy se má vzor používat (vysvětlení problému, podmínky pro smysluplé použití vzoru,... ) řešení popis prvků návrhu, vztahů, povinností a spolupráce nepopisuje konkrétní návrh, obsahuje abstraktní popis problému a obecné uspořádání prvků pro jeho řešení důsledky výsledky a kompromisy (vliv na rozšiřitelnost, přenositelnost,... ) důležité pro hodnocení návrhových alternativ náklady a výhody použití vzoru Radek Kočí Seminář Java Návrhové vzory 11/ 25

Typy vzorů Vzory se mohou týkat tříd zabývají se vztahy mezi třídami a podtřídami (vztah je fixován) objektů zabývaní se vztahy mezi objekty, jsou dynamičtější Základní rozdělení vzorů tvořivý zabývá se procesem tvorby objektů strukturální zabývá se skladbou tříd či objektů chování zabývá se způsoby vzájemné interakce mezi objekty či třídy zabývá se způsoby rozdělení povinností mezi objekty či třídy Radek Kočí Seminář Java Návrhové vzory 12/ 25

Základní návrhové vzory Tvořivý Tovární metoda (Factory method) Abstraktní továrna (Abstract Factory) Jedináček (Singleton) Prototyp (Prototype) Stavitel (Builder) Strukturální Adaptér třída (Adapter) Adaptér objekt (Adapter) Dekorátor (Decorator) Fasáda (Facade) Most (Bridge) Muší váha (Flyweight) Skladba (Composite) Zástupce (Proxy) Radek Kočí Seminář Java Návrhové vzory 13/ 25

Základní návrhové vzory Chování Interpret (Interpreter) Šablonová metoda Iterátor (Iterator) Návštěvník (Visitor) Obnovitel (Memento) Pozorovatel (Observer) Prostředník (Mediator) Příkaz (Command) Řetěz odpovědnosti (Chain of Responsibility) Stav (State) Strategie (Strategy) Radek Kočí Seminář Java Návrhové vzory 14/ 25

Jedináček (Singleton) Účel Motivace jedna třída může mít pouze jednu instanci tvořivý vzor objekty nutnost mít pouze jednu instanci (např. tiskové fronty) při pokusu o vytvoření nové instance se vrátí již existující Důsledky řízený přístup k jediné instanci zdokonalování operací (dědičnost) usnadňuje změnu v návrhu (variabliní počet instancí) tvárnější než třídní (statické) operace (nelze více než jednu instanci, C++ neumožňuje polymorfní překrytí statických metod,... ) Radek Kočí Seminář Java Návrhové vzory 15/ 25

Jedináček (Singleton) Struktura Singleton uniqueinstance : Singleton + instance() : Singleton public class Singleton { protected Singleton inst; private Singleton() { public static Singleton instance() { if (inst == null) inst = new Singleton(); return inst; Radek Kočí Seminář Java Návrhové vzory 16/ 25

Abstraktní továrna (Abstract Factory) Účel vytváření příbuzných nebo závislých objektů bez specifikace konkrétní třídy Motivace tvořivý vzor objekty např. změna vzhledu sady grafických nástrojů Důsledky izoluje konkrétní třídy klient pracuje pouze s rozhraním usnadňuje výměnu produktových řad (např. změna vzhledu,... ) podpora zcela nových produktových řad je obtížnější... Radek Kočí Seminář Java Návrhové vzory 17/ 25

Abstraktní továrna (Abstract Factory) Struktura AbstractFactory + createproducta() : AbstractProductA + createproductb() : AbstractProductB AbstractProductA Client ProductA2 ProductA1 Factory1 + createproducta() + createproductb() Factory2 + createproducta() + createproductb() AbstractProductB ProductB2 ProductB1 Radek Kočí Seminář Java Návrhové vzory 18/ 25

Abstraktní továrna (Abstract Factory) // abstract product public interface Wall {... // abstract factory public abstract class MazeFactory { public abstract Wall makewall(); public class MazeGame { public Maze createmaze(mazefactory factory) { Wall wall = factory.makewall();... Radek Kočí Seminář Java Návrhové vzory 19/ 25

Abstraktní továrna (Abstract Factory) public class StdWall implements Wall {... public class StdMazeFactory extends MazeFactory { public Wall makewall() { return new StdWall(); MazeGame game = new MazeGame(); MazeFactory factory = new StdMazeFactory(); game.createmaze(factory); Radek Kočí Seminář Java Návrhové vzory 20/ 25

Abstraktní továrna (Abstract Factory) public class SpecialWall implements Wall {... public class SpecMazeFactory extends MazeFactory { public Wall makewall() { return new SpecialWall(); MazeFactory specfactory = new SpecMazeFactory(); game.createmaze(specfactory); Radek Kočí Seminář Java Návrhové vzory 21/ 25

Command Účel Motivace zapouzdření požadavků nebo operací vzor chování zaslání požadavku na obecné úrovni, aniž známe konkrétní protokol podpora undo operací Důsledky reprezentuje jeden provedený příkaz umožňuje uchovávat předchozí stav klienta... Radek Kočí Seminář Java Návrhové vzory 22/ 25

Command Struktura Command receiver : + execute() Invoker Client ConcreteACommand statea : + execute() ConcreteBCommand stateb : + execute() Receiver + actiona() + actionb() Radek Kočí Seminář Java Návrhové vzory 23/ 25

Command Radek Kočí Seminář Java Návrhové vzory 24/ 25

Návrhové vzory Zdroje Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Návrh programů pomocí vzorů popis 23 základních vzorů wikipedia.org Radek Kočí Seminář Java Návrhové vzory 25/ 25