Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Následující verze
Předchozí verze
mgr-szz:in-pos:6-pos [2019/05/26 09:53]
lachmanfrantisek zadání
mgr-szz:in-pos:6-pos [2020/04/12 16:56] (aktuální)
Řádek 12: Řádek 12:
  
 ===== Vypracování ===== ===== 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>​
 +
 +
 +
 +=== 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>​
 +
 +
 +
 +=== 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**
 +
 +
 +
 +==== 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í specifickou reprezentaci,​ interakci a kompozici SW komponent
 +    * Příklady 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í)
 +
 +
 +<box 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) ====
 +
 +SW požadavky:
 +
 +  * **Functional**
 +    * definuje funkcionalitu systému a jeho komponent
 +    * specifikuje chování mezi vstupem a výstupem
 +  * **Non-functional**
 +    * klade omezení a kriteria na implementaci
 +
 +
 +Kvalitativní aspekty SW architektur:​
 +
 +  * **Performance**
 +    * propustnost
 +    * čas odezvy
 +    * efektivnost využití zdrojů
 +  * **Reliability**
 +    * běh bez pádů
 +    * dostupnost
 +    * robustnost
 +    * schopnost obnovy
 +  * **Security**
 +    * integrita
 +    * důvěrnost
 +    * dostupnost
 +  * **Scalability**
 +    * výkon
 +    * paralelní komunikace
 +    * škálování dat
 +  * **Maintainability**
 +    * změnitelnost
 +    * upravitelnost
 +
 +  ​
 +Taktiky zlepšení:
 +
 +  * Performance
 +    * minimalizace počtu adaptérů a wrapperů (redukce zdrojů pro jeden požadavek)
 +    * zmenšit komunikace zajišťenou rozhraním (více rozhraní pro stejnou funkcionalitu)
 +    * separace dat od výpočtu (lepší optimalizace dat/​algoritmů)
 +    * nahrazení synchronní komunikace za asynchronní
 +    * přesunutí často komunikujících komponent blíže k sobě
 +  * Reliability
 +    * kontrola externích závislostí
 +    * zvěřejnění stavu komponent a definice invariantů
 +    * chybové řízené
 +    * zamezit vzniku single-point-of-failure
 +    * health-state kontroly systému
 +    * systém záloh a obnov
 +  * Scalability
 +    * jednoduchá,​ jasně definovaná rozhraní
 +    * distribuované zdroje dat
 +    * zjistit vhodná data pro replikace
 +    * použití paralelního zpracování na vhodných místech
 +    * zamezit bottleneck místům
 +    * změnit přímé závislosti na nepřímé (např. synchronní volání za asynchronní)
 +  * Maintainability
 +    * rozdělení zodpovědnosti/​Sloučení zodpovědnosti (jasná lokalizace zodpovědných částí)
 +    * odebrání kódu řešící interakce (ne funkcionalitu) vně komponent do konektorů
 +    * odebrání kódu řešící funkcionalitu z konektorů do komponent
 +    * malé a kompaktní komponenty
 +    * izolace dat od výpočtu (menší dopad změny jednoho, či druhého)
 +    * odebrat zbytečné závislosti
 +    * hierarchická architektura (umožňuje vhled na systém z různou abstrakcí)
 +
 +
 +<box 90% red|Service Level Agreement (SLA)>
 +Definuje společné pochopení pro služby, priority, zodpovědnosti,​ garance a záruky.
 +</​box>​
 +
 +==== Objektové metody vývoje softwaru, RUP ====
 +
 +viz: http://​statnice.dqd.cz/​mgr-szz:​in-gra:​21-gra#​oo_modely
 +
 +
 +===== Zdroje =====
 +
 +  * slidy pa103 (jaro 2019)
mgr-szz/in-pos/6-pos.1558857189.txt.gz · Poslední úprava: 2020/04/12 16:56 (upraveno mimo DokuWiki)
Nahoru
CC Attribution-Noncommercial-Share Alike 4.0 International
chimeric.de = chi`s home Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0