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

Podobné dokumenty
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

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é.

Zpracoval:

Abstract Factory úvod

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:

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

Základy objektové orientace I. Únor 2010

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

typová konverze typová inference

Vzor Továrna - Factory

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í

Chain of responsibility

KTE / ZPE Informační technologie

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

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.

Jazyk C++ II. Šablony a implementace

návrhový vzor Singleton.

Návrhový vzor Factory v JAVA API

Iterator & for cyklus

1. Dědičnost a polymorfismus

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

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

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

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

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

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

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

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

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

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.

Jazyk C# (seminář 3)

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

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

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

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

Teoretické minimum z PJV

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

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

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

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

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

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

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

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

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

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í:

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

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

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

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

Programování II. Návrh programu II

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

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

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í

20. Projekt Domácí mediotéka

PB161 Základy OOP. Tomáš Brukner

Abstraktní třída a rozhraní

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

UJO Framework. revoluční architektura beans. verze

Úvod do programovacích jazyků (Java)

3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda

OBJEKTOVÉ PROGRAMOVÁNÍ V C++ V PŘÍKLADECH 8 Proudová knihovna 8.1 Hierarchie proudů Standardně zavedené proudy

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

Seminář Java IV p.1/38

Rudolf Pecinovský. Návrhové vzory

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

JAVA. Další jazyky kompilovatelné do Java byte-code

Abstraktní datové typy: zásobník

Úvod do programování - Java. Cvičení č.4

INTERACTION BETWEEN DESIGN PATTERNS AND INSTANTIATED OBJECTS BY REFLECTION. Jaroslav Žáček

11 Diagram tříd, asociace, dědičnost, abstraktní třídy

3 druhy UML diagramů

Metatřídy v Pythonu a jejich využití

Tvorba informačních systémů

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/

Algoritmizace a programování

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

Objektově orientovaný přístup

1. prosince 2013, Brno Připravil: David Procházka

Programování II. Třídy a objekty (objektová orientovanost) 2018/19

Datové struktury. alg12 1

Transkript:

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

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/ 24

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/ 24

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/ 24

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/ 24

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/ 24

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/ 24

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/ 24

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/ 24

Návrhový vzor Každý vzor popisuje problém, který se v našem prostředí neustále vyskytuje. Potom popisuje jádro řešení daného problému tak, že nám umožňuje toto řešení používat třeba milionkrát, aniž bychom to dělali dvakrát stejným způsobem. Christopher Alexander 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! Některé vzory si konkurují, některé vzory mohou používat pro svou implementaci jiné vzory Radek Kočí Seminář Java Návrhové vzory 10/ 24

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/ 24

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/ 24

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/ 24

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/ 24

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/ 24

Jedináček (Singleton) Struktura Singleton 0 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/ 24

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/ 24

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/ 24

Abstraktní továrna (Abstract Factory) public class MazeFactory { public Wall make Wall() { return new Wall(); } } public class MazeGame { public Maze createmaze(mazefactory factory) { Wall wall = factory.makewall();... } } MazeGame game = new MazeGame(); MazeFactory factory = new MazeFactory(); game.createmaze(factory); Radek Kočí Seminář Java Návrhové vzory 19/ 24

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

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 21/ 24

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

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

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 www.patternlanguage.com Radek Kočí Seminář Java Návrhové vzory 24/ 24