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.
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.
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.
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ů.
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:
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
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.
Model-View-Controller (MVC)
Model-View-Presenter (MVP)
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.
Komponentové systémy a modely
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.
OCL
Object Constraint Language
-
➕ 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
Kvalitativní aspekty služeb (QoS)
SW požadavky:
Functional
Non-functional
Kvalitativní aspekty SW architektur:
Performance
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
Nahoru