Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
mgr-szz:in-pos:6-pos [2019/06/10 11:34] lachmanfrantisek komponentové modely |
mgr-szz:in-pos:6-pos [2020/04/12 16:56] |
||
---|---|---|---|
Řádek 1: | Řádek 1: | ||
- | ====== IN-POS 6. Objektové metody návrhu systémů ====== | ||
- | ===== Zadání ===== | ||
- | |||
- | * Návrhové vzory. | ||
- | * Softwarové architektury. | ||
- | * Rozhraní komponent, signatury a omezující podmínky služeb, OCL. | ||
- | * Komponentové systémy a modely, kvalitativní aspekty služeb (QoS). | ||
- | * Objektové metody vývoje softwaru, RUP. | ||
- | |||
- | * PA103 | ||
- | |||
- | ===== Vypracování ===== | ||
- | |||
- | ==== Návrhové vzory ==== | ||
- | |||
- | |||
- | <box 90% red|vzor (pattern)> | ||
- | Obecné řešení pro opakující se problém, tak aby jej bylo možné aplikovat v různém kontextu. | ||
- | </box> | ||
- | |||
- | |||
- | === Analytické vzory === | ||
- | |||
- | Existují i vzory využitelné při fázi analýzy. Seznam kategorií od M. Fowlera: | ||
- | |||
- | * **Accountability** | ||
- | * Party | ||
- | * Organization Hierarchies | ||
- | * Organization Structure | ||
- | * Accountability | ||
- | * Organization Structure | ||
- | * Accountability Knowledge Level | ||
- | * Party Type Generalization | ||
- | * Hierarchic Accountability | ||
- | * Operating Scopes | ||
- | * Post | ||
- | * **Observations and Measurements** | ||
- | * Quantity | ||
- | * Conversion Ratio | ||
- | * Compound Units | ||
- | * Measurement | ||
- | * Observation | ||
- | * Subtyping Observation Concepts | ||
- | * Protocol | ||
- | * **Observations for Corporate Finance** | ||
- | * Enterprise Segment | ||
- | * Measurement Protocol | ||
- | * Range | ||
- | * Phenomenon with Range | ||
- | * **Referring to Objects** | ||
- | * Name | ||
- | * Identification Scheme | ||
- | * Object Merge | ||
- | * Object Equivalence | ||
- | * **Inventory and Accounting** | ||
- | * **Planning** | ||
- | * **Trading** | ||
- | * **Derivative Contracts** | ||
- | * **Trading Packages** | ||
- | |||
- | |||
- | === Návrhové vzory dle GoF === | ||
- | |||
- | Podle knihy "Design Patterns: Elements of Reusable Object Oriented Software (1995)" (Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides). | ||
- | |||
- | * Návrhové vzory | ||
- | * Popis šablony, kterou lze použít pro řešení problému v různých situacích. | ||
- | * Popisují úspěšné návrhy a softwarovou architekturu. | ||
- | * Popisují statickou i dynamickou strukturu a komunikaci mezi objekty. | ||
- | * Vzor je pouze "meta-model", je potřeba jej instanciovat. | ||
- | |||
- | * Jednotlivé vzory jsou pěkně vysvětlené zde: https://refactoring.guru/design-patterns/ | ||
- | |||
- | 3 kategorie: | ||
- | |||
- | * **Creational patterns** | ||
- | * inicializace a konfigurace objektů | ||
- | * lze skrýt specifika vytváření objektu | ||
- | * lze oddálit určení přesné třídy při instanciaci | ||
- | |||
- | <box 90% blue|Abstract Factory> | ||
- | Vytváření skupiny souvisejících objektů. | ||
- | </box> | ||
- | |||
- | <box 90% blue|Builder> | ||
- | Postupné vytváření komplexních objektů. | ||
- | </box> | ||
- | |||
- | <box 90% blue|Factory Method> | ||
- | Virtuální konstruktor. | ||
- | </box> | ||
- | |||
- | <box 90% blue|Prototype> | ||
- | Instanciace objektů přes klonování "prototypu". | ||
- | </box> | ||
- | |||
- | <box 90% blue|Singleton> | ||
- | Tvorba maximálně jedné instance pro celý systém. | ||
- | </box> | ||
- | |||
- | * **Structural patterns** | ||
- | * řeší dělení rozhraní a implementace | ||
- | * kompozice objektů | ||
- | |||
- | <box 90% blue|Adapter> | ||
- | Překlad rozhraní. | ||
- | </box> | ||
- | |||
- | <box 90% blue|Bridge> | ||
- | Abstrakce pro spojení více implementací. | ||
- | </box> | ||
- | |||
- | |||
- | <box 90% blue|Composite> | ||
- | Tvorba rekurzivní hierarchie objektů. | ||
- | </box> | ||
- | |||
- | <box 90% blue|Decorator> | ||
- | Transparentní rozšíření objektů. | ||
- | </box> | ||
- | |||
- | <box 90% blue|Facade> | ||
- | Zjednodušení a agregace rozhraní komplexního subsystému. | ||
- | </box> | ||
- | |||
- | <box 90% blue|Flaywight> | ||
- | Sdílení mnoha objektů. | ||
- | </box> | ||
- | |||
- | <box 90% blue|Proxy> | ||
- | Aproximace objektů. | ||
- | </box> | ||
- | |||
- | * **Behavioral patterns** | ||
- | * řeší dynamické interakce mezi třídami/objekty | ||
- | * dělba zodpovědnosti | ||
- | |||
- | |||
- | <box 90% blue|Chain of Responsibility> | ||
- | Delegování žádosti na zodpovědného poskytovatele. | ||
- | </box> | ||
- | |||
- | <box 90% blue|Command> | ||
- | Realizace žádostí/příkazů. | ||
- | </box> | ||
- | |||
- | <box 90% blue|Interpreter> | ||
- | Interpretr jazyka pro malé gramatiky. | ||
- | </box> | ||
- | |||
- | <box 90% blue|Mediator> | ||
- | Koordinace komunikace mezi zúčastněnými. | ||
- | </box> | ||
- | |||
- | <box 90% blue|Memento> | ||
- | Uchování a obnovení stavu. | ||
- | </box> | ||
- | |||
- | <box 90% blue|Observer> | ||
- | Update několika objektů při změně "sledovaného". | ||
- | </box> | ||
- | |||
- | <box 90% blue|State> | ||
- | Objekty, jejichž chování závisí na stavu. | ||
- | </box> | ||
- | |||
- | <box 90% blue|Strategy> | ||
- | Abstrakce pro volbu jednoho z více algoritmů. | ||
- | </box> | ||
- | |||
- | <box 90% blue|Template Method> | ||
- | Algoritmus s několika kroky implementovanými v podtřídě. | ||
- | </box> | ||
- | |||
- | <box 90% blue|Visitor> | ||
- | Operace aplikované na různorodé struktury objektů. | ||
- | </box> | ||
- | |||
- | |||
- | |||
- | |||
- | ==== Softwarové architektury ==== | ||
- | |||
- | * = Zásadní návrhová rozhodnutí. | ||
- | * = Základní struktura systému složená z komponent, jejich vztahů a principů pro návrh a implementaci. | ||
- | * Abstrakce na systémové úrovni. | ||
- | |||
- | Zásadní prvky: | ||
- | |||
- | * **Modul** = část systému implementující nějakou funkcionalitu | ||
- | * **Konektor** = komunikační kanály a rozhraní mezi moduly | ||
- | * **Nasazení** = mapování modulů a konektorů na HW/SW zdroje. | ||
- | |||
- | |||
- | Styly a vzory: | ||
- | |||
- | * **Návrhový vzor** = Obecné řešení pro problémy při návrhu a implementaci. | ||
- | * **Architektonický styl** = Sumarizuje architektonické principy ovlivňující kód. | ||
- | * **Architektonické vzory** = Obecná řešení pro návrh architektury. | ||
- | * **Doménově specifické SW architektury** = Návrh kompletní struktury aplikace v dané doméně. | ||
- | |||
- | === Architektonické vzory === | ||
- | |||
- | <box 90% blue|Layers> | ||
- | * Rozdělení funkcionality do vrstev dle míry abstrakce. | ||
- | * Vrstva: | ||
- | * poskytuje službu vrstvě nad ní | ||
- | * delegují pod-úkoly na vrstvu pod ní | ||
- | |||
- | * Varianty | ||
- | * **Relaxed Layered System** -- Lze využít všechny nižší vrstvy, ne jen sousední. | ||
- | * **Layering Through Inheritance** -- Vrstvy se navzájem dědí. (Vrstva dědí vrstvu, od které požaduje funkcionalitu. | ||
- | |||
- | * ➕ podpora standardizace => možná výměna vrstev | ||
- | * ➕ dobře definovaná struktura | ||
- | * ➖ nižší výkonost kvůli komunikační zátěži | ||
- | * ➖ duplikace kódu na hranicích vrstev | ||
- | |||
- | <note tip> | ||
- | **Layers (vrstvy)** -- organizace kódu | ||
- | **Tiers** -- místo nasazení vrstev | ||
- | </note> | ||
- | </box> | ||
- | |||
- | |||
- | <box 90% blue|Pipes and Filters> | ||
- | Struktura pro procesy nad proudy dat. | ||
- | |||
- | * **pipes** (roury) = spojení mezi filtry | ||
- | * **pasivní filtr** = "vytáhne" data z filtru nebo mu jsou data poslána jiným elementem | ||
- | * **aktivní filtr** = aktivně vytahuje data z rour a posílá svůj výstup dál | ||
- | * **data source** = vstup do systému | ||
- | * **data sink** = výsledky celého procesu | ||
- | |||
- | * ➕ netřeba mezilehlých souborů | ||
- | * ➕ flexibilita výměn filtrů, nebo přeuspořádání komponent | ||
- | * ➕ možnost znovuvyužití komponent | ||
- | * ➕ možnost prototypování | ||
- | * ➕ lze paralelizovat zpracování | ||
- | * ➖ sdílení stavu je drahé, nebo neefktivní | ||
- | * ➖ transformace dat do/z formátu rour může být náročné | ||
- | * ➖ zpráva chyb, výpadků | ||
- | </box> | ||
- | |||
- | <box 90% blue|Blackboard> | ||
- | Více zdrojů se střídavě zapojuje do řešení problému. | ||
- | </box> | ||
- | |||
- | <box 90% blue|Broker> | ||
- | {{https://image.slidesharecdn.com/sasession11-140914043516-phpapp01/95/software-architecture-session11-73-638.jpg}} | ||
- | </box> | ||
- | |||
- | <box 90% blue|Model-View-Controller (MVC)> | ||
- | {{:mgr-szz:in-pos:mvc.png?300|}} | ||
- | </box> | ||
- | |||
- | <box 90% blue|Model-View-Presenter (MVP)> | ||
- | {{:mgr-szz:in-pos:mvp.png?300|}} | ||
- | </box> | ||
- | |||
- | <box 90% blue|Model-View-ViewModel> | ||
- | {{:mgr-szz:in-pos:mvv.png?300|}} | ||
- | </box> | ||
- | |||
- | ==== Rozhraní komponent ==== | ||
- | |||
- | * **Komponenta** | ||
- | * = Spustitelná jednotka běžící v běhovém prostředí (middleware). | ||
- | * = Zaměnitelná část systému, která žádá a poskytuje určitou sadu operací. | ||
- | * Tvořena mnoha objekty/třídami. | ||
- | * Nepřímá komunikace přes rozhraní (konektory). | ||
- | * Dobře definovaná komplexní rozhraní. | ||
- | * black-box/gray-box | ||
- | * Vyvíjeny nezávisle na ostatních komponentách. | ||
- | |||
- | * **Rozhraní (interface)** | ||
- | * Kolekce operací, která specifikují požadované, nebo poskytované služby komponenty. | ||
- | |||
- | * **Port** | ||
- | * Komunikační bod komponenty specifikovaný rozhraním. | ||
- | * Spojeny vzájemně konektorem. | ||
- | |||
- | ==== Komponentové systémy a modely ==== | ||
- | |||
- | * Komponentové modely | ||
- | * = komponentové standardy | ||
- | * definují spcifickou reprezentaci, interakci a kompozici SW komponent | ||
- | * Příkaldy komerčních řešení: | ||
- | * CCM/CORBA, EJB/J2EE, Microsoft's COM+/.NET | ||
- | * Akademické modely: | ||
- | * Fractal, KobrA, PCM, SOFA, DArwin, Wright, Koala, ACME | ||
- | * Rozdíly: | ||
- | * komponenta | ||
- | * run-time x design-time jednotka | ||
- | * dynamická x statická jednotka | ||
- | * stateful x stateless | ||
- | * rozhraní | ||
- | * signatury x protokoly | ||
- | * synchronní x asynchronní | ||
- | * hierarchie | ||
- | * flat x hierarchical | ||
- | * assembling | ||
- | * simple x multiple | ||
- | |||
- | * Komponentové frameworky | ||
- | * = komponentový middleware | ||
- | * = běhové prostředí | ||
- | * Umožňují běh komponent v rámci daného standardu. | ||
- | * Příklady: | ||
- | * J2EE: JBoss, Glassfish | ||
- | * Web Portals (JSR portlets): Liferay, WebSphere Portal | ||
- | |||
- | ==== Signatury a omezující podmínky služeb, OCL ==== | ||
- | |||
- | Požadavky na rozhraní: | ||
- | * poskytuje kontact s vnějším světem | ||
- | * je tvořeno signaturami operací (input/output parametry) | ||
- | * dobrá dokumentace (včetně kontraktu) | ||
- | * jednoduchá dostupnost | ||
- | * specifikace kontraktu (podmínky užití) | ||
- | |||
- | |||
- | <red 90% red|Kontrakt> | ||
- | Dohoda mezi dvěma subjekty akceptující podmínky, na kterých je možné užívat práva. | ||
- | </box> | ||
- | |||
- | === OO kontrakt === | ||
- | |||
- | * sdílení předpokladů o třídách, komponentách, systémech | ||
- | * přesná specifikace rozhraní | ||
- | * popis služeb, které jsou poskytovány za určitých podmínek | ||
- | |||
- | * 3 typy podmínek: | ||
- | * **Invarianty** = predikát, který musí být vždy platný. | ||
- | * **Preconditions** = Musí být platné před spuštěním operace. | ||
- | * **PostConditions** = Musí platit po dokončení operace. | ||
- | |||
- | * Podmínky lze modelovat různými způsoby: | ||
- | * běžným jazykem | ||
- | * matematická notace | ||
- | * Object Constraint Language (OCL) | ||
- | |||
- | * Viditelnost operací a atributů | ||
- | * public: + | ||
- | * dostupné z libovolného externího kódu | ||
- | * private: - | ||
- | * dostupné ze samotné třídy | ||
- | * protected: # | ||
- | * dostupné z třídy a jejích dědiců | ||
- | * package: ~ | ||
- | * dostupné z tříd v rámci balíku | ||
- | | ||
- | |||
- | === OCL === | ||
- | |||
- | Object Constraint Language | ||
- | * OMG standard | ||
- | * ➕ umožňuje lepší dokumentaci | ||
- | * ➕ přesnost (má formální sémantiku) | ||
- | * ➕ OO | ||
- | * ➕ komunikace bez nedorozumnění | ||
- | |||
- | Využití: | ||
- | * invarianty tříd a typů | ||
- | * pre-/post-conditions operací | ||
- | * navigace napříč ukazateli mezi objekty | ||
- | * podpora operací nad kolekcemi | ||
- | * testovací specifikace a požadavky | ||
- | |||
- | Syntax | ||
- | * silně typovaný, deklarativní jazyk | ||
- | * každý klasifikát z UML se stává OCL typem | ||
- | * předdefinuje základní typy a kolekce | ||
- | |||
- | <box 90% blue|Invariants> | ||
- | syntax: | ||
- | context <classifier> | ||
- | inv [<constraint name>]: | ||
- | <Boolean OCL expression> | ||
- | </box> | ||
- | |||
- | <box 90% blue|Preconditions/Postconditions> | ||
- | syntax: | ||
- | |||
- | context <classifier>::<operation> (<parameters>) | ||
- | pre|post [<constraint name>]: | ||
- | <Boolean OCL expression> | ||
- | </box> | ||
- | |||
- | === IDL === | ||
- | |||
- | * = Interface Description Language | ||
- | * = Interface Definition Language | ||
- | * Specifikační jazyk pro popis rozhraní komponent nezávisle na programovacím jazyce. | ||
- | * Nejedná se o programovací jazyk. | ||
- | * Systémy postavené nad IDL: | ||
- | * CORBA | ||
- | * WSDL pro Web Services | ||
- | * Mozilla's XPCOM | ||
- | * Facebook's Thrift | ||
- | |||
- | <box 90% blue|WSDL> | ||
- | Web services Description Language | ||
- | * postaven nad XML | ||
- | * popisuje rozhraní pro Web Services | ||
- | * vzájemně převoditelné s IDL | ||
- | </box> | ||
- | |||
- | ==== Kvalitativní aspekty služeb (QoS) ==== | ||
- | |||
- | ==== Objektové metody vývoje softwaru, RUP ==== | ||
- | |||
- | ===== Zdroje ===== | ||
- | |||
- | * slidy pa103 (jaro 2019) |