Bridge.

Slides:



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

Seminář C++ 5. cvičení Dědičnost Ing. Jan Mikulka.
Funkce Připomeňme si program pro výpočet faktoriálu:
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.
Pole, ukazatele a odkazy
ÚVOD DO CPP 7 Dědičnost - pokračování
BLIŽŠÍ POHLED NA TŘÍDY, DĚDIČNOST - úvod
Uživatelská rozhraní Uživatelská rozhraní 9. cvičení.
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.
Singleton 1 1.
Polymorfismus Dědičnost
Čtvrté cvičení Objektové programování Objektový model v Javě
J a v a Začínáme programovat Lucie Žoltá metody, objekty, konstruktor.
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
Kapitoly z metodologie pedagogického výzkumu Prostředí pro výuku algoritmů Vojtěch Ouška.
PB161 Jmenné prostory, I/O proudy PB161 | Jmenné prostory, IO proudy PB161 – Programování v jazyce C++ Objektově Orientované Programování.
Adapter. Adapter – pojem Součástka navržená k propojení dvou „nekompatibilních“ zařízení Definice slova podle Cambridge Advanced Learner's Dictionary:
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 -
Strategy. Strategy – „All-in-1“ na začátek class AStrategy { public: virtual void Algorithm()=0; protected: AStrategy(); }; class SpecificStrategy: public.
Facade [f ə ˈ s ɑː d]f ə ˈ s ɑː d. Facade Před: Po:
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
PB161 Právo friend, přetěžování operátorů, přetypování PB161 | Friend, operátory PB161 – Programování v jazyce C++ Objektově Orientované Programování.
Memento. Obnovení operačního systému ( Windows | Linux...) Všichni víme, co jsou transekce v databázi Memento – zálohování databáze.
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í.
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
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.
Principy OOP Objektově orientované programování vychá-zí ze třech základních principů (rysů): zapouzdření (encapsulation) dědičnost (inheritance) polymorfismus.
Netrvaloppa21 Vytvořte třídu Student pro reprezentaci struktury student na ZČU. Atributy třídy budou fakulta a osobniCislo. Název třídy: Student proměnné.
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.
Vzor na všechno. Vzor – úvod Problém .. Příklad: widgety .. Jak na to? .. Známý také jako...
Abstract Factory. Abstract Factory – úvod Situace  potřebujeme vytvářet objekty ze skupiny souvisejících nebo na sobě závislých tříd  2 „druhy“ GUI.
Factory Method. Motivace – tisk Knihovna tiskne dokumenty do pdf File Open() Close() Print() PresentationWritingDrawing Knihovna tiskne obrázky do pdf.
PŘÍKAZ while úkol 1_42.
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í.
NEÚPLNÁ PODMÍNKA V JAVĚ úkol 1_26. ZADÁNÍ Napište zdrojový kód k zadanému vývojovému diagramu.
Prototyp. O čem to bude? Prototyp Účel  vytváření objektů  nový objekt se vytváří kopírováním (klonováním) vzoru – prototypu.
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í.
ZADÁNÍ Sestavte program, který vytiskne n hvězdiček.
PŘÍKAZ for úkol 1_47.
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.
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ř.
Composite “ Spojuj a panuj ”. Zakladní vlastnosti Výslovnost  kompozit, ne kompozajt Účel  Popisuje, jak postavit strukturované hierarchie tříd, v níž.
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA:
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
PJV15 1 Vnořené ( nested ) a vnitřní ( inner ) členy Třídy či interfejsy mohou být členy tříd či interfejsů. Je-li X obalem Y a Y obalem Z, pak Z získá.
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ří.
Builder „Návrhový vzor oddělující konstrukci složitých objektů od jejich reprezentace. Čímž je možné použít stejný proces konstrukce pro rozdílné reprezentace.“
C# přehled vlastností.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Monitor Object 1.
Adapter
Composite “Spojuj a panuj”.
Bridge.
Návrhový vzor Prototype.
Transkript prezentace:

Bridge

Bridge – (de)motivační příklad // Helps in providing truly decoupled architecture public interface IBridge { void Function1(); void Function2(); } public class Bridge1 : IBridge public void Function1() Console.WriteLine("Bridge1.Function1"); public void Function2() Console.WriteLine("Bridge1.Function2"); public class Bridge2 : IBridge Console.WriteLine("Bridge2.Function1"); Console.WriteLine("Bridge2.Function2");

Bridge – (de)motivační příklad public interface IAbstractBridge { void CallMethod1(); void CallMethod2(); } public class AbstractBridge : IAbstractBridge public IBridge bridge; public AbstractBridge(IBridge bridge) this.bridge = bridge; public void CallMethod1() this.bridge.Function1(); public void CallMethod2() this.bridge.Function2();

Bridge – názorný příklad

Bridge – názorný příklad

Bridge – názorný příklad

Bridge – názorný příklad

Bridge – názorný příklad

Bridge – názorný příklad

Bridge – názorný příklad

Bridge – přepsaný motivační příklad using System; namespace BridgePattern {// Helps in providing truly decoupled architecture public interface IColor { void PrintLine(int x, int y, int dx, int dy); void PrintPoint(int x, int y); } public class RedColor : IColor { public void PrintLine(int x, int y, int dx, int dy) { Console.BackgroundColor = ConsoleColor.Red; Console.WriteLine("line from ({0},{1}) to ({2},{3})", x, y, dx, dy); public void PrintPoint(int x, int y) { Console.WriteLine("point ({0},{1})", x, y); public class BlueColor : IColor { Console.BackgroundColor = ConsoleColor.Blue;

Bridge – přepsaný motivační příklad public abstract class Shape { protected IColor color; protected Shape(IColor color) this.color = color; } public abstract void Draw();

Bridge – přepsaný motivační příklad public class Circle : Shape { public Circle(IColor color) : base(color) { } public override void Draw() for (int i = 0; i < 2* Math.PI; i++) { int x = (int)Math.Sin(i); int y = (int)Math.Cos(i); color.PrintPoint(x,y); } public class Rectangle : Shape public Rectangle(IColor color) : base(color) { } color.PrintLine(0,0, 0,1); color.PrintLine(0,1, 2,1); color.PrintLine(2,1, 2,0); color.PrintLine(2,0, 0,0);

Bridge – přepsaný motivační příklad class Program { public static void Main(string[] args) Shape s1 = new Rectangle(new RedColor()); Shape s2 = new Circle(new BlueColor()); s1.Draw(); s2.Draw(); Console.ReadKey(true); }

Bridge – výstup příkladu

Bridge – struktura Struktura Účastníci Abstraction RefinedAbstraction typicky obsahuje jen primitivní operace definuje složitější operace pomocí jednodušších z Implementoru Struktura Účastníci Abstraction definuje abstraktní rozhraní objektů, obsahuje odkaz na implementaci s pomocí metod rozhraní Implementor RefinedAbstraction rozšiřuje rozhraní a metody z Abstraction Implementor rozhraní implementací (obecně se liší od Abstraction) ConcreteImplementor konkrétní implementace rozhraní Implementor

Bridge Účel Předpoklady oddělit rozhraní a konkrétní implementace menší počet tříd pro implementaci nezávislý vývoj implementace snadná kompozice znovu-použitelnost implementací Předpoklady danou abstrakci navrhujeme existuje vhodný rozklad do primitivních operací

Bridge – použití Kdy je vhodné použít návrhový vzor Bridge? Nechceme, aby rozhraní a implementace byly pevně svázány možnost výběru nebo přepínání implementace za běhu Chceme: abstrakci a její implementace rozšiřitelné pomoci dědičnosti kombinovat a nezávisle rozšiřovat implementace nemá vliv na klientský kód není nutná rekompilace (stačí znovu pustit linker) skrýt detaily implementace privátní data a metody se píší do hlavičkového souboru (C++) sdílet implementaci mezi více objekty nechceme, aby o tom klient věděl např. reference counting, structural sharing immutable objektů

Bridge – varianty, diskuze Jeden Implementor [PIMPL (Pointer to IMPLementation)] degenerovaný případ účel: skrytí detailů implementace Abstraction má odkaz na třídu Implementor při změně implementace není třeba rekompilovat klientský kód Více Implementorů Implementor se vybere v konstruktoru Abstraction implementaci může vytvářet i Abstract Factory Sdílení Implementorů Implementor je sdílen více objekty více objektů Abstraction má stejný objekt Implementor C++ - reference counting pro zrušení implementace po zrušení posledního odkazu

Bridge – související návrhové vzory Abstract Factory vytváří instance implementací java.awt.Toolkit, java.sql.DriverManager Adapter stejně jako Bridge implementuje rozhraní jedné třídy pomocí metod jiné třídy používá se v případě, že chceme nějakou již existující třídu přizpůsobit požadovanému rozhraní Bridge se používá už v době návrhu tříd Facade pár Abstrakce a Implementor jsou degenerovaný případ Abstrakce může zjednodušovat rozhraní Implementoru

Příklad č. 2

Motivace

Exploze počtu tříd

Rozdělme rozhraní a implementaci Řešení Rozdělme rozhraní a implementaci

Klientská část rozhraní Řešení Klientská část rozhraní

Řešení Abstrakce implementace Klientská část rozhraní

Řešení Abstrakce implementace Klientská část rozhraní Implementováno pomocí abstraktní implementace

Řešení

Bridge – příklad Příklad: multiplatformní systém pro tvorbu GUI rozhraní objektů rozšířené rozhraní odkaz na Implementora class Window { private: WindowImp* imp; public: void DrawContents() = 0; void DrawRect( Point p1, Point p2) { imp = getWindowImp(); imp->Rect(p1.getX(), p1.getY(), p2.getX(), p2.getY()); } protected: WindowImp getWindowImp() { if (imp == nullptr) { imp = WindowFactory.getInstance.makeWindowImp(); return imp; rozhraní pro potomky inicializace na žádost konkrétní implementace class IconWindow : public Window { public: void DrawContents() { WindowImp* imp = getWindowImp(); imp->Bitmap(”icon”, new Coord(0.0), new Coord(0.0)); } delegace

Bridge – příklad Příklad: multiplatformní systém pro tvorbu GUI rozhraní implementací primitivní metody implementace XWindow a WinWindow implementují rozhraní WindowImp konkrétní kreslící funkce mohou obsahovat privátní položky class WindowImp { public: virtual void Rect(Coord c1, Coord c2, Coord c3, Coord c4) = 0; virtual void Text(String string, Coord c1, Coord c2) = 0; virtual void Bitmap(String string, Coord c1, Coord c2) = 0; ... } class XWindowImp : WindowImp { public: virtual void Rect( Coord c1, Coord c2, Coord c3, Coord c4) { ... } ... } class WinWindowImp : WindowImp { public: void Rect( Coord c1, Coord c2, Coord c3, Coord c4) { ... }

Diskuze