Návrhové vzory v jazyce Python?

Waseihou

Návrhové vzory v jazyce Python?
« kdy: 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...


Kolemjdoucí

Re:Návrhové vzory v jazyce Python?
« Odpověď #1 kdy: 27. 08. 2013, 20:55:37 »
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.

Waseihou

Re:Návrhové vzory v jazyce Python?
« Odpověď #2 kdy: 27. 08. 2013, 22:10:10 »
Hm, nějaké by se tam asi našly: http://www.youtube.com/watch?v=0vJJlVBVTFg

Natix

Re:Návrhové vzory v jazyce Python?
« Odpověď #3 kdy: 28. 08. 2013, 01:46:36 »
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.

dl

Re:Návrhové vzory v jazyce Python?
« Odpověď #4 kdy: 28. 08. 2013, 09:46:04 »
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.


dl

Re:Návrhové vzory v jazyce Python?
« Odpověď #5 kdy: 28. 08. 2013, 09:53:17 »
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...

JSH

Re:Návrhové vzory v jazyce Python?
« Odpověď #6 kdy: 02. 09. 2013, 00:59:52 »
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.

eMko

  • ****
  • 456
    • Zobrazit profil
    • E-mail
Re:Návrhové vzory v jazyce Python?
« Odpověď #7 kdy: 02. 09. 2013, 07:32:58 »
@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.

podlesh

Re:Návrhové vzory v jazyce Python?
« Odpověď #8 kdy: 02. 09. 2013, 13:59:55 »
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".

podlesh

Re:Návrhové vzory v jazyce Python?
« Odpověď #9 kdy: 02. 09. 2013, 14:05:24 »
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.