Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Waseihou 27. 08. 2013, 20:06:07
-
Ahoj, je to jen mé zdání, a nebo v programovacím jazyce jako je Python nejsou návrhové vzory (klasicka GoF - gang of four) plně aplikovatelné, či dokonce zbytečné? Samozřejmě že jsou i takové, které se hodí vždy, ale samotný fakt že mohu zkusit volat nějakou funkci na libovolném objektu bez ohledu na jeho předka v podstatě snižuje potřebu psát nějaké abstraktní třídy a vytvářet složité hierarchie. A tak taková abstraktní továrna a nebo bridge nejsou zdaleka tolik lákavé, samozřejmě ne že by to udělat nešlo, jen to podle mě postrádá na významu...
-
Tiše mlč a užívej si časů dokud tam návrhové vzory nejsou, pokud máš nějaký tvůj oblíbený jistě si ho zvládneš definovat a používat sám.
Nepochybně se časem objeví Python konzultanti a ti přinesou i návrhové vzory a následně bude tak jako vždycky Kdo neprogramuje s Python vzory programuje proti nám.
-
Hm, nějaké by se tam asi našly: http://www.youtube.com/watch?v=0vJJlVBVTFg
-
Tak on byl GoF zamýšlený pro C++ (a následně vesele přejatý Javou), což jsou statické jazyky bez first-class funkcí, takže část vzorů v podstatě slouží ke kompenzaci těchto omezení. V dynamickém jazyce s anonymními funkcemi proto některé vzory (už třeba jenom command) nedávají moc smysl.
-
Myslím, že jestli si to dobře pamatuji, trochu s tím souvisi i extrémní programování a jeho tvůrci pracovali se Smalltalkem. Návrhové vzory se s tím vezou... Později autoři přešli na Javu.
Ale ano, tady u jednoho z autorů je napsáno i C++ http://martinfowler.com/aboutMe.html.
-
Tiše mlč a užívej si časů dokud tam návrhové vzory nejsou, pokud máš nějaký tvůj oblíbený jistě si ho zvládneš definovat a používat sám.
Nepochybně se časem objeví Python konzultanti a ti přinesou i návrhové vzory a následně bude tak jako vždycky Kdo neprogramuje s Python vzory programuje proti nám.
Tak nějak...
-
Osobně mám pocit, že spousta návrhových vzorů jen přináší možnosti z jiných jazyků a programovacích paradigmat. Např Command odpovídá closure z jiných jazyků. S rozšířením lambda výrazů by mohl pomalu vyhnít. A třeba Visitor je imho jen pokus o součtové typy + pattern matching, jako třeba v Haskellu.
-
@Waseihou: Tvoje zdání je správné. Jsou vzory, které postrádají smysl (např. Observer se dá nahradit Eventy, Command (z části) lamda výrazy ...), jsou vzory, které smysl mají (Singleton, Builder...).
Návrhový vzor je vždy ofuk nad nedokonalostí jazyka / prostředí. V LISPu se více-méně používá jen jeden ("makro na každou kravinu"), v Javě, C++ a C# se jich používá více než je v GoF.
Je dobré je znát - pak uvidíš úlohu a můžeš si říct "Jo, tohle vlastně řeší vzor ...". Je špatné je cpát všude stylem "Tady je úloha, jakej vzor na ni můžu napasovat?", stejně jako rozšířený mýtus především PHP programátorů, že návrhové vzory jsou k ničemu a že i "kýbl s*aček" je legitimní architektonický návrhový vzor.
Snaž se o čitstý, testovatelný a udržovatelný kód ("Bude mi jasné, proč toto tady je, až se na to za půl roku podívám?") a samo Ti vyplyne, jaké vzory budeš používat a jaké ne.
-
Rád bych upozornil na to, že v předmluvě k té slavné knize GoF explicitně uvádí, že návrhové vzory jsou často zapracovány do jazyků vyšší úrovně a pak ani nemá cenu o nich mluvit. Tuším že uváděným příkladem je kdysi velmi častý návrhový vzor "volání podprogramu".
-
Koukám že jsem sám naletěl a špatně to zformuloval...
Návrhový vzor "volání podprogramu" je samozřejmě stále velmi často používaný. Jen o tom v 99.99% případů není potřeba mluvit.