Bridge.

Slides:



Advertisements
Podobné prezentace
Funkce Připomeňme si program pro výpočet faktoriálu:
Advertisements

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
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.
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
Adapter. Adapter – pojem Součástka navržená k propojení dvou „nekompatibilních“ zařízení Definice slova podle Cambridge Advanced Learner's Dictionary:
Strategy. Strategy – „All-in-1“ na začátek class AStrategy { public: virtual void Algorithm()=0; protected: AStrategy(); }; class SpecificStrategy: public.
Composite [kompozit, ne kompozajt]. Composite Výslovnost  kompozit, ne kompozajt Účel  Popisuje, jak postavit hierarchii tříd složenou ze dvou druhů.
IB111 Programování a algoritmizace
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.
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.
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.
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ř.
Prototyp. O čem to bude? Prototyp Záměr  vytváření objektů  nový objekt se vytváří kopírováním (klonováním) vzoru – prototypu.
Composite “ Spojuj a panuj ”. Zakladní vlastnosti Výslovnost  kompozit, ne kompozajt Účel  Popisuje, jak postavit strukturované hierarchie tříd, v níž.
Petr Puš Software Architect Unicorn a.s. Microsoft C# MVP.
Programování v jazyce C++ Dědičnost a polymorfismus.
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:
TurIS Turistický informační systém ITERACE 2 Ondřej Brožek Martin Cízler Zuzana Hynoušová Roman Jonáš Petr Pulc.
Číslo projektuCZ.1.07/1.5.00/ Číslo materiáluVY_32_INOVACE_30-03 Název školy Střední průmyslová škola stavební, České Budějovice, Resslova 2 AutorRNDr.
Memento. Motivace – kalkulačka 210° sin * /20 ? 0.25 ^2 ?
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á.
Facade [f ə ˈ s ɑː d]f ə ˈ s ɑː d. Facade Před: Po:
Mnohočleny Gymnázium a Jazyková škola s právem státní jazykové zkoušky Zlín Tematická oblast Matematika – výrazy s proměnnými Datum vytvoření
Definice tématu II Robert Zbíral
C# konzole – TEST Program spotřeba vody
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
COM – Práce s objektovým modelem jiné aplikace
Výukový materiál zpracován v rámci projektu
State 1.
Programování v jazyce C++
Abstraktní datové typy
Rysy MS Windows Možnost multitaskingu a multithreadingu
Návrhový vzor Flyweight
Configuration Patterns
Algoritmizace a programování
C# konzole – Program emoce
Abstract Factory.
C# konzole – Součet dvou čísel
C# Vícevláknové aplikace
C# konzole – Program pro výpočet výrazu
Výukový materiál zpracován v rámci projektu
Bridge.
Cvičení 4 Dědičnost objektů.
RUBY.
Informatika pro ekonomy přednáška 8
WORKSHOP Ochrana dat (GDPR)
Visitor 1 1.
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.“
Název školy: Autor: Název: Číslo projektu: Název projektu:
Procenta kolem nás Jednoduché úrokování VY_42_INOVACE_34_01.
Přednášky z Distribuovaných systémů
C# přehled vlastností.
Kontrolní práce – složené lomené výrazy
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
C# konzole – Textový výstup
Vázání dat Data Binding
Úvod do objektového návrhu
Výčtové typy ( Java 5 ) Výčtové typy jsou speciální třídy zavedené pro větší bezpečí a pohodlí. V nejjednodušší variantě se definují příkladmo takto:
Hromadné dokumenty opakující se pro kolekci osob
Adapter
Composite “Spojuj a panuj”.
Class Diagrams.
Transkript prezentace:

Bridge

Záměr Oddělení abstrakce od implementace (tak, aby se mohly nezávisle na sobě měnit)

Příklad č. 1 (schéma)

Příklad č. 1 (schéma)

Příklad č. 1 (schéma)

Příklad č. 1 (schéma)

Schéma

Příklad č. 1 (kód) public interface IColor { 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;

Příklad č. 1 (kód) { protected IColor color; public abstract class Shape { protected IColor color; protected Shape(IColor color) this.color = color; } public abstract void Draw();

Příklad č. 1 (kód) { public Circle(IColor color) : base(color) { } 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);

Příklad č. 1 (kód) { public static void Main(string[] args) 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); }

Příklad č. 2

Příklad č. 2

Exploze počtu tříd

Oddelění rozhraní (abstrakce) a implementace (= záměr GoF Bridge) Příklad č. 2 (+ Bridge) Oddelění rozhraní (abstrakce) a implementace (= záměr GoF Bridge)

Příklad č. 2 (+ Bridge) Abstrakce implementace Klientská část rozhraní Implementováno pomocí abstraktní implementace

Příklad č. 2 (+ Bridge)

Obecné schéma GoF Bridge

Obecné schéma GoF Bridge Abstraction​ definuje abstraktní rozhraní (obecné chování) objektů,  obsahuje odkaz na Implementor​ RefinedAbstraction​ rozšiřuje/upravuje abstraktní rozhraní Implementor​ rozhraní implementací (obecně se liší libovolnou měrou od Abstraction)​ ConcreteImplementor ​ konkrétní implementace rozhraní Implementor​

definuje složitější operace pomocí jednodušších z Implementoru Role objektů v GoF Bridge (High-Level vs Low-Level) definuje složitější operace pomocí jednodušších z Implementoru typicky obsahuje jen primitivní operace

Možnosti implementace Implementoru Právě jeden Implementor [PIMPL] "degenerovaný Bridge"  není potřeba mít abstraktního předka (Implementor) lze takto skrýt detaily implementace před klientem při změně implementace není třeba rekompilovat klientský kód (stačí přelinkovat) Dva a více Implementorů Implementor se vybere v konstruktoru Abstraction implementaci může vytvářet i Abstract Factory (preferované)  implementace lze za run-time měnit (např. výběr efektivnějšího algoritmu – dle velikosti dat) Sdílení Implementorů Implementor je sdílen více objekty více objektů Abstraction má stejný objekt Implementor (C++) Reference counting (chybí GC) zrušení instance reprezentující implementaci po zrušení posledního odkazu

Připomenutí - schéma příkladu č. 2

konkrétní implementace Příklad č. 2 (kód) Příklad: multiplatformní systém pro tvorbu GUI rozhraní objektů (abstrakce - abstraktní třída) rozšířené rozhraní (konkrétní třída, dědí z Window) 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 konkrétní implementace class IconWindow : public Window { public: void DrawContents() { WindowImp* imp = getWindowImp(); imp->Bitmap(”icon”, new Coord(0.0), new Coord(0.0)); }

Příklad č. 2 (kód) 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) { ... }

Proč použít Bridge? Flexibilnější návrh oddělení abstraktního obecného mechanismu od "system-dependent stuff", aj. změna návrhu abstrakce neovlivňuje implementaci (a vice versa) možnost výběru implementace za běhu nezávislý vývoj implementace znovupoužitelnost implementací (např. pro další Bridge) (C++) Skrytí implementačních detailů před uživateli idiom PImpl Pointer to implementation https://www.youtube.com/watch?v=KOMl2p49rvo

Související návrhové vzory Abstract Factory Adapter jiný účel, jiná fáze vývoje Adapter - po návrhu, zajištění spolupráce mezi nezávislými třídami Bridge - při návrhu, abstrakce mající více implementací Object Adapter Bridge