Návrhové vzory. n OO jazyky - široká paleta technických prostředků. n Návrhový vzor. n rozhraní!! n volnější vazby, parametrizace
|
|
- Iveta Bílková
- před 8 lety
- Počet zobrazení:
Transkript
1 Návrhové vzory
2 Návrhové vzory n OO jazyky - široká paleta technických prostředků q dědičnost, polymorfismus, šablony, reference, přetěžování,... q problém - jak toto všechno efektivně používat q cíl - udržovatelný a rozšiřovatelný 'velký' software n rozhraní!! n volnější vazby, parametrizace n dědičnost implementace vs. dědičnost rozhraní n dědičnost vs delegace n Návrhový vzor q pojmenované a popsané řešení typického problému q principiálně existují již dlouho n architektura: Christopher Alexander - pojem 'Pattern' n literatura: tragický hrdina, romantická (tele)novela,...
3 Návrhové vzory v software n Software q asi žádný jiný obor si nelibuje ve vynalézání kola stále znovu q strukturovaný přístup n spojové seznamy, stromy, rekurze,... q OOP - systém reusabilních návrhových vzorů (NV) n Co má NV pro typickou situaci popisovat q jak a kdy mají být objekty vytvářeny q jaké vztahy a struktury mají obsahovat třídy q jaké chování mají mít třídy, jak mají spolupracovat objekty
4 Definice a použití Návrhový vzor je popis komunikujících objektů a tříd uzpůsobených k řešení obecného problému v konkrétním kontextu n Relativní komplexnost a obecnost q pro rozsáhlejší systémy n předpoklad dlouhé životnosti, údržby a rozšiřování q při návrhu nových systémů q při rozsáhlých úpravách n Inženýrský přístup q přehled o existenci a typickém použití q při návrhu hledat uplatnění n 'Revouční' myšlenka GoF q vytvoření utříděného katalogu 23 vzorů ve 3 kategoriích q v současnosti množství dalších vzorů n často pro specializované použití
5 Základní prvky n Název q co nejvíce vystihující podstatu, usnadnění komunikace - společný slovník n Problém q obecná situace kterou má NV řešit, podmínky použití n Řešení q soubor pravidel a vztahů popisujících jak dosáhnout řešení problému q nejen statická struktura, ale i dynamika chování n Souvislosti a důsledky q detailní vysvětlení použití, implementace a principu fungování q způsob práce s NV v praxi n Příklady q definice konkrétního problému, vstupní podmínky, popis implementace a výsledek n Související vzory q použití jednoho NV nepředstavuje typicky ucelené řešení - řetězec NV q okolnosti pro rozhodování mezi různými NV
6 Kategorie základních NV Creational Tvořivé vzory Structural Strukturální vzory Behavioral Vzory chování Třída Factory Method Adapter Interpreter Template Method Objekt Abstract Factory Builder Prototype Singleton Bridge Composite Decorator Facade Proxy Flyweight Chain of Responsibility Command Iterator Mediator Memento Observer State Strategy Visitor vytváření objektů uspořádání tříd a objektů chování a interakce objektů a tříd
7 Kategorie základních NV Creational Tvořivé vzory Structural Strukturální vzory Behavioral Vzory chování Třída Factory Method Adapter Interpreter Template Method Objekt Abstract Factory Builder Prototype Singleton Bridge Composite Decorator Facade Proxy Flyweight Chain of Responsibility Command Iterator Mediator Memento Observer State Strategy Visitor vytváření objektů uspořádání tříd a objektů chování a interakce objektů a tříd
8 Vztahy mezi NV
9 Značení Object Modeling Technique class diagrams object diagrams interaction diagrams
10 Tvořivé NV n Creational Patterns n Abstrakce procesu vytváření objektů q umožňují ovlivnit způsob vytváření objektů a jejich počet q často nestačí použít new, např. pokud typ objektu závisí na parametrech n Užitečné při převažující objektové kompozici (místo dědičnosti) q místo napevno naprogramovaného chování množina obecnějších metod q větší flexibilita co se vytváří, kdo to vytváří, jak a kdy se to vytváří n Typické prostředky q zapouzdření znalosti o použití konkrétní třídy q zakrytí vzniku a skládání objektů n Tvořivé vzory q Singleton - zaručí pouze jednu instance třídy q Factory Method - vytváří instance vybrané třídy - virtuální funkce místo new q Abstract Factory - vytváří objekty pro vybranou skupinu tříd - tovární třída q Builder - odděluje způsob vytvoření objektu od reprezentace, postupné vytváření q Prototype - umožňuje zkopírovat (klonovat) inicializovanou instanci
11 Bludiště n Jednotný příklad pro tvořivé NV - vytvoření bludiště q množina místností, místnost zná své sousedy - zeď, jiná místnost nebo dveře komponenty
12 Bludiště - prvotní implementace import static System.*; enum Direction {North, South, East, West}; interface MapSite { void enter(); }; class Room implements MapSite { MapSite sides[4]; int roomnumber; }; Room(int roomno) { roomnumber = roomno; } MapSite getside(direction d) {..}; void setside(direction d, MapSite m){..}; void enter() {..}; Enter - soused je: místnost nebo otevřené dveře projít J zeď nebo zavřené dveře stát L class Wall implements MapSite { public: Wall() {}; void enter() {}; }; class Door implements MapSite { Room room1; Room room2; boolean isopen; }; Door(Room r1, Room r2) {}; void enter() {}; Room othersidefrom(room r) {}; class Maze { Maze() {out.print( creating )} void addroom(room r) {}; Room roomno(int) {}; };
13 Bludiště - prvotní implementace import static System.*; enum Direction {North, South, East, West}; interface MapSite { void enter(); }; class Room implements MapSite { MapSite sides[4]; int roomnumber; }; Room(int roomno) { roomnumber = roomno; } final MapSite getside(direction d) {..}; final void setside(..){..}; void enter() {..}; Enter - soused je: místnost nebo otevřené dveře projít J zeď nebo zavřené dveře stát L class Wall implements MapSite { public: Wall() {}; void enter() {}; }; class Door implements MapSite { Room room1; Room room2; boolean isopen; }; Door(Room r1, Room r2) {}; void enter() {}; final Room othersidefrom(..) {}; class Maze { Maze() {out.print( creating )} final void addroom(room r) {}; final Room roomno(int) {}; };
14 Bludiště n Jednotný příklad pro tvořivé NV - vytvoření bludiště q množina místností, místnost zná své sousedy - zeď, jiná místnost nebo dveře komponenty
15 Bludiště - vytvoření import static package.direction.*; class MazeGame { Maze createmaze () { Maze maze = new Maze(); Room r1 = new Room(1); Room r2 = new Room(2); Door thedoor = new Door(r1, r2); vytvoření bludiště se 2 místnostmi místnosti a dveře mezi nimi hranice místností maze.addroom(r1); maze.addroom(r2); } r1.setside(north, new Wall()); r1.setside(east, thedoor); r1.setside(south, new Wall()); r1.setside(west, new Wall()); r2.setside(north, new Wall()); r2.setside(east, new Wall()); r2.setside(south, new Wall()); r2.setside(west, thedoor); return maze; n poměrně komplikované n neflexibilní!! q změna tvaru - změna metody q změna chování - nutnost přepsání q DoorNeedingSpell, SpecialRoom n hard coded M
16 Možná vylepšení pomocí tvořivých NV Zvýšení flexibility - odstranění explicitních referencí na konkrétní třídy n Singleton q zaručí jedinečnost instance bludiště a přístup k ní bez potřeby globálních dat n Factory Method q CreateMaze při vytváření komponent volá virtuální funkci místo konstruktoru q potomek MazeGame může změnou virtuální funkce vytvářet instance jiných tříd n Abstract Factory q CreateMaze dostane parametr objekt pro vytváření komponent q možnost změny instanciovaných tříd předáním jiného parametru n Builder q CreateMaze dostane parametr objekt s operacemi pro přidávání komponent q pomocí dědičnost lze lzměnit jednotlivé vytvářené části nebo způsob vytváření n Prototype q CreateMaze dostane parametry prototypy objektů které se umí klonovat q možnost změny předáním jiných (poděděných) parametrů
17 Konkrétní tvořivé NV n Na samostatných slajdech q Singleton q Factory Method q Abstract Factory q Builder q Prototype
18 Tvořivé NV - shrnutí n Singleton q jednoduché použití pokud není nutné řešit destrukci objektů q různé varianty pro vzájemně provázané objekty n Factory Method q flexibilita za relativně malou cenu - obvyklá základní metoda, virtual constructor q nevýhoda: nutnost dědičnosti i pro změnu třídy produktu n Product/ConcreteProduct, Creator/ConcreteCreartor - šablony / generics q odložená inicializace n Abstract Factory, Builder, Prototype q flexibilnější, složitější - použití až při zjištění potřeby větší flexibility q kompozice objektů n továrního objektu zodpovědný za znalost třídy produktů a jejich výrobu q Abstract Factory n tovární objekt vytváří objekty více souvisejících tříd q Builder n tovární objekt vytváří složený objekt postupně pomocí odpovídajícího protokolu q Prototype n nové objekty se vytvářejí kopírováním prototypových objektů n prototypy se umějí samy klonovat
19 Tvořivé NV - srovnání n Maze aaa createmaze() { Maze maze = makemaze(); Room r1 = makeroom(1); Room r2 = makeroom(2); Door thedoor = makedoor(r1, r2); Maze createmaze( MazeFactory factory) { Maze maze = factory.makemaze(); Room r1 = factory.makeroom(1); Room r2 = factory.makeroom(2); Door door = factory.makedoor(r1,r2); Maze createmaze( MazeBuilder builder) { builder.buildmaze(); Factory Method builder.buildroom(1); builder.buildroom(2); builder.builddoor(1, 2); Abstract Factory return builder.getmaze(); MazeProtoFactory simplemazefactory = new MazeProtoFactory ( new Maze(), new Wall(), new Room(), new Door() Builder ); Maze maze = game.createmaze( simplemazefactory); Prototype MazeProtoFactory { Wall makewall () { return protowall.clone(); } Door makedoor (Room r1, Room r2) { Door door = protodoor.clone(); door.initialize(r1, r2); return door; }
20 Strukturální NV n Structural Patterns q jak jsou třídy a objekty složeny do větších struktur n Strukturální NV tříd q dědičnost pro skládání rozhraní nebo implementací q Adapter - přizpůsobení rozhraní třídy jiným rozhraním n Strukturální NV objektů q skládání objektů pro dosažení nové funkcionality q runtime skládání - větší flexibilita q Bridge - lepší separace rozhraní a implementace q Facade - reprezentace celého systému jedním objektem, jednotné rozhraní q Proxy - zástupce jiného objektu q Decorator - dynamické přidávání funkčnosti k objektům q Composite - hierarchie tříd tvořená dvěma druhy objektů - primitivní a složené q Flyweight - efektivní struktura pro velké množství sdílených objektů
21 Konkrétní strukturální NV Na samostatných slajdech q Adapter n přizpůsobení rozhraní třídy na rozhraní jiné třídy, spolupráce tříd s různým rozhraním q Bridge n odděluje abstrakci od implementace n předchází nárůstu počtu tříd při přidávání implementací q Facade n definuje jedno společné rozhraní pro subsystém q Proxy n zástupce/náhradník objektu, kontrola přístupu k objektu q Decorator n rozšiřuje objekt o nové vlastnosti n dynamický (dědění=statické), transparentní (rozšiřovaný objekt nic neví) q Composite n jak postavit hierarchii tříd složenou ze dvou druhů objektů: primitivní a složené n složené objekty se rekurzivně skládají z primitivních a dalších složených objektů q Flyweight n podpora většího počtu jednoduchých objektů
22 Adapter vs. Bridge
23 Adapter vs. Bridge n Společné vlastnosti q flexibilita - stupeň indirekce vůči jiným objektům, zasílání zpráv přes jiné rozhraní n Základní rozdíl - účel q Adapter n vyřešení nekompatibilit mezi dvěma existujícími rozhraními n jak zajistit aby dvě nezávislé třídy mohly spolupracovat bez reimplementace q Bridge n poskytuje relativně stabilní rozhraní pro potenciálně velký počet implementací n zachovává rozhraní i při dalším vývoji a změně implementačních tříd n Důsledek: časté použití při různých fázích vývojového cyklu q Adapter n při nepředvídané (pozdější) potřebě spolupráce dvou nekompatibilních tříd n použití PO návrhu q Bridge n při poznání, že abstrakce může mít více implementací, které se můžou dále vyvíjet n použití PŘI návrhu q... což neznamená, že Adapter je méně hodnotný než Bridge, jen řeší jiný problém
24 Composite vs. Decorator vs. Proxy
25 Composite vs. Decorator vs. Proxy n Composite a Decorator - podobná struktura q rekurzivní struktura - Decorator jako speciální případ Compositu? q ne - různé účely q Decorator n zabraňuje explozi odvozených tříd při přidávání kombinací funkčnosti q Composite n struktura - objekty různého druhu (vč. složených) se zpracovávají jednotně n zaměřen na reprezentaci objektů, ne na zdobení n Proxy a Decorator - podobná struktura q Proxy n stupeň indirekce pro přístup k objektu - jednotné rozhraní q implementace obsahují reference na jiný objekt, kterému zasílají zprávy n není určen k dynamickému přidávání a odstraňování vlastností n není určen k reprezentaci rekurzivní struktury q Decorator n component poskytuje pouze část funkčnosti n celková funkčnost objektu nemusí být určena v době kompilace n základní rys Decoratoru - neomezenost pomocí rekurzivní struktury
26 NV chování n Behavioral design patterns q rozdělení funkčnosti a zodpovědnosti mezi objekty q komunikace mezi objekty q složitější struktura provádění kódu q umožňuje zaměřit se při návrhu na propojení tříd, ne na běhové technické detaily q dynamické vztahy - RT vlastnosti q vzájemná provázanost n Behavioral class patterns q použití dědičnosti pro rozložení chování mezi třídy q Template method n abstraktní definice algoritmu po jednotlivých krocích n každý krok je buď primitivní nebo abstraktní operace definovaná v odvozených třídách q Interpreter n reprezentace gramatiky jako hierarchie tříd n implementace interpretru jako operace na objektech
27 NV chování n Behavioral object patterns q spolupráce mezi skupinami objektů pro dosažení funkčnosti n Objektová kompozice místo dědičnosti q Mediator n odstraňuje nutnost referencí na všechny spolupracující objekty q Chain of Responsibility n zasílání zpráv neznámým objektům přes zřetězené objekty q Observer n definování závislosti objektu k více objektům, šíření události k závislým objektům n Zapouzdření chování objektu a řízení přístupu q Strategy n zapouzdření funkčnosti algoritmu do objektu, možnost jejich záměny q Command n zapouzdření požadavku na funkci, oddělení požadavku a vykonání funkce q State n zapouzdření stavu, možnost změny chování objektu při změně stavu q Visitor n zapouzdření chování, které by jinak bylo rozloženo mezi více tříd q Iterator n abstrakce procházení agragovaných objektů
28 Vztahy mezi odesílateli a příjemci zpráv Comand Separace příjemce (a parametrů) od okamžiku volání Observer neznámý počet příjemců Mediator centralizace komunikace přes prostředníka Chain of Responsibility neznámá struktura příjemců i v okamžiku volání
29 Závěr n Shrnutí q 'Žádné velké moudro' n... jak pro koho q Slovník! q Implementace bez vymýšlení kola n... a 'bez chyb' q Kompozice NV q Generické implementace q Mnoho dalších rozšiřujících vzorů n často cíleně zaměřených
Literatura. E. Gamma, R. Helm, R. Johnson, J. Vlissides The Gang of Four (GoF) Design Patterns Elements of Reusable Object-Oriented Software 1995
Návrhové vzory Literatura E. Gamma, R. Helm, R. Johnson, J. Vlissides The Gang of Four (GoF) Design Patterns Elements of Reusable Object-Oriented Software 1995 Grada 2003: Návrh programů podle vzorů J.
Návrhové vzory. Jakub Klemsa, Jan Legerský. 30. října Objektově orientované programování.
Jakub Klemsa Jan Legerský Objektově orientované programování klemsjak@fjfi.cvut.cz jan.legersky@gmail.com 30. října 2012 návrhový vzor (design pattern) obecné řešení problému, které se využívá při návrhu
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
Seminář Java Návrhové vzory Radek Kočí Fakulta informačních technologií VUT Duben 2009 Radek Kočí Seminář Java Návrhové vzory 1/ 25 Znovupoužitelnost Dědičnost implementace třídy pomocí jiné (již existující)
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ář Java Návrhové vzory Radek Kočí Fakulta informačních technologií VUT Duben 2008 Radek Kočí Seminář Java Návrhové vzory 1/ 24 Znovupoužitelnost Dědičnost implementace třídy pomocí jiné (již existující)
Návrhové vzory OMO, LS 2014/2015
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
Kód, který se nebude často měnit
Factory Method Úvod - problém Mějme obchod s auty: public class OrderCars { public Car ordercar(string model) { Car car; Při přidání nového modelu je nutné upravit if(model.equals("mark IV")) car = new
specifikuje vytvářené objekty pomocí prototypické instance nový objekt vytváří kopírováním prototypu
Prototyp Prototyp Účel ( creational kategorie: vytvářecí pro objekty (class specifikuje vytvářené objekty pomocí prototypické instance nový objekt vytváří kopírováním prototypu Příklad obecný systém pro
ČÁST 1. Zahřívací kolo. Co je a k čemu je návrhový vzor 33
Stručný obsah Část 1: Zahřívací kolo Kapitola 1 Co je a k čemu je návrhový vzor 33 Kapitola 2 Zásady objektově orientovaného programování 39 Kapitola 3 Co konstruktor neumí (Jednoduchá tovární metoda Simple
Ú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:
Factory Method Úvod - problém n Mějme obchod s auty: public class OrderCars { public Car ordercar(string model) { Car car; Při přidání nového modelu je nutné upravit if(model.equals("mark IV")) { car =
Abstract Factory úvod
Abstract Factory Abstract Factory úvod Problém potřebujeme vytvářet objekty ze skupiny souvisejících tříd skupin je více, chceme je snadno vyměňovat můžeme používat (v jednom kontextu) pouze jednu skupinu
Design Patterns. Tomáš Herceg Microsoft MVP (ASP.NET) www.dotnetcollege.cz
Design Patterns Tomáš Herceg Microsoft MVP (ASP.NET) www.dotnetcollege.cz Základní návrhové vzory Kategorie Creational Patterns starají se o vytváření instancí Structural Patterns struktura komponent v
Bridge. Známý jako. Účel. Použitelnost. Handle/Body
Bridge Bridge Známý jako Handle/Body Účel odděluje abstrakci (rozhraní a jeho sémantiku) od její konkrétní implementace předchází zbytečnému nárůstu počtu tříd při přidávání implementací používá se v době
Vývoj informačních systémů. Architektura, návrh Vzory: Doménová logika
Vývoj informačních systémů Architektura, návrh Vzory: Doménová logika Zachman Framework Zdroje Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Design Patterns: Elements of Reusable Object-Oriented
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
Seminář Java Návrhové vzory, Zásady programování Radek Kočí Fakulta informačních technologií VUT Duben 2010 Radek Kočí Seminář Java Návrhové vzory, Zásady... 1/ 46 Obsah Znovupoužitelnost Návrhové vzory
Základy objektové orientace I. Únor 2010
Seminář Java Základy objektové orientace I Radek Kočí Fakulta informačních technologií VUT Únor 2010 Radek Kočí Seminář Java Základy OO (1) 1/ 20 Téma přednášky Charakteristika objektově orientovaných
OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC
OMO 4 - Creational design patterns A Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC Ing. David Kadleček, PhD. kadlecd@fel.cvut.cz, david.kadlecek@cz.ibm.com 1 Creational
Vazba (volná, těsná) - míra znalosti jedné třídy*komponenty o druhé.
Návrhové vzory. Komponentový návrh, volná vazba versus těsná vazba. Oddělení politiky od mechanismu. Návrh distribuovaných systémů s použitím webových služeb a servisně orientované architektury (SOA).
Vyřešené teoretické otázky do OOP ( )
Vyřešené teoretické otázky do OOP (16. 1. 2013) 1) Vyjmenujte v historickém pořadí hlavní programovací paradigmata a stručně charakterizujte každé paradigma. a) Naivní chaotičnost, špatná syntaxe a sémantika
PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITY PALACKÉHO KATEDRA INFORMATIKY BAKALÁŘSKÁ PRÁCE. Návrhové vzory. 2013 Dan Doležel
PŘÍRODOVĚDECKÁ FAKULTA UNIVERZITY PALACKÉHO KATEDRA INFORMATIKY BAKALÁŘSKÁ PRÁCE Návrhové vzory 2013 Dan Doležel Anotace Návrhové vzory jsou doporučené postupy pro řešení často se vyskytujících úloh. V
IB111 Programování a algoritmizace. Objektově orientované programování (OOP)
IB111 Programování a algoritmizace Objektově orientované programování (OOP) OP a OOP Objekt Kombinuje data a funkce a poskytuje určité rozhraní. OP = objektové programování Vše musí být objekty Např. Smalltalk,
MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ
MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ 1) PROGRAM, ZDROJOVÝ KÓD, PŘEKLAD PROGRAMU 3 2) HISTORIE TVORBY PROGRAMŮ 3 3) SYNTAXE A SÉMANTIKA 3 4) SPECIFIKACE
Zpracoval: houzvjir@fel.cvut.cz
Zpracoval: houzvjir@fel.cvut.cz 15. Návrhové vzory. Komponentový návrh, volná vazba versus těsná vazba. Oddělení politiky od mechanismu. Doménově specifické jazyky (DSL). (A7B36OMO) Obsah Návrhové vzory...
PB161 Programování v jazyce C++ Přednáška 7
PB161 Programování v jazyce C++ Přednáška 7 Statické položky tříd Základy OOP Nikola Beneš 6. listopadu 2018 PB161 přednáška 7: static, základy OOP 6. listopadu 2018 1 / 21 Klíčové slovo static Znáte z
PB161 Programování v jazyce C++ Přednáška 7
PB161 Programování v jazyce C++ Přednáška 7 Statické položky tříd Základy OOP Nikola Beneš 6. listopadu 2018 PB161 přednáška 7: static, základy OOP 6. listopadu 2018 1 / 21 Klíčové slovo static Znáte z
Návrhový vzor Factory v JAVA API
Návrhový vzor Factory v JAVA API Martin Kot Katedra informatiky VŠB - Technická univerzita Ostrava martin.kot.fei@vsb.cz Abstrakt V třídách API jazyka JAVA je použito mnoho návrhových vzorů. Najdeme zde
, Brno Připravil: David Procházka Návrhové vzory
7. 10. 2010, Brno Připravil: David Procházka Návrhové vzory Základy objektově orientovaného návrhu Design Patterns NV (Design patterns) můžeme s nadsázkou označit za ntu, jak řešit určitý problém nejen
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
State State Známý jako Stav, Object for States Účel umožňuje objektu měnit svoje chování v závislosti na stavu objekt mění svou třídu Použitelnost chování objektu závisí na jeho stavu, který se mění za
Návrhové vzory Design Patterns
Návrhové vzory Design Patterns doc. Ing. František Huňka, CSc. Ostravská univerzita PřF 1 Definice vzoru Každý vzor popisuje problém, který nastává opakovaně v našem prostředí, a potom popisuje podstatu
Problém, jehož různé instance je třeba často řešit Tyto instance lze vyjádřit větami v jednoduchém jazyce
Interpreter Interpreter Motivace Problém, jehož různé instance je třeba často řešit Tyto instance lze vyjádřit větami v jednoduchém jazyce Příklad: zda daný textový řetězec odpovídá nějakému vzoru (match)
Generické programování
Generické programování Od C# verze 2.0 = vytváření kódu s obecným datovým typem Příklad generická metoda, zamění dva parametry: static void Swap(ref T p1, ref T p2) T temp; temp = p1; p1 = p2; p2 =
11.5.2012. 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
Obsah přednášky 9 Základy programování (IZAPR, IZKPR) Přednáška 9 Základy dědičnosti, přístupová práva Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 03 022, Náměstí Čs. legií
Dědění, polymorfismus
Programování v jazyce C/C++ Ladislav Vagner úprava Pavel Strnad Dědění. Polymorfismus. Dnešní přednáška Statická a dynamická vazba. Vnitřní reprezentace. VMT tabulka virtuálních metod. Časté chyby. Minulá
Observer. Klasifikace. Alias. Smysl. Potřeba sledování změn objektu a notifikace. Obdoba systému událostí (C#, Java) vlastními prostředky
Observer Observer Klasifikace Object Behavioral Alias Dependents Publish-subscribe Smysl Zavádí možnost sledování změn u objektu tak, že když objekt změní stav, ostatní objekty na tuto změnu zareagují,
Programování v C++ 2, 4. cvičení
Programování v C++ 2, 4. cvičení statické atributy a metody, konstruktory 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Přístupová práva
OBJEKTOVÉ PROGRAMOVÁNÍ V C++ V PŘÍKLADECH 8 Proudová knihovna 8.1 Hierarchie proudů... 8-1 8.2 Standardně zavedené proudy... 8-1 8.
David MATOUŠEK OBJEKTOVÉ PROGRAMOVÁNÍ V C++ V PØÍKLADECH Praha 2011 David Matoušek Objektové programování v C++ v pøíkladech Lektoroval Ing. Bohumil Brtník, Ph.D. Bez pøedchozího písemného svolení nakladatelství
Objektové programování
Objektové programování - přináší nové možnosti a styl programování - vytváří nový datový typ, který umí vše co standardní datové typy + to co ho naučíme - překladač se k tomuto typu chová stejně jako k
typová konverze typová inference
Seminář Java Programování v Javě II Radek Kočí Fakulta informačních technologií VUT Únor 2008 Radek Kočí Seminář Java Programování v Javě (2) 1/ 36 Téma přednášky Rozhraní: použití, dědičnost Hierarchie
14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.
Základy programování (IZAPR) Přednáška 7 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 229, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky 7 Parametry metod, předávání
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.
23. Třídy, generické třídy, instance, skládání, statické metody a proměnné. Zapouzdření, konstruktory, konzistence objektu, zpřístupnění vnitřní implementace, modifikátory public a private. Polymorfismus,
Dědičnost (inheritance)
Dědičnost (inheritance) Úvod Umožňuje objektům převzít (zdědit) členy jiných objektů a pouze je rozšířit o Auto: lze odvodit Vztah je osobní auto, cisterna jsou auta Základní pojmy Bázová třída (rodič)
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...
Seminář Java X Radek Kočí Fakulta informačních technologií VUT Duben 2011 Radek Kočí Seminář Java Návrhové vzory, Zásady... 1/ 37 Obsah Znovupoužitelnost Návrhové vzory Zásady programování Radek Kočí Seminář
Teoretické minimum z PJV
Teoretické minimum z PJV Pozn.: následující text popisuje vlastnosti jazyka Java zjednodušeně pouze pro potřeby výuky. Třída Zavádí se v programu deklarací třídy což je část programu od klíčových slov
Programování II. Třídy a objekty (objektová orientovanost) 2018/19
Programování II Třídy a objekty (objektová orientovanost) 2018/19 Osnova přednášky Objektový přístup (proč potřebujeme objekty). Třídy, objekty,... Příklad. Proč potřebujeme objekty? Udržovatelnost softwaru
Výčtový typ strana 67
Výčtový typ strana 67 8. Výčtový typ V této kapitole si ukážeme, jak implementovat v Javě statické seznamy konstant (hodnot). Příkladem mohou být dny v týdnu, měsíce v roce, planety obíhající kolem slunce
Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky
JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance
6 Objektově-orientovaný vývoj programového vybavení
6 Objektově-orientovaný vývoj programového vybavení 6.1 Co značí objektově-orientovaný - organizace SW jako kolekce diskrétních objektů, které zahrnují jak data tak chování objekt: OMG: Objekt je věc (thing).
1. Dědičnost a polymorfismus
1. Dědičnost a polymorfismus Cíl látky Cílem této kapitoly je představit klíčové pojmy dědičnosti a polymorfismu. Předtím však je nutné se seznámit se základními pojmy zobecnění neboli generalizace. Komentář
Architektura softwarových systémů
Architektura softwarových systémů Definice, Strukturní a Procesní doporučení Ing. Tomáš Černý, MSCS Pojem softwarové architektury (SA) Obvyklé způsoby vysvětlování pojmu SA komponenty a vazby celková struktura
IoC/DI. Tomáš Herceg Microsoft MVP (ASP.NET) www.dotnetcollege.cz
IoC/DI Tomáš Herceg Microsoft MVP (ASP.NET) www.dotnetcollege.cz SOLID 5 pravidel pro testovatelný kód Na netestovatelném kódu se IoC/DI používá špatně SOLID Single Responsibility Principle Každá třída
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
UML. Unified Modeling Language. Součásti UML
UML Unified Modeling Language 1995 počátek 1997 verze 1.0 leden dnes verze 2.0 (vývoj stále nedokončen) Standardní notace OMG podpora velkých firem (Microsoft, IBM, Oracle, HP ) popisuje struktury popisuje
3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda
1. Lze vždy z tzv. instanční třídy vytvořit objekt? 2. Co je nejčastější příčinou vzniku chyb? A. Specifikace B. Testování C. Návrh D. Analýza E. Kódování 3. Je defenzivní programování technikou skrývání
NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti
NetBeans platforma Aplikační programování v Javě (BI-APJ) - 7 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha Evropský sociální fond Praha & EU: Investujeme
Programování II. Modularita 2017/18
Programování II Modularita 2017/18 Modul? Osnova přednášky Vývoj programování Modularita Příklad Vývoj programování Paradigmata programování Jak a proč se jazyky vyvíjejí? V čem se OOP liší od předchozích
NPRG031 Programování II 1 / :25:46
NPRG031 Programování II 1 / 26 28. 2. 2018 11:25:46 Objekty Svět se skládá z objektů! konkrétní x abstraktní hmatatelné x nehmatatelné (letadlo) x (chyba v programu) Objekty mohou obsahovat jiné objekty
NMIN201 Objektově orientované programování 1 / :36:09
NMIN201 Objektově orientované programování 1 / 26 8.10.2013 15:36:09 Objekty Svět se skládá z objektů! konkrétní x abstraktní hmatatelné x nehmatatelné (letadlo) x (chyba v programu) Objekty mohou obsahovat
Motivační příklad reálný svět. výroba (assembly line)
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í
Dynamicky vázané metody. Pozdní vazba, virtuální metody
Dynamicky vázané metody Pozdní vazba, virtuální metody Motivace... class TBod protected: float x,y; public: int vrat_pocet_bodu() return 1; ; od třídy TBod odvodíme: class TUsecka: public TBod protected:
Programování II. Polymorfismus
Programování II Polymorfismus Osnova přednášky Vztah přetížení, překrytí a protected přístupu. Co je polymorfismus? Příklad. Přetížení, překrytí, protected Přetížení x překrytí Přetížením řešíme doplnění
Programování v C++ 2, 7. cvičení
Programování v C++ 2, 7. cvičení spojový seznam 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 Shrnutí minule procvičené látky Dědění
Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39
Programování v C# Hodnotové datové typy, řídící struktury Petr Vaněček 1 / 39 Obsah přednášky Referenční datové typy datové položky metody přístupové metody accessory, indexery Rozhraní Pole 2 / 39 Třídy
Obsah přednášky. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace UML. Co je diagram tříd. Ing. Ondřej Guth
Evropský sociální fond. 12. Dokumentace zdrojového kódu Tvorba elektronické dokumentace Ing. Ondřej Guth Katedra teoretické informatiky Fakulta informačních technologií České vysoké učení technické v Praze
Jazyk C++ I. Polymorfismus
Jazyk C++ I Polymorfismus AR 2013/2014 Jazyk C++ I Úvod Metody s časnou vazbou jsou překládány jako obyčejné céčkovské funkce. Této metodě je předán jako první implicitní parametr this. Rozdíl mezi obyčejnou
PB161 Základy OOP. Tomáš Brukner
PB161 Základy OOP Tomáš Brukner Sylabus - Co je to OOP? Jaké jsou základní principy OOP? Jak se projevují v C++? https://cs.wikipedia.org/wiki/strahovská_knihovna SELECT * FROM books WHERE pages < 250
Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí
Kolekce obecně Seznamy a iterátory doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Kolekce ::= homogenní sada prvků
IRAE 07/08 Přednáška č. 1
Úvod do předmětu OOP Objekt Proč OOP? Literatura, osnova předmětu viz. cvičení Základní prvek OOP sw inženýrství = model reálných objektů (věcí) člověk, auto, okno (ve windows), slovník, = model abstraktní
Chain of responsibility
Chain of responsibility Chain of responsibility n Známý jako n Účel q český překlad řetěz(ec) odpovědnosti q umožnit zasílání požadavků (zpráv) neznámým příjemcům q příjemci tvoří frontu è předávají si
Návrhové vzory. Každý návrhový vzor má následující strukturu: Většina publikací návrhové vzory člení do následujících kategorií:
jsou nedílnou součástí znalostní výbavy každého profesionála v oblasti tvorby softwaru. Umění aplikovat návrhové vzory je dnes stejně důležité jako znát knihovny a syntaxi příslušného programovacího jazyka.
Využití OOP v praxi -- Knihovna PHP -- Interval.cz
Page 1 of 6 Knihovna PHP Využití OOP v praxi Po dlouhé teorii přichází na řadu praxe. V následujícím textu si vysvětlíme možnosti přístupu k databázi pomocí různých vzorů objektově orientovaného programování
Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu
Seminář Java Zavádění tříd Radek Kočí Fakulta informačních technologií VUT Duben 2008 Radek Kočí Seminář Java Zavádění tříd 1/ 16 JVM zavádí třídy dynamicky Class loader objekt schopný zavádět třídy abstraktní
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
24. listopadu 2013, Brno Připravil: David Procházka
24. listopadu 2013, Brno Připravil: David Procházka Dědičnost Základy objektového návrhu Časná a pozdní vazba Strana 2 / 22 Obsah přednášky 1 Časná a pozdní vazba 2 Rozhraní pro dědičnost 3 Konstruktory
Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky
JAVA Třídy Definice třídy úplná definice [public] [abstract] [final] class Jmeno [extends Predek] [impelements SeznamInterfacu] {... // telo tridy public veřejná třída abstract nesmí být vytvářeny instance
Principy objektového návrhu. Přednáška 8, LS 2013/2014
Principy objektového návrhu Přednáška 8, LS 2013/2014 Principy objektového návrhu Cílem je vytvořit kvalitní návrh, který bude předcházet vzniku symptomů jako: Ztuhlost - změna SW je obtížná Křehkost -
Úvod do programovacích jazyků (Java)
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích
Objekty, třídy, vazby 2006 UOMO 30
Objekty, třídy, vazby 2006 UOMO 30 Osnova Vymezení pojmu objekt Objekt a základní objektové koncepty Třídy, třída vs. objekt Vztahy mezi objekty, vazby mezi třídami Polymorfismus 2006 UOMO 31 Vymezení
TÉMATICKÝ OKRUH Softwarové inženýrství
TÉMATICKÝ OKRUH Softwarové inženýrství Číslo otázky : 24. Otázka : Implementační fáze. Postupy při specifikaci organizace softwarových komponent pomocí UML. Mapování modelů na struktury programovacího
Facade. Známý jako. Účel. Motivace. Facade, Fasáda
Facade Facade Známý jako Facade, Fasáda Účel sjednocené high-level rozhraní pro subsystém zjednodušuje použití subsystému zapouzdření skrytí návrhu před uživateli Motivace zjednodušit komunikaci mezi subsystémy
7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd
7. přednáška - třídy, objekty třídy objekty atributy tříd metody tříd Algoritmizace (Y36ALG), Šumperk - 7. přednáška 1 Třída jako zdroj funkcionality Třída v jazyku Java je programová jednotka tvořená
7.5 Diagram tříd pokročilé techniky
7.5 Diagram tříd pokročilé techniky Stereotypy - jeden ze základních prostředků rozšiřitelnosti UML - pro modelovací konstrukce neexistující v UML, ale podobné předdefinované v UML definované uživatelem
Hiearchical MVC (Model-view-controller) vs. PAC (Presentation-abstraction-control)
Hiearchical MVC (Model-view-controller) vs. PAC (Presentation-abstraction-control) Problém HMVC úvod MVC v určitých aplikacích nedostačující Příklad: webová stránka s widgety Např. kalendář, hodnocení,
Struktura programu v době běhu
Struktura programu v době běhu Miroslav Beneš Dušan Kolář Struktura programu v době běhu Vztah mezi zdrojovým programem a činností přeloženého programu reprezentace dat správa paměti aktivace podprogramů
Abstraktní třída a rozhraní
Abstraktní třída a rozhraní Někdy se může stát, zejména při psaní v hierarchické struktuře hodně nadřazených tříd, že tušíme, že bude ve zděděných třídách vhodné použít nějakou metodu. Tuto metodu ještě
Programování v C++ 1, 5. cvičení
Programování v C++ 1, 5. cvičení konstruktory, nevirtuální dědění 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 3 Shrnutí minule procvičené
UML - opakování I N G. M A R T I N M O L H A N E C, C S C. Y 1 3 A N W
UML - opakování I N G. M A R T I N M O L H A N E C, C S C. Y 1 3 A N W Co je to UML Evoluce UML Diagram komponent Diagram odbavení Diagram tříd Aktivity diagram Stavový diagram Sekvenční diagram Diagram
Programování v C++ 1, 6. cvičení
Programování v C++ 1, 6. cvičení dědičnost, polymorfismus 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 2 3 Shrnutí minule procvičené
7 Jazyk UML (Unified Modeling Language)
7 Jazyk UML (Unified Modeling Language) 7.1 Základní charakteristika jazyka Motivace - vznik řady OO metod a metodologií (konec 80. let a první polovina 90.let) podobné notace vyjadřující totéž, komplikující
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13
Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13 KAPITOLA 1 Na úvod o Javě 15 Počítačový program 15 Vysokoúrovňový programovací
Programování II. Návrh programu II
Programování II Návrh programu II Osnova přednášky Dědičnost shrnutí. Návrh programu s využitím dědičnosti Dědičnost shrnutí Klíčové otázky CO je dědičnost? PROČ použít dědičnost? KDY použít dědičnost?
4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ
4. ZÁKLADNÍ POJMY Z OBJEKTOVĚ ORIENTOVANÉHO PROGRAMOVÁNÍ OBJEKT Program v Javě je staticky strukturován na třídy, jejichž instance (objekty) za běhu dynamicky programu vznikají a zanikají. Objekt je nejprve
Obsah. October 2, Polymorfizmus. Typologie testování. Problém polymorfizmu. Vady/Anomálie. Vazební sekvence ČVUT FEL, K13132
OO testování Radek Mařík ČVUT FEL, K13132 October 2, 2014 Radek Mařík (marikr@fel.cvut.cz) OO testování October 2, 2014 1 / 55 Obsah 1 Kĺıčové OO vlastnosti Dědičnost Řízení přístupu Polymorfizmus 2 Testování
Abstraktní datové typy: zásobník
Abstraktní datové typy: zásobník doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Abstraktní datové typy omezené rozhraní
Parametrizované třídy Generics generické třídy. JDK zavádí mimo jiné tzv. parametrizované třídy - generics
1 Parametrizované třídy Generics generické třídy JDK zavádí mimo jiné tzv. parametrizované třídy - generics Úvod 2 podobnost se šablonami (templates) z C++ nejčastěji použité v oblasti knihoven kontejnerového
Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans.
1 Grafické rozhraní Studijní cíl Tento blok je věnován vytváření programů s využitím grafického rozhraní (GUI). Vysvětlen bude základní filozofie pro vytváření aplikací s GUI ve srovnání s konzolovými
Třída. Atributy. Operace
Class Diagrams Třída Atributy Operace Třída Třída je jakýsi prototyp objektů. Za třídou si můžeme představit množinu jejích instancí. Každý objekt dané třídy má stejnou množinu atributů (proměnných) a
Arlow, J., Neustat, I.: UML2 a unifikovaný proces vývoje aplikací. Computer Press, Praha 2007.
Otázka 05 - Y36SIN Zadání Návrh - návrhové třídy a jejich transformace z analytických tříd, použití návrhových vzorů, návrh rozhraní, komponenty a nasazení, odpovídající diagramy v UML. (Y36SIN) Jen na
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
7.5 Diagram tříd pokročilé techniky
7.5 Diagram tříd pokročilé techniky Stereotypy - jeden ze základních prostředků rozšiřitelnosti UML - pro modelovací konstrukce neexistující v UML, ale podobné předdefinované v UML definované uživatelem
Programování v C++ 3, 3. cvičení
Programování v C++ 3, 3. cvičení úvod do objektově orientovaného programování 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled Dokončení spojového