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

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

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

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

Návrhové vzory OMO, LS 2014/2015

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

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

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

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

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

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

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

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

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

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

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

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

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

Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++

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

Návrhové vzory Design Patterns

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

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

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

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

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

1. Programování proti rozhraní

Zpracoval:

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ý vzor Factory v JAVA API

Abstraktní datové typy

Konstruktory a destruktory

Abstraktní třídy, polymorfní struktury

TÉMATICKÝ OKRUH Softwarové inženýrství

Vývoj informačních systémů. Přehled témat a úkolů

Generické programování

1. Dědičnost a polymorfismus

Abstract Factory úvod

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

Datové struktury. alg12 1

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

KTE / ZPE Informační technologie

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

Jazyk C++ II. Šablony a implementace

návrhový vzor Singleton.

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

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

TECHNICKÁ UNIVERZITA V LIBERCI

Návrhové vzory pro J2EE. Miroslav Beneš

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

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

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

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

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

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

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

Lineární datové struktury

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

Šablony, kontejnery a iterátory

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

Programování II. Návrh programu I 2018/19

Návrhové vzory pro J2EE

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans.

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

Abstraktní datové typy: zásobník

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

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

Dynamické datové struktury I.

PŘETĚŽOVÁNÍ OPERÁTORŮ

Softwarové komponenty a Internet

Základy objektové orientace I. Únor 2010

Základní datové struktury

Chain of responsibility

typová konverze typová inference

Kolekce, cyklus foreach

IoC/DI. Tomáš Herceg Microsoft MVP (ASP.NET)

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

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

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

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

7.5 Diagram tříd pokročilé techniky

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

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

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.

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

Úvod do programovacích jazyků (Java)

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.

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY

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

Motivační příklad reálný svět. výroba (assembly line)

Šablony, kontejnery a iterátory

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

Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody

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

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

Principy OOP při tvorbě aplikací v JEE. Michal Čejchan

Principy tvorby objektů v komponentním frameworku BCF

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

Návrhové vzory Tvorba objektů

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

Transkript:

Jakub Klemsa Jan Legerský Objektově orientované programování klemsjak@fjfi.cvut.cz jan.legersky@gmail.com 30. října 2012

návrhový vzor (design pattern) obecné řešení problému, které se využívá při návrhu programů není knihovnou nebo částí zdrojového kódu popis řešení problému nebo šablona OO návrhové vzory ukazují vztahy a interakce mezi třídami a objekty bez implementace konkrétní třídy algoritmy nejsou návrhové vzory (řeší konkrétní problémy a nikoliv problémy návrhu) nepocházejí ze softwarového inženýrství, např. architektura

Použití opakující se, netriviální situace kombinace teoretických a praktických zkušeností dva druhy implicitní nepopsaná řešení odvíjející se od znalostí a zkušeností explicitní zdokumentované zkušenosti při řešení jednotlivých problémů

Historie Ve stavební architektuře: Každý návrhový vzor popisuje problém, který se vyskytuje znovu a znovu v našem prostředí a popisuje jádro řešení tohoto problému takovým způsobem, že můžeme použít toto řešení mnohokrát, aniž bychom dělali stejnou věc dvakrát. (Christopher Alexander, 1964) v IT na konferenci OOPSLA (1987, Orlando) Smalltalk idoms (Jim Coplien, 1989) specifické vzory představující menší úseky kódu Gang of Four (Erich Gamma, Richard Helm, Ralph Johnson a John Vlissides) na ECOOP 91 představil Gamma a Helm několik návrhových vzorů (Composite, Decider, Observer atd.) Hillside Group (1993) konference PLoP (Pattern Languages of Programs) Design Patterns: Elements of Reusable Object-Oriented Software GoF, 1994

Základní rozdělení Creational Patterns (vytvářející) Structural Patterns (strukturální) Behavioral Patterns (chování)

Creational Patterns řeší problémy související s vytvářením objektů snaha popsat postup výběru třídy nového objektu zajištění správného počtu daných objektů dynamická rozhodnutí učiněná za běhu programu

Creational Patterns Factory Method Pattern Abstract Factory Method Pattern Builder Pattern Prototype Pattern Singleton Pattern

Structural Patterns zaměřují se na možnosti uspořádání jednotlivých tříd nebo komponent zpřehledňují systém strukturalizace kódu

Structural Patterns Adapter Pattern Bridge Pattern Composite Pattern Decorator Pattern Facade Pattern Flyweight Pattern Proxy Pattern

Behavioral Patterns navrhují chování systému objektové u tříd využívají principu dědičnosti u objektů řeší spolupráci mezi objekty a skupinami objektů

Behavioral Patterns Chain Of Responsibility Pattern Command Pattern Interpreter Pattern Iterator Pattern Mediator Pattern Memento Pattern Observer Pattern State Pattern Strategy Pattern Template Pattern Visitor Pattern

Factory Pattern (Creational) Zadání problému Jakým způsobem rozhodnout o vytvoření instance konkrétní třídy až v průběhu programu? Podmínky: mějme několik tříd se společným předkem Factory pattern za běhu programu vytvoří instanci některé z těchto tříd princip výběru třídy: pro tuto funkci je definován objekt

Factory Pattern (Creational) Řešení Obrázek: Factory Pattern obecná třída Product představuje rozhraní implementované třídami Concrete Product klient má pouze referenci na objekt Creator vyžádá si instanci třídy Concrete Pruduct, přímo ji neurčuje Creator rozhodne, která třída bude vybrána pro vytvoření instance, a vrací ji jako výsledek klientovi klient nemusí implementovat logiku výběru třídy neví tak, jakou instanci Concrete Product získal

Factory Pattern (Creational) Příklad Obrázek: Factory Pattern příklad

Factory Pattern (Creational) Důsledky uzavření logiky vytváření objektů do samostatné třídy klient nevytváří přímo požadovaný objekt Factory method rozhodne, jestli vrátí instanci nového objektu nebo použije nevyužívaný objekt zvyšuje flexibilitu návrhového vzoru v případě změny tříd vytvářených objektů stačí provést změnu pouze na jednom místě uplatnění v oblasti frameworků a distribuovaných aplikací (rozhoduje se mezi vytvořením nového objektu nebo využitím nepoužívaného) nastává při správě zdrojů jejich použití je omezením pro výkon systému typicky připojení do databáze (nevytváří se nové, použije se vytvořené)

Singleton Pattern alias Jedináček (Creational) Zadání problému Jak zajistit vytvoření pouze jedné instance daného objektu? Podmínky: Závisí na prostředcích, které nám dává použitý programovací jazyk Požadujeme globální přístup k instanci Např. pro dialogová okna, schránku, ovladače zařízení...

Singleton Pattern (Creational) Řešení Obrázek: Singleton Pattern Použití statické metody pro vytvoření instance Konstruktor jako Private

Singleton Pattern (Creational) Ukázka kódu v C++ class Singleton { private : static Singleton * uniqueinstance ; Singleton () {} public : static Singleton * getinstance () { if ( uniqueinstance == NULL ) uniqueinstance = new Singleton (); return uniqueinstance ; } }; Singleton * Singleton :: uniqueinstance = NULL ;

Adapter Pattern (Structural) Zadání problému Jak přizpůsobit třídu tak, aby se dala využívat i jiným způsobem? Podmínky: Prostředník mezi požadovaným rozhraním a třídou Konverze rozhraní jedné třídy na rozhraní jiné Spolupráce tříd

Adapter Pattern (Structural) Řešení Obrázek: Adapter Pattern Reference na Adaptee v Adapteru Delegování požadavků na metody Adaptee Může spojovat více objektů Nebo: Odvození nové třídy od staré a přidání požadovaného rozhraní

Adapter Pattern (Structural) Ukázka kódu v C++ class Stack { private : List list ; public : Stack (){ list = new List ;} void push (T what ){ list. insertbegin ( what );} T top (){ return list. getfirst () ;} T pop (){ T tmp = list. getfirst (); list. deletefirst (); return T;} };

Iterator Pattern (Behavioral) Zadání problému Jak se pohybovat mezi prvky, které jsou sekvenčně uspořádány? Podmínky: Sekvenční pohyp v kolekci objektů Bez znalosti implementace Nezávisle na použitém kontejneru

Iterator Pattern (Behavioral) Řešení Obrázek: Iterator Pattern Iterator má metody: First, next, isdone, current... Datová struktura vrací iterátor Vhodné od abstraktního iterátoru odvodit speciální pro jednotlivé datové struktury

Zdroje DVOŘÁK, Miloš. http://objekty.vse.cz/objekty/vzory, VŠE, Praha (2003) VIRIUS, Miroslav. Základy algoritmizace, 2. vydání, ČVUT, Praha (1998)