Obsah
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
vzor (pattern)
Obecné řešení pro opakující se problém, tak aby jej bylo možné aplikovat v různém kontextu.
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
Abstract Factory
Vytváření skupiny souvisejících objektů.
Builder
Postupné vytváření komplexních objektů.
Factory Method
Virtuální konstruktor.
Prototype
Instanciace objektů přes klonování „prototypu“.
Singleton
Tvorba maximálně jedné instance pro celý systém.
- Structural patterns
- řeší dělení rozhraní a implementace
- kompozice objektů
Adapter
Překlad rozhraní.
Bridge
Abstrakce pro spojení více implementací.
Composite
Tvorba rekurzivní hierarchie objektů.
Decorator
Transparentní rozšíření objektů.
Facade
Zjednodušení a agregace rozhraní komplexního subsystému.
Flaywight
Sdílení mnoha objektů.
Proxy
Aproximace objektů.
- Behavioral patterns
- řeší dynamické interakce mezi třídami/objekty
- dělba zodpovědnosti
Chain of Responsibility
Delegování žádosti na zodpovědného poskytovatele.
Command
Realizace žádostí/příkazů.
Interpreter
Interpretr jazyka pro malé gramatiky.
Mediator
Koordinace komunikace mezi zúčastněnými.
Memento
Uchování a obnovení stavu.
Observer
Update několika objektů při změně „sledovaného“.
State
Objekty, jejichž chování závisí na stavu.
Strategy
Abstrakce pro volbu jednoho z více algoritmů.
Template Method
Algoritmus s několika kroky implementovanými v podtřídě.
Visitor
Operace aplikované na různorodé struktury objektů.
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
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
Layers (vrstvy) – organizace kódu
Tiers – místo nasazení vrstev
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ů
Blackboard
Více zdrojů se střídavě zapojuje do řešení problému.
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í)
Kontrakt
Dohoda mezi dvěma subjekty akceptující podmínky, na kterých je možné užívat práva.
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
Invariants
syntax:
context <classifier> inv [<constraint name>]: <Boolean OCL expression>
Preconditions/Postconditions
syntax:
context <classifier>::<operation> (<parameters>) pre|post [<constraint name>]: <Boolean OCL expression>
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
WSDL
Web services Description Language
- postaven nad XML
- popisuje rozhraní pro Web Services
- vzájemně převoditelné s IDL
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í)
Service Level Agreement (SLA)
Definuje společné pochopení pro služby, priority, zodpovědnosti, garance a záruky.
Objektové metody vývoje softwaru, RUP
Zdroje
- slidy pa103 (jaro 2019)




