Designové vzory
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
- Gamma, E. , Helm, R. , Johnson, R., and Vlissides, J. , Design Patterns : Elements for Object-Oriented Software Reuse , Addison Wesley, 1995, ISBN 88-7192-150-X
- Originál: Design Patterns: Elements of Reusable Object-Oriented Software , Addison Wesley, 1995, ISBN 0-201-63361-2
- Eckel, B. , Thinking in Patterns with Java , MindView (koncept)
Související položky
Další projekty
Wikimedia Commons obsahuje obrázky nebo jiné soubory návrhových vzorů
Externí odkazy
- Portland Pattern Repository , na c2.com .
- Hillside Patterns Library
- Filozofie vzorů , na inf.unitn.it . Získáno 7. dubna 2005 (archivováno z originálu 16. března 2005) .
- Stránka se vzorem od Vince Huston , na vincehuston.org .
- Návrhové vzory GoF v Javě (v italštině )na eii.pucv.cl.