Návrhové vzory OMO, LS 2014/2015

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

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

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

Dědění, polymorfismus

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

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

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

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

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

1. Dědičnost a polymorfismus

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

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

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

Generické programování

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

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

PB161 Základy OOP. Tomáš Brukner

Návrhové vzory Design Patterns

Zpracoval:

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

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.

Delphi - objektově orientované

Sada 1 - Základy programování

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

6 Objektově-orientovaný vývoj programového vybavení

Objekt. základní prvek v OOP. má vlastnosti. má metody. vznikne vytvoření nové instance definován pomocí třídy

Objektové programování

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

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

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

Chain of responsibility

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

Výčtový typ strana 67

Dědičnost (inheritance)

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

RMI Remote Method Invocation

typová konverze typová inference

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

Programování II. Abstraktní třída Vícenásobná dědičnost 2018/19

Abstract Factory úvod

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

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

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

Základy objektové orientace I. Únor 2010

PREPROCESOR POKRAČOVÁNÍ

Návrhový vzor Factory v JAVA API

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

Teoretické minimum z PJV

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

Jazyk C# (seminář 3)

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

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.

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

Programování II. Dědičnost změna chování 2018/19

Programování II. Modularita 2017/18

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

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

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

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

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

Programování II. Úvod do dědičnosti 2018/19

1. Programování proti rozhraní

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

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

Programování II. Polymorfismus

Softwarové komponenty a Internet

Objekty, třídy, vazby 2006 UOMO 30

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

20. Projekt Domácí mediotéka

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

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.

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

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

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

24. listopadu 2013, Brno Připravil: David Procházka

Metodika. Architecture First. Rudolf Pecinovský

1 Nejkratší cesta grafem

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

Programování II. Návrh programu II

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

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

NA CO SI DÁT POZOR V JAVASCRIPTU? Angular.cz

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

Principy objektově orientovaného programování

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

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

Objektově orientované programování v jazyce Python

Abstraktní třída a rozhraní

Viditelnost (práva přístupu) Tomáš Pitner, upravil Marek Šabo

Usage of modular scissors in the implementation of FEM

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

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

IRAE 07/08 Přednáška č. 1

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

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

Objekty, třídy, instance

7.5 Diagram tříd pokročilé techniky

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

Transkript:

Návrhové vzory OMO, LS 2014/2015

Motivace Cílem objektového návrhu je strukturu aplikace navrhnout tak, aby splňovala následující kritéria: snadná rozšiřitelnost účelnost testovatelnost dokumentovatelnost

Koncepty OOP Objekty Abstrakce Zapouzdření Skládání Delegování Dědičnost Polymorfismus

Objekty Jedná se o prvky modelované reality, které v sobě seskupují jak funkčnost (metody) tak data (proměnné). Objekty si pamatují svůj stav v podobě proměnných a poskytují rozhraní pro komunikaci s nimi. Většina jazyků rozlišuje třídy a instance tříd.

Abstrakce Pomocí abstrakce programátor může abstrahovat od některých detailů jednotlivých objektů (abstraktní třídy, abstraktní metody,...). Každý objekt pracuje navenek jako černá skříňka.

Zapouzdření Každý objekt navenek zpřístupňuje rozhraní, pomocí kterého se s objektem pracuje. Je vhodné, aby každá metoda tohoto rozhraní, po jejím provedení zanechala objekt v konzistentním stavu.

Skládání Objekt může obsahovat jiné objekty. Jedná se o vztah typu has-a.

Delegování Objekt může využívat služeb jiných objektů tak, že je požádá o provedení operace.

Dědičnost Objekty jsou obvykle organizovány stromovým způsobem, kdy objekty nějakého druhu mohou dědit z jiného druhu objektů, čímž přebírají jejich schopnosti. K těmto schopnostem mohou zděděné objekty přidávat svá vlastní rozšíření.

Dědičnost Vztah mezi třídami: členské proměnné a metody definované v předku mohou být použity i potomkem, potomek může přidat nové členské proměnné a metody, potomek může změnit definice metod předka. Vždy musí platit vztah is-a. Jedná se o specializaci nadtypu.

Dědičnost Při dědění by měl být vždy dodržen substituční princip LSP: Let q(x) be a property provable about objects x of type T. Then q(y) should be provable for objects y of type S where S is a subtype of T.

Polymorfismus Situace, kde různé objekty: rozumí stejné zprávě (mají metodu se stejnou signaturou), ale na zprávu reagují různě (vyvoláním jiného kódu). Aby měl polymorfismus praktický význam, musí mít provedený kód stejný význam (v kontextu daného objektu).

Duplikace kódu a dat Příklad: 10000 různých způsobů validace amerického Social Security Number v US vládních systémech Příčiny? Předejití?

Návrhové vzory místní architektura poskytují řešení opakujících se problémů reálné použití vzoru se může v praxi lišit Bible návrhových vzorů: Design Patterns: Elements of Reusable Object-Oriented Software

Návrhové vzory Vzory pro tvorbu instancí Strukturální vzory Vzory chování

Vzory pro tvorbu instancí Factory Method Abstract Factory Prototype Builder Singleton...

Strukturální vzory Adapter Bridge Composite Decorator Facade Flyweight Proxy...

Interpreter Template Method Chain of Responsibility Command Iterator Mediator Observer State Strategy Visitor... Vzory chování

Singleton Aneb: Jediná instance v systému Převzato z [2]

Singleton - Vlastnosti Použije se v případě, že chceme zajistit od dané třídy existenci pouze jediné instance. V minulosti byl používán velmi často. Může způsobit problémy při rozšiřování programu (produktu).

Singleton Příklad public class SingletonDemo { private static volatile SingletonDemo instance = null; private SingletonDemo() { } } public static SingletonDemo getinstance() { if (instance == null) { synchronized (SingletonDemo.class){ if (instance == null) { instance = new SingletonDemo (); } } } return instance; }

Singleton - Příklad public class SingletonDemo { private static SingletonDemo instance = null; private SingletonDemo() { } } public static synchronized SingletonDemo getinstance() { if (instance == null) { instance = new SingletonDemo (); } return instance; }

Singleton - Příklad public enum Singleton { INSTANCE; public void execute (String arg) { // perform operation here } }

Factory Method Aneb: Střihni mi to na míru Převzato z [2]

Factory Method - Vlastnosti Definuje rozhraní pro vytváření nových instancí. Podtřída rozhroduje o tom, která třída bude instanciována. Tovární metoda tedy přenechává vytváření instancí podtřídám.

Factory Method - Příklad Převzato z [1]

Adapter Aneb: Je to trochu jinak Převzato z [2]

Adapter - Vlastnosti Slouží ke konverzi rozhraní jedné třídy na jinou. K použití je vhodný v případě, že rozhraní tříd se liší jen velice málo, například názvy metod.

Adapter Příklad 1 Převzato z [1]

Adapter Příklad 2 Převzato z [1]

Adapter - Příklad 3 Převzato z [1]

Proxy Aneb: Pod ruce mi neuvidíš Převzato z [2]

Proxy - Vlastnosti Zastupuje cílový objekt, aniž by to uživatel poznal. Pomocí proxy lze například kontrolovat volání a parametry metod. Používá se například v RMI, Corba apod. pro zastoupení objektů, které existují fyzicky jinde. Lze využít například k logování nebo řízení přístupu.

Proxy - příklad Převzato z [1]

Facade Převzato z [2]

Facade Fasáda je třída, která poskytuje jednotné rozhraní k celému souboru tříd. Velice užitečné řešení v případě, že rozhraní jednotlivých tříd jsou velice heterogenní a chceme je sjednotit.

Facade - Příklad Každý den ráno, když vyjíždím na kolo provádím na svém telefonu následující akce: vypnout WiFi zapnout mobilní data povolit GPS zapnout Bluetooth zapnout aplikaci na měření, např. Runkeeper

Facade - Příklad Poté, co přijedu z kola provádím následující akce: nasdílím naměřenou vzdálenost na Facebook vypnu Runkeeper vypnu GPS vypnu Bluetooth vypnu mobilní data zapnu WiFi

Facade - Příklad Jak bude vypadat třída, která mi usnadní život? Bude to právě fasáda, např. CyclingFacade s operacemi startcycling a stopcycling.

Iterator Převzato z [2]

Iterator Poskytuje rozhraní pro sekvenční procházení dané struktury. Uživatel iterátoru nemusí znát skutečnou reprezentaci procházené struktury. Příkladem může být foreach (C#, Java) nebo iterátory v STL v C++.

State Pattern Motivace: Chceme aby se objekt choval různě v závislosti na jeho vnitřním stavu Zdroj: http://userpages.umbc.edu/~tarr/dp/lectures/statestrategy.pdf

State Pattern Kdy mám State pattern použít? Chování objektu závisí na jeho vnitřním stavu Metody obsahují velké množství podmínek závislých na aktuálním vnitřním stavu. State pattern přesune jednotlivé větve do samostatných objektů.

State Pattern Převzato z [2]

State Pattern Výhody Přenese veškeré chování v daném stavu do jednoho objektu (Stav = Objekt) Zpřehlední kód Zjednodušší rozšiřování kódu o další stavy Nevýhody Vyšší počet objektů (tříd)

Strategy Pattern Motivace: Mějme skupinu algoritmů, každý je zapouzdřen, možnost libovolné jejich výměny. Strategy nám umožní změnu algoritmu bez ohledu na clienta.

Strategy Pattern Kdy mám Strategy pattern použít? Mnoho podobných tříd se liší pouze chováním Potřebuji několik variant k řešení stejného problému Algoritmus používá data o kterých client nemusí vědět Třída obsahuje velké množství ifů

Strategy Pattern Převzato z [2]

Strategy Pattern Výhody Představuje alternativu k dědění abychom získali několik různých chování Eliminuje velké množství ifů Poskytuje snadnou změnu implementace daného problému Nevýhody Vyšší počet objektů (tříd) Všechny algoritmy (strategie) musí dodržovat stejné rozhraní!

Literatura [1] http://objekty.vse.cz/objekty/vzory [2] http://dofactory.com/patterns/