Template Method. Motivační příklad – reálný svět Čaj 1) Uvař vodu 2) Dej do hrnku sáček čaje 3) Zalij hrnek 4) Přisyp cukr a vymačkej citrón Káva 1) Uvař.

Slides:



Advertisements
Podobné prezentace
(instance konkrétní třídy)
Advertisements

Vstup a výstup Ing. Lumír Návrat  katedra informatiky, A-1018 
Seminář C++ 5. cvičení Dědičnost Ing. Jan Mikulka.
Proxy. Definice  zástupce nebo náhradník za dotyčný objekt  proxy i zastoupený objekt dědí od stejného interfacu  proxy kontroluje přístup k objektu.
ÚVOD DO CPP 7 Dědičnost - pokračování
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
PJV151 Vnořené a vnitřní členy mohou být členy tříd a interfejsů. Je-li X obalem Y a Y je obalem Z, pak Z získá jméno X$Y$Z - kompilací vzniknou classy.
Alg51 Rozklad problému na podproblémy Postupný návrh programu rozkladem problému na podproblémy –zadaný problém rozložíme na podproblémy –pro řešení podproblémů.
Singleton 1 1.
Polymorfismus Dědičnost
Čtvrté cvičení Objektové programování Objektový model v Javě
Objekty v CLIPSu RNDr. Jiří Dvořák, CSc.
Chain of responsibility Martin Malý prezentace na předmět Návrhové vzory (PRG024) na MFF UK
State. State – kontext a problém Kontext  chování objektu má záviset na jeho stavu, který se typicky mění za běhu Neflexibilní řešení  metody obsahují.
Páté cvičení Dědičnost Interface Abstarktní třídy a metody
Seminář C++ 9. cvičení Šablony Ing. Jan Mikulka. Šablony ► template – vzory, podle kterých může překladač tvořit skupiny podobných tříd nebo funkcí, které.
Adapter. Adapter – pojem Součástka navržená k propojení dvou „nekompatibilních“ zařízení Definice slova podle Cambridge Advanced Learner's Dictionary:
C# - Exceptions (výjimky)
Objektové programování
Jedenácté cvičení Vlákna. Java cv112 Vlákna Operační systém Mutitasking – více úloh se v operačním programu vykonává „současně“ Java Multithreading -
Seminář C cvičení Obsluha výjimek Ing. Jan Mikulka.
08/04/20151 Delegáty (1) Delegát (delegate) je datový typ, který definuje signaturu metody Delegáty bývají rovněž označovány jako typo- vě bezpečné ukazatele.
PRÁCE S VLÁKNY A APLIKAČNÍ DOMÉNY V.NET FRAMEWORK APLIKACÍCH Architektura technologie.NET Jan Martinovič, FEI - Katedra Informatiky.
Strategy. Strategy – „All-in-1“ na začátek class AStrategy { public: virtual void Algorithm()=0; protected: AStrategy(); }; class SpecificStrategy: public.
Seminář C++ 4. cvičení Objekty Ing. Jan Mikulka. Co je objekt ► obraz třídy i instance ► třída – definovaná za pomocí klíčového slova class ► instance.
Composite [kompozit, ne kompozajt]. Composite Výslovnost  kompozit, ne kompozajt Účel  Popisuje, jak postavit hierarchii tříd složenou ze dvou druhů.
6. cvičení Polymorfismus
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
OSNOVA: a) Úvod do OOPb) Třídy bez metod c) Třídy s metodamid) Konstruktory a destruktory e) Metody constf) Knihovní třídy g) Třídy ve tříděh) Přetížení.
Návrhový vzor Factory v JAVA API Martin Kot Katedra informatiky VŠB – Technická univerzita Ostrava
PB161 Principy OOP - rozhraní, dědičnost PB161 | Principy OOP - Dědičnost, rozhraní
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
IB111 Programování a algoritmizace
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
OSNOVA: a) Přetížení členských funkcí b) Dědičnost tříd Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 2 pro obor EST BPC2E.
Dědičnost - inheritance dědičnost je jednou z forem znovupoužitelnosti dědičnost je jednou z forem znovupoužitelnosti B A Třída A je předkem třídy B Třída.
Systémy pro podporu managementu 2 Inteligentní systémy pro podporu rozhodování 1 (DSS a znalostní systémy)
Richard Lipka Department of Computer Science and Engineering Faculty of Applied Sciences University of West Bohemia, Pilsen, Czech Republic 1.
Metodika objektového přístupu při tvorbě překladačů. Marek Běhálek Informatika a aplikovaná matematika FEI VŠB-TU Ostrava.
Šesté cvičení Výjimky Balíky.
Principy OOP Objektově orientované programování vychá-zí ze třech základních principů (rysů): zapouzdření (encapsulation) dědičnost (inheritance) polymorfismus.
Decorator. Rozšiřuje objekty o dodatečné chování  rozšiřuje konkrétní objekty, ne třídy  rozšiřuje objekt dynamicky, tj. za běhu Upřednostňuje kompozici.
© BBMP: BAM015, BAR487, MAL305, POH015 1 Prezentace projektu Adresář kontaktů Autoři: Kateřina Bambušková, BAM015 Martina Bartošíková, BAR487 Alena Malovaná,
Vzor na všechno. Vzor – úvod Problém .. Příklad: widgety .. Jak na to? .. Známý také jako...
Pokročilé programování v C++ (část B)
Factory Method. Motivace – tisk Knihovna tiskne dokumenty do pdf File Open() Close() Print() PresentationWritingDrawing Knihovna tiskne obrázky do pdf.
Service layer. Service layer – úvod Problém  Vytvoření API aplikace  Odstínění bussiness logiky a transakčního chování od zbytku aplikace  Kam s aplikační.
Web services. Co jsou webservices Součinná spolupráce počítačů v síti Technologie pro vzdálené volání procedur (RPC) Nezávislá na platformě Data v XML.
Observer Martin Dráb Návrhové vzory, Co to je?  Definuje závislost 1:N mezi objekty  Závislé objekty jsou informovány o změně stavu  Konzistentní.
Strategy. Motivace Různé algoritmy pro stejnou akci Hromada kódu v mnoha podmínkách Důsledky  Komplexnost  Špatná čitelnost  Těžká správa kódu  Těžka.
Iterator Iterator – Problém struct Item { int _value; Item * _next; Item( int value, Item * next ) : _value( value ), _next( next ) { } }; void Print(
Composite “ Spojuj a panuj ”. Zakladní vlastnosti Výslovnost  kompozit, ne kompozajt Účel  Popisuje, jak postavit strukturované hierarchie tříd, v níž.
Iterator. C historie int * rand_numbers(int n) { int *numbers = malloc(n * sizeof(int)); int *it = numbers; while (it < numbers + n) *it++ = rand(); //
Strategy. Motivace Ze života - jak to taky může vypadat (R): source("../algorithms/HOCForLOCF.R") source("../algorithms/HOCForLOCFv2.R") source("../MILP/MILP.R")
SOLID principy v OOP návrhu
Y36PJC Programování v jazyce C/C++
Úvod do C# - OOP Jaroslav BURDYS 4IT.
State 1.
Decorator Radek Zikmund NPRG024, LS 2016/17.
Návrhový vzor Flyweight
Abstract Factory.
Strategy „Definujte rodinu algoritmů, zapouzdřuje je aby byly vzájemně zaměnitelné. Strategie umožňuje, aby se algoritmus nebyl závislý na klientech, kteří.
Bridge.
C# přehled vlastností.
Přednášky z Distribuovaných systémů
Decorator.
Proxy 1.
Composite “Spojuj a panuj”.
Bridge.
Návrhový vzor Prototype.
Transkript prezentace:

Template Method

Motivační příklad – reálný svět Čaj 1) Uvař vodu 2) Dej do hrnku sáček čaje 3) Zalij hrnek 4) Přisyp cukr a vymačkej citrón Káva 1) Uvař vodu 2) Nasyp kávu do hrnku 3) Zalij hrnek 4) Přidej cukr a vlij mléko Čaj/káva 1) Uvař vodu 2) Dej základ do hrnku 3) Zalij hrnek 4) Přidej doplňky Čaj Základ:vložit čaj Doplňky:cukr, citrón Káva Základ:nasypat kávu Dopňky:cukr, mléko

Template method – Obecně Název Trochu zavádějící, používaný Definice Definuje kostru algoritmu a nechává některé kroky implementovat podtřídami Účel Umožnit podtřídám měnit části algoritmu beze změny struktury algoritmu Pevné kroky algoritmu jen jednou, měnící se části do podtříd Kdy použít Implementují-li podtřídy společný nebo podobný algoritmus Je-li třeba kontrolovat, ve kterých místech smějí podtřídy měnit chování předka Kde použito V každém frameworku (jdk,.net sdk, JUnit...)

Motivace Framework pro aplikace nad dokumenty Postup načtení dokumentu ze souboru  Ověřit, zda soubor existuje a aplikace umí s daným typem pracovat  Vytvořit instanci příslušné konkrétní třídy dokumentu  Přidat ji do kolekce otevřených dokumentů  Zobrazit uživateli zprávu o načítání dokumentu  Otevřít soubor  Načíst dokument Osnova zůstává, konkrétní kroky záleží na typu dokumentu Možná řešení  Abstraktní metoda OpenDocument v každém potomkovi se znovu píše celá implementace nejvýš se mohou volat nějaké pomocné metody předka nemusí se dodržovat stejná osnova  Template method

Obecná struktura AbstractClass  definuje abstraktní primitivní operace  implementuje kostru algoritmu ConcreteClass  implementuje primitivní operace - konkrétní části algoritmu Inverzní princip (Hollywood principle)  „Don’t call us, we’ll call you“  Rodičovská třída volá metody potomků (ne opačně) implementace kostry pomocí virtuálních metod

bool Application::OpenDocument() { if (!CanOpenDocument(name)) return false; Document *doc = DoCreateDocument(); if (doc) { _docs->AddDocument(doc); AboutToOpenDocument(doc); doc->Open(name); doc->DoRead(); } return true; } Konkrétní struktura OpenDocument() – Template method, definuje kostru DoCreateDocument(), CanOpenDocument() – primitivní operace  Odvozené třídy definují konkrétní chování

Důsledky, implementace Operace v template method  Konkrétní operace abstraktní třídy – užitečné pro všechny podtřídy  Primitivní operace – abstraktní, musí být implementovány v potomkovi  Hook operace – defaultní implementace, může být přepsána v potomkovi  jasně definované body rozšíření Přístupová práva a modifikátory  template method – public, nevirtuální  primitivní operace – protected, čistě virtuální  hook operace - protected, virtuální s implementací Minimalizace počtu primitivních operací  všechny je nutné definovat  větší množství komplikuje implementaci

Příklad implementace class Base { protected: void preHook() {} void postHook() {} virtual void doPh1() = 0; virtual void doPh2() = 0; public: void execute() { preHook(); doPh1(); doPh2(); postHook(); } }; class One: public Base { void doPh1() { cout << "b"; } void doPh2() { cout << "d"; } void postHook() { /*...*/ } }; class Two: public Base { void doPh1() { cout << "2"; } void doPh2() { cout << "4"; } void preHook() { /*...*/ } }; primitivní operace čistě virtuální hooks volitelně přepsatelné

Policy classes Použití šablon  kompilační polymorfismus  výběr metod v době kompilace  vyšší výkonnost  různé jazyky mají různou úroveň specifikace rozhraní class PolX { public: static void op1() {} static void op2() {} }; template class Base { public: void execute() { pol::op1(); pol::op2();} }; int main() { Base tm; tm.execute(); }

Příklad – JUnit testy Při každém automatickém testu spustit několik akcí  runBare() – Template method  setUp() – připraví zdroje  runTest() – vykoná test  tearDown() – uvolní zdroje public abstract class TestCase { public void runBare() { setUp(); try { runTest(); } finally { tearDown(); } protected void setUp() {} protected void tearDown() {} protected void runTest() {} }

Rozdrobenost  kousky kódu jsou vytržené z kontextu Složitější přidávání nových funkcí  dědění umožňuje rozšíření pouze jedné dimenze problému Modernější alternativa  šablony - policy classes Nevýhody Template method

Template method - Shrnutí Problém  definice obecného algoritmu, zachovaná struktura Řešení  mateřská třída implementuje kostru algoritmu  podtřída implementuje jeho jednotlivé kroky Příklady  obecně každý framework/knihovna Související NV  Strategy změna celého algoritmu delegací  Factory method primitivní operace, např. DoCreateDocument()