close

Designové vzory

Přejít na navigaci Přejít na hledání

Návrhový vzor (přeložitelný do italštiny jako návrhové schéma , návrhové schéma nebo architektonické schéma ) je v informatice a zejména v oblasti softwarového inženýrství pojem, který lze definovat jako „ obecné návrhové řešení opakujícího se problému “. Jedná se o popis nebo logický model, který se má použít pro řešení problému, který může nastat v různých situacích ve fázi návrhu a vývoje softwaru , ještě před definicí algoritmu řešení výpočetní části. Je to často účinný přístup k omezení nebo snížení technického dluhu .

Objektově orientované návrhové vzory obvykle ukazují vztahy a interakce mezi třídami nebo objekty , aniž by specifikovaly finální příslušné aplikační třídy, takže sídlí v doméně modulů a propojení. Na vyšší úrovni jsou však architektonické vzory, které mají mnohem širší rozsah, popisují celkový vzor přijatý celým systémem, jehož logická implementace dává život danému rámci .

Historie

Termín byl poprvé představen v architektuře ve slavném eseji Christophera Alexandera ; později Alexanderova práce inspirovala zrod sektoru softwarového inženýrství věnovaného aplikaci konceptu návrhového vzoru na softwarové architektury , zejména objektově orientované . Dnes se pojem designový vzor používá hlavně s odkazem na tento konkrétní kontext.

Téma vzorů je nyní považováno za jednu z hlavních linií vývoje objektově orientovaného softwarového inženýrství. Nachází aplikace v různých kontextech, o které má softwarový průmysl velký zájem , od vývoje softwaru založeného na komponentách až po otevřené systémy , rámce a tak dále. Většina moderních programovacích jazyků a souvisejících technologií byla navržena (nebo upravena) s cílem být v souladu s tímto vznikajícím přístupem k vývoji softwaru.

Za zrodem „pohybu“ vzorů v informatice stojí slavná kniha Design Patterns: Elements for the reuse of objektově orientovaného softwaru od Ericha Gammy , Richarda Helma , Ralpha Johnsona a Johna Vlissidese ( 1995 ). Díky úspěchu této práce se její čtyři autoři stali tak citovanými jmény, že je vědecká komunita začala kvůli stručnosti souhrnně ztotožňovat s přezdívkou: „gang čtyř“ ( Gang of Four nebo GoF ).

Struktura

Designový vzor se skládá z:

  • jméno , skládající se z jednoho nebo dvou slov, která co nejvíce reprezentují samotný vzor;
  • problém , tedy popis situace, na kterou lze vzor aplikovat. Může obsahovat popis konkrétních tříd nebo konstrukčních problémů, stejně jako seznam podmínek pro použití vzoru, které je nezbytné;
  • řešení , které popisuje jednotlivé prvky projektu se vztahy a souvisejícími implikacemi, aniž by však šlo o konkrétní implementaci. Konceptem je představit abstraktní problém a relativní konfiguraci prvků vhodnou k jeho řešení;
  • důsledky , výsledky a omezení vyplývající z použití vzoru. Jsou zásadní, protože mohou narušit rovnováhu při výběru vzorů: důsledky zahrnují úvahy o čase a prostoru, mohou popsat důsledky vzoru s některými programovacími jazyky a dopad na zbytek projektu.

Použití vzorů při popisu jiných vzorů vede ke vzniku tzv. vzorových jazyků .

Klasifikace

Návrhové vzory lze klasifikovat podle několika kritérií, z nichž nejběžnější jsou ta, která zdůrazňují typ problému, který se snažíte vyřešit. Typ problému může být spojen s konkrétní doménou designu ( telekomunikace , sítě , software ) nebo častěji s problémem návrhu v širším slova smyslu (například v softwarovém inženýrství můžeme hovořit o vytváření, chování, navigaci objekty nebo datové struktury ).

Ve své knize „band of four“ identifikoval 23 typů návrhových vzorů, rozdělených do tří kategorií: strukturální, kreační a behaviorální.

Kreativní vzory

Tvůrčí vzory řeší problémy spojené s konkretizací objektů

  • Abstraktní továrna ( doslova „abstraktní továrna“) poskytuje rozhraní pro vytváření rodin spojených nebo závislých objektů, takže uživatelé nemusí zadávat názvy konkrétních tříd ve svém vlastním kódu.
  • Tvůrce ("konstruktor") odděluje konstrukci složitého objektu od jeho reprezentace, takže samotný proces výstavby může vytvářet různé reprezentace.
  • Metoda Factory poskytuje rozhraní pro vytvoření objektu, ale nechá podtřídy rozhodnout, který objekt vytvoří.
  • Líná inicializace je taktika vytváření instance objektu pouze tehdy, když je potřeba jej použít poprvé . Často se používá ve spojení s metodou výroby vzorů .
  • Vzor prototypu ("prototyp") vám umožňuje vytvářet nové objekty klonováním původního objektu nebo prototypu.
  • Singleton ( " singlet") má zajistit, že v systémech s jedním vláknem lze vytvořit pouze jednu instanci třídy.
  • Zamykání s dvojitou kontrolou má zajistit, že ve vícevláknových systémech lze vytvořit pouze jednu instanci třídy.

Strukturální vzory

Strukturální vzory řeší problémy spojené se strukturou tříd a objektů

  • Adaptér převede rozhraní jedné třídy na jiné rozhraní.
  • Bridge ("most") umožňuje oddělit abstrakci třídy od její implementace, aby se mohly nezávisle měnit.
  • Kompozitní ("složený"), který umožňuje uživateli manipulovat s objekty jednotným způsobem, organizuje objekty do stromové struktury.
  • Kontejner (" kontejner ") nabízí řešení pro porušení zapouzdření díky použití dědičnosti.
  • Dekorátor (" dekorátor ") umožňuje přidávat metody do existujících tříd za běhu (tj. za běhu programu), což umožňuje větší flexibilitu při přidávání funkcí do objektů.
  • Rozšiřitelnost ("rozšiřitelnost")
  • Fasáda (" fasáda ") umožňuje prostřednictvím jednoduššího rozhraní přístup k subsystémům, které odhalují složitá a různá rozhraní.
  • Flyweight , která umožňuje oddělit proměnnou část třídy od části, kterou lze znovu použít.
  • Proxy poskytuje reprezentaci objektu s obtížným nebo časově náročným přístupem k přístupu nebo vytvoření. Proxy umožňuje odložit přístup nebo vytvoření na okamžik, kdy je to skutečně potřeba.
  • Potrubí a filtry
  • Data soukromé třídy

Vzorce chování

Vzorce chování poskytují řešení pro nejběžnější typy interakce mezi objekty.

  • Řetězec odpovědnosti ("řetězec odpovědnosti") snižuje vazbu mezi objektem, který podává požadavek, a tím, který jej uspokojuje, a dává více objektům možnost jej uspokojit.
  • Příkaz (" příkaz ") vám umožňuje izolovat část kódu, která provádí akci, od kódu, který vyžaduje její provedení.
  • Posluchač událostí ("posluchač událostí")
  • Hierarchický návštěvník ("hierarchický návštěvník")
  • Tlumočník ("tlumočník") daný jazykem definuje reprezentaci jeho gramatiky spolu s tlumočníkem, který tuto reprezentaci používá pro interpretaci výrazů v tomto konkrétním jazyce.
  • Iterátor ( " iterátor") řeší několik problémů souvisejících s přístupem a procházením prvků datové struktury, aniž by odhalil detaily implementace a vnitřní struktury kontejneru.
  • Mediátor ( " mediátor") zasahuje do komunikace mezi objekty, aby aktualizoval stav systému, když kterýkoli z nich komunikuje změnu svého stavu.
  • Memento ("připomínka") je operace extrahování vnitřního stavu objektu, aniž by došlo k porušení jeho zapouzdření, a jeho uložení, aby bylo možné jej později obnovit.
  • Pozorovatel ("observer") definuje závislost typu one-to-many mezi různými objekty, takže pokud objekt změní svůj stav, všechny závislé objekty jsou o změně informovány a mohou se samy aktualizovat.
  • Návštěvník s jednou porcí
  • Stav ("stav") umožňuje objektu změnit své chování při změně jeho vnitřního stavu.
  • Strategie (" strategie ") je užitečná v situacích, kdy je potřeba dynamicky modifikovat algoritmy používané aplikací.
  • Metoda Template ("metoda schéma") vám umožňuje definovat strukturu algoritmu a ponechává podtřídy za úkol implementovat některé kroky, jak chtějí.
  • Návštěvník (" návštěvník ") vám umožňuje oddělit algoritmus od struktury složených objektů, na které je aplikován, za účelem přidání nového chování, aniž byste museli upravovat samotnou strukturu.
  • Objekt null ("objekt null") umožňuje nahradit nulový odkaz objektem, který nic nedělá.

Jiné typy vzorů

Některé vzory definované v literatuře nefungují na úrovni návrhu systému, proto je nelze správně definovat jako návrhové vzory. Některé příklady:

Architektonické vzory

Architektonické vzory fungují na jiné (a širší) úrovni než návrhové vzory a vyjadřují základní schémata pro nastavení strukturální organizace softwarového systému. V těchto schématech jsou popsány předdefinované subsystémy spolu s rolemi, které přebírají, a vztahy mezi nimi.

  • Tabule , architektura pro aplikace umělé inteligence
  • Makléř
  • Klient-server představuje typ síťové aplikace, ve které klientský počítač vytváří instanci uživatelského rozhraní aplikace připojením k serverové aplikaci nebo k databázovému systému.
  • Vrstvy , architektura založená na vrstvách
  • Mikrokernel
  • Model-View-Controller (často zkracováno na MVC ) , který spočívá v oddělení softwarových komponent, které implementují model obchodní funkčnosti ( model ), od komponent implementujících prezentační logiku ( view ) a od těch ovládacích, které tyto funkcionality využívají ( ovladač ).
  • Model-View-ViewModel (často zkracováno na MVVM )
  • Nahé předměty
  • Potrubí a filtry
  • Ovládání abstrakce prezentace
  • Reflection , poskytuje mechanismus pro dynamickou změnu struktury a chování softwarových systémů. Podporuje modifikaci základních aspektů, jako je typ struktur a mechanismy volání funkcí.
  • Repozitář , architektonický vzor spojený s aspekty persistence
  • Front Controller , architektonický vzor, ​​který zahrnuje použití jediného souboru pro správu všech požadavků
  • Data Access Object , pro správu persistence : je to v podstatě třída se souvisejícími metodami , která představuje tabulkovou entitu RDBMS .
  • Data Transfer Object , pro přenos dat mezi subsystémy softwarové aplikace. DTO se často používají ve spojení s objekty pro přístup k datům (DAO) k načtení výše uvedeného z databáze .

Metodický vzor

  • Odpovědnost , tedy „jasná identifikace a sdílení odpovědnosti “ přiřazená každému objektu nebo komponentě systému, je základním metodickým vzorem naznačeným v knize Design Patterns .
  • Aby to běželo, aby to bylo správné, aby to bylo rychlé, aby to bylo malé

Vzor souběžnosti

V případě procesů, které současně provádějí činnosti na sdílených datech, hovoříme o souběžnosti . Některé návrhové vzory byly vyvinuty pro udržení synchronizace stavu dat v takových situacích:

  • Aktivní objekt
  • Balking vzor
  • Dvojitě kontrolovaný uzamykací vzor
  • Hlídané odpružení
  • Vzor vůdců / následovníků
  • Monitor Object , který umožňuje pouze aktivní proces v něm, zároveň nevyžaduje explicitní kódování vzájemného vyloučení.
  • Vzor zámku čtení a zápisu
  • Vzor plánovače
  • Vzor bazénu nití
  • Úložiště specifické pro vlákna
  • Synchronizace předávání tokenů
  • Vzor reaktoru

Bibliografie

Související položky

Další projekty

Externí odkazy