Návrh implementace – postup vytváření návrhu, kvalita návrhu, návrhové vzory, použití UML.

Z Na státnice zvesela!

Přejít na: navigace, hledání

Obsah

[skrýt]

[editovat] Návrh

Zabývá se transformací konceptuálního modelu vzniklého v analýze do návrhu, který bere v potaz omezení daná zvolenou architekturou a mimo-funkčními požadavky (čas odpovědi, běhová platforma, programovací jazyk, ...).

Koncepty analytického modelu jsou mapovány na implementační třídy a rozhraní.Výsledkem je detailní popis toho, jak bude systém naprogramován (nízkoúrovňové komponenty, algoritmy,...). Přechod od návrhu k implementaci by měl být téměř mechanický. Ve výsledku známe (skoro) všechny detaily implementace: vazba na konkrétní technologie, okolní prostředí, způsob uložení perzistentních dat, struktura aplikace, používané konvence a návrhové vzory.

[editovat] Kvalitní návrh

  • rozšiřitelnost – přidání nových funkcí nenaruší příliš původní návrh a architekturu
  • robustnost – schopnost vypořádat se s mimořádnými stavy (málo paměti, chybný vstup)
  • spolehlivost – software dělá to, co má dělat
  • bezpečnost – odolný proti útokům
  • kompatibilita – jak se staršími verzemi, tak cizími systémy
  • modularita – navržený systém se skládá z dobře definovaných a nezávislých komponent, které mohou být případně znovu použity (znovupoužitelnost)

[editovat] Návrh řešení standardních situací

  • Základní prostředky – návrhářská/programátorská zkušenost, návrhové vzory (Singleton, Composite, Factory, Fasáda), jazykové idiomy, jmenné konvence

Návrhové vzory jsou stavebními bloky pro konkrétní řešení, většinou se jedná o takové řešení, které se často opakují. Návrhové vzory tedy řeší netriviální situace a často opakující se řešení. Avšak není cílem zachytit řešení konkrétního problému, který se pravděpodobně již nevyskytne, ale řešení obecného problému.

Vzory pro návrh architektury softwarových aplikací mají následující vlastnosti:

  • Vzory se vztahují k opakujícím se problémům při návrhu a popisují jejich řešení.
  • Vzory dokumentují existující a ověřené zkušenosti. Nejsou tedy vytvářeny uměle. Zpřístupňují zkušenosti expertů.
  • Vzory identifikují a specifikují abstrakce, ze kterých vycházejí konkrétní softwarové komponenty.
  • Vzory poskytují společný slovník a chápaní principů návrhu.
  • Vzory dokumentují architekturu software.
  • Vzory pomáhají zvládat složitost.

Když narazíme na situaci, pro kterou existuje návrhový vzor, není žádný důvod pro vymýšlení nového řešení. Jestliže vzor správně implementujeme, pak se můžeme spolehnout na řešení, které poskytuje.

Lze vyslovit definici: Návrhový vzor popisuje konkrétní opakující se problém spojený s návrhem spolu s příslušným kontextem a prezentuje ověřené obecné schéma pro jeho řešení. Schéma řešení je specifikováno popisem zúčastněných komponent, jejich odpovědností, vztahů a způsobů jejich spolupráce.

Dva druhy návrhových vzorů:

  • Implicitní jsou nikde nepopsaná řešení odvíjející se od znalostí a zkušeností.
  • Explicitní , kterých je mnohem méně, jsou zdokumentované zkušenosti při řešeních konkrétních problémů.

[editovat] Základní prvky návrhových vzorů

  • Název - každý návrhový vzor by měl mít název, který co možná nejvíce vystihuje jeho podstatu.
  • Problém - každý návrhový vzor řeší nějaký problém. Podstatou jeho vzniku je nějaká konkrétní situace, která neodpovídá požadovanému stavu.
  • Podmínky - popis všech okolností a sil, které mohou ovlivňovat použití daného vzoru. Jsou zahrnuty veškeré jevy, které se vyskytují v daném kontextu a které musí být brány v úvahu.
  • Řešení - soubor pravidel a vztahů, které popisují jak dosáhnout požadovaného výsledku. Představuje soubor instrukcí, jak postupovat krok po kroku směrem k cíli. Řešení může obsahovat i popis jednotlivých úskalí a omezení, s kterými se musí počítat při jeho implementaci.
  • Příklady - každý popis návrhového vzoru by měl obsahovat i ukázky jeho praktického použití, které pomůžou uživateli osvojit si novou myšlenku.
  • Výsledek - stav nebo konfigurace systému po aplikaci vzoru, zahrnující vzájemné souvislosti, které vycházejí z implementace vzoru. Měl by obsahovat shrnutí problému, které byly vyřešeny.
  • Odůvodnění a souvislosti - představuje vysvětlení, proč byl návrhový vzor použit a jak jeho implementace vyřešila danou situaci. Je vysvětlen způsob práce s návrhovým vzorem v praxi.
  • Související vzory - vzor může souviset s ostatními, nastane nutnost současné aplikace s jiným vzorem. Jedná se o situaci, kdy samostatné použití popisovaného vzoru je buď úplně nebo skoro neefektivní. Pro jeho správnou aplikaci musí být použit jeden nebo i více podpůrných vzorů, které zajišťují jeho plné využití.
  • Reference - popisují situace, kdy byl vzor již použit na existujících systémech. Použití návrhového vzoru může sloužit i jako ilustrativní příklad.

[editovat] Základní rozdělení

  • Vytvářející vzory (Creational patterns) – řeší problémy související s vytvářením objektů v systému. Snahou těchto návrhových vzorů je popsat postup výběru třídy nového objektu a zajištění správného počtu těchto objektů. Většinou se jedná o dynamická rozhodnutí učiněná za běhu programu. Mezi tyto návrhové vzory patří:
    • Factory Method Pattern
    • Abstract Factory Method Pattern
    • Builder Pattern
    • Prototype Pattern
    • Singleton Pattern
  • Srukturální vzory (Structural Pattern) – představují skupinu návrhových vzorů zaměřujících se na možnosti uspořádání jednotlivých tříd nebo komponent v systému. Snahou je zpřehlednit systém a využít možností strukturalizace kódu. Mezi tyto návrhové vzory patří:
    • Adapter Pattern
    • Bridge Pattern
    • Composite Pattern
    • Decorator Pattern
    • Facade Pattern
    • Flyweight Pattern
    • Proxy Pattern
  • Vzory chování (Behavioral Patterns) – se zajímají o chování systému. Mohou být založeny na třídách nebo objektech. U tříd využívají při návrhu řešení především principu dědičnosti. V druhém přístupu je řešena spolupráce mezi objekty a skupinami objektů, která zajišťuje dosažení požadovaného výsledku. Mezi tento typ vzorů můžeme zařadit:
    • Chain Of Responsibility Pattern
    • Command Pattern
    • Interpreter Pattern
    • Iterator Pattern
    • Mediator Pattern
    • Memento Pattern
    • Observer Pattern
    • State Pattern
    • Strategy Pattern
    • Template Pattern
    • Visitor Pattern

Dále popíšu nějaké vzory (pokud byste chtěli, tak na http://objekty.vse.cz/Objekty/Vzory-prehled je kompletní popis)

  • Singleton (jedináček)
    • cílem je zajištění existence pouze jedné instance dané třídy a poskytnutí globálního přístupu k ní
    • vhodné např. při logování nebo používání properties souborů (lokalizace)
  • Factory method (Tovární metoda)
    • Definuje rozhraní pro vytváření objektu. Rozhodnutí, u které třídy se má spustit její instance, ale přenechává podtřídám. Tovární metoda umožňuje třídě, aby odložila rozhodnutí o vytvoření instance na své podtřídy.
  • Composite pattern
    • Návrhový vzor Composite představuje řešení, jak uspořádat jednoduché objekty a z nich složené (kompozitní) objekty. Snahou vzoru je, aby k oběma typům objektů (jednoduchým a složeným) bylo možné přistoupit jednotným způsobem.
  • Observer
    • Definování závislosti jednoho objektu k více objektům. Umožnění šíření události, která nastala v jednom objektu, ke všem závislým objektům.

[editovat] Použití UML

Výstupem návrhu bývá podrobný UML digram tříd a sekvenční diagramy pro důležité netriviální události v systému. Tyto představují návod pro programátora, jak systém implementovat, a také jsou důležitým zdrojem dokumentace.