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

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

Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová

1. Dědičnost a polymorfismus

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

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

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

Jazyk C# (seminář 3)

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

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

typová konverze typová inference

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

Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost rozhraním a výjimkám.

Testování. Zadání příkladu. Vytvoření kostry třídy. Obsah:

Návrhové vzory OMO, LS 2014/2015

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

Základy programovaní 3 - Java. Unit testy. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. 26.,27.

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

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

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

Seminář Java IV p.1/38

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

Chain of responsibility

JUnit příklad na použití

KTE / ZPE Informační technologie

Semin aˇr Java V yjimky Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Unor 2008 Radek Koˇc ı Semin aˇr Java V yjimky 1/ 25

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

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

20. Projekt Domácí mediotéka

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

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/

Java Výjimky Java, zimní semestr

Mnohotvarost (polymorfizmus)

1. Programování proti rozhraní

Java - výjimky. private void vstup() throws IOException {... }

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

Úvod do programovacích jazyků (Java)

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

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

Abstract Factory úvod

7.3 Diagramy tříd - základy

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

Úvod do programovacích jazyků (Java)

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

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

7.3 Diagramy tříd - základy

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

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.

Algoritmizace a programování

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

Diagramy tříd - základy

Dědičnost (inheritance)

Z. Kotala, P. Toman: Java ( Obsah )

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

Java Řetězce Java, zimní semestr

Základy objektové orientace I. Únor 2010

Anglický text: Lesson 8: Class Inheritance

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

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

Michal Podzimek

4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ

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

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

JAVA Unit testing Java, zimní semestr

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

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

Osnova přednášky. Programové prostředky řízení Úvod do C# II. Přístup ke členům. Členy (Members)

Úvod do programovacích jazyků (Java)

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

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

7.5 Diagram tříd pokročilé techniky

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

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

Java/QE Akademie - Osnova

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

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

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

Jazyk C++ I. Šablony 2

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

Java a Caché IV: Manipulace s objekty

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

Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

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

Chování konstruktorů a destruktorů při dědění

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

5 Rekurze a zásobník. Rekurzivní volání metody

7.5 Diagram tříd pokročilé techniky

Iterator & for cyklus

RMI Remote Method Invocation

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

PREPROCESOR POKRAČOVÁNÍ

Jazyk C++ I. Polymorfismus

Java testovací třída

Vytváření a použití knihoven tříd

Výčtový typ strana 67

SW_03. Implementace a testování

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

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

9. Polymorfismus a rozhraní

Jazyk C++ I. Šablony

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

Transkript:

Template method

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

Motivační příklad SW inženýrství n Otevírání souborů n Třídy Application a Document (+potomci)

Motivační příklad SW inženýrství n Otevírání souborů n Třídy Application a Document (+potomci)

Motivační příklad SW inženýrství 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;

Motivační příklad SW inženýrství 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; n OpenDocument() Template method n DoCreateDocument(), CanOpenDocument() primitivní operace

Účel n Definice skeletu algoritmu q Pořadí operací q Invarianty

Účel n Definice skeletu algoritmu q Pořadí operací q Invarianty n Agregace totožného kódu množiny tříd q Template method u rodiče q Potomkové definují lišící se části q Refactoring to generalize

Účel n Definice skeletu algoritmu q Pořadí operací q Invarianty n Agregace totožného kódu množiny tříd q Template method u rodiče q Potomkové definují lišící se části q Refactoring to generalize n Řízená dědičnost q Hook operations v Template method

Struktura

Struktura n Inverzní princip (Hollywood principle) q Don t call us, we ll call you

Typy operací v TM n Konkrétní operace v AbstractClass q Invarianty q AddDocument()

Typy operací v TM n Konkrétní operace v AbstractClass q Invarianty q AddDocument() n Primitivní (abstraktní) operace q CanOpenDocument(), DoRead()

Typy operací v TM n Konkrétní operace v AbstractClass q Invarianty q AddDocument() n Primitivní (abstraktní) operace q CanOpenDocument(), DoRead() n Factory method-y q DoCreateDocument()

Typy operací v TM n Konkrétní operace v AbstractClass q Invarianty q AddDocument() n Primitivní (abstraktní) operace q CanOpenDocument(), DoRead() n Factory method-y q DoCreateDocument() n Hook operations q Nepovinné řízená extenze třídy

Hook operations n Specifická funkcionalita DerivedClass n Nemusí být implementovány

Hook operations n Specifická funkcionalita DerivedClass n Nemusí být implementovány void ParentClass::Operation() { // ParentClass behaviour HookOperation(); void ParentClass::HookOperation() { void DerivedClass::HookOperation() { // DerivedClass extension

Implementace n Přístupová práva a modifikátory OO jazyků q Primitivní operace protected, čistě virtuální q Template method public, nevirtuální

Implementace n Přístupová práva a modifikátory OO jazyků q Primitivní operace protected, čistě virtuální q Template method public, nevirtuální n Minimalizace počtu primitivních operací q Protože q to q komplikuje q implementaci

Implementace n Přístupová práva a modifikátory OO jazyků q Primitivní operace protected, čistě virtuální q Template method public, nevirtuální n Minimalizace počtu primitivních operací q Protože q to q komplikuje q implementaci n Pojmenovávací konvence q Primitivní operace - prefix Do- (MacApp framework) q Hook operations prefix Hook-

Příklad NeXT AppKit

Příklad NeXT AppKit n Třída View vykreslování do grafického kontextu n Před samotným vykreslením potřebuje focus void View::Display() { SetFocus(); DoDisplay(); ResetFocus(); void View::DoDisplay() { void CustomView::DoDisplay { // render something awesome

Příklad JUnit testy n Při každém automatickém testu potřeba spustit několik akcí q setup() připraví zdroje q runtest() vykoná test q teardown() uvolní zdroje q runbare() Template method public abstract class TestCase { public void runbare() throws Throwable { setup(); try { finally { runtest(); teardown(); protected void setup() throws Exception { protected void teardown() throws Exception { protected void runtest() throws Throwable {

Související NV n Factory method q e.g. DoCreateDocument() q Primitivní operace n Strategy q Změna celého algoritmu delegací

Template method - Shrnutí n Název q Lehce zavádějící n Problém q Definice obecného algoritmu, kterého struktura zůstane zachována i v jeho konkrétních implementacích n Řešení q Mateřská třída implementuje kostru algoritmu q Podtřída implementuje jeho jednotlivé kroky n Implementace q Využití přístupových práv a virtuality metod n Příklady q Obecně každý framework/knihovna