funkcionálně.cz

Přední český blog o funkcionálním programování, kde se o funkcionálním programování nepíše
komentáře článku 

Co je vůbec objektové a funckionální programování?



Text komentáře


paranoiq (2013-09-06 17:52)
a na principu identity je postaven hrůzný anti-pattern identity map :/


PM (2013-09-07 13:39)
Můžeš prosím napsat nějaký konkrétnější příklad nebo kontext?


Dan Kvasnicka (2013-09-06 20:01)
Co s tyka OOP kvuli organizaci a modularizaci programu, to pro me bylo tak trochu WTF uz kdyz jsem to slysel v prednasce Martina Oderskeho (viz. napr tento slide http://parleys.com/play/51704efce4b095cc56d8d4b5/chapter32/about). Fakt, ze v nejakem jazyce chybi slusny system modularizace kodu prece neznamena, ze je treba to resit objektovym programovanim. Napr. Racket ma spickovy system modulu a nepotrebuje k tomu vubec OOP (i kdyz ho umi). Ano, muzes trochu poodstoupit a tvrdit, ze kvalitni system modularizace je v zasade "high-level" OOP. To mi ale prijde jako "argument kvuli argumentu" ;) Respektuju OOP a jeho pouziti tam, kde to ma smysl. Ale zrovna tenhle argument organizace a modularizace mi prijde celkem prustrelny.

Jinak ocenuju duraz na ref. transparentnost. Prijde mi, ze se to trochu v te hegemonii kolem FP ztraci a tak je dobre to pripominat :)


KarelI (2013-09-06 23:15)
Mam pocit, ze jste se dopustil ponekud rozsireneho omylu ze OOP je hlavne o polymorfismu. Ono to na tech uvodnich lekcich vypada hezky - kdyz se zacne s temi klasickymi geometrickymi objekty, vypadaji ruzne, ale chovaji se podobne. A pak student uvazuje objektove a vsude cpe polymorfismus a dedi hlava nehlava. A pak skonci v situaci kdy uz ani neumi nic jineho nez podedit pet objektu dohromady aby dostal co potrebuje.

Ovsem v realnem svete velkych programu to tak samozrejme neni a treba takove zapouzdreni dava velmi dobry smysl samo o sobe uz jen proto, aby bylo mozno udrzet objekt v rozumnem stavu napric aplikaci. Stejne tak kompozice - dostaneme snadne testovani jednotlivych casti a zaroven rozumnou funkcnost celku (kdyz se udela spravne). Oboji je na dlouhe vypraveni a pestuje se dlouholetymi zkusenostmi a pritom se o polymorfismus nemusi ani zavadit. Ja sam uz jsem nekolikrat zazil situaci, kdy se program docela zjednodusil kdyz jsem prestal lpet na nekterych spolecnych vlastnostech i kdyz to zprvu vypadalo ze se to uplne nabizi.


v6ak (2013-09-08 21:15)
Ano, viděl jsem už různé pseudoobjektové zrůdnosti. Například někdo podědil ByteArrayOutputStream jen proto, že implementoval nějaký OutputStream, který obsahoval v impementaci nějaký buffer. Jeden z mnoha příkladů, kdy měla být použita kompozice.


PP (2013-09-07 13:28)
Já za hlavní myšlenku OOP považuji fakt, že objekt zaštiťuje data i metody nějaké domény a nejde jen o nějakou skořápku na funkce, kterým posílám data k zpracování.

A polymorfismus je fajn, ale je to podle mne jen taková vedlejší vlastnost :-D


v6ak (2013-09-08 21:22)
"Ale aby to [zapouzdření] mělo smysl, potřebuje polymorfismus"

Je to IMHO přesně naopak. Zapouzdření bez polymorfismu může existovat a dávat smysl. Mám někde jednu implementaci, jejíž detaily nechci vystavovat ven, abych mohl tu implementaci kdykoli změnit. Tady mám zapouzdření, ale ne nutně polymorfismus.

Na druhou stranu polymorfismus bez aspoň částečného zapouzdření dost dobře nejde. Pokud nemám dostatečně zapouzdřeno a kód se tedy bude spoléhat na některé vnitřní detaily nějaké implementace, musí z principu mít tyto vnitřní detaily všechny implementace shodné. Což dost omezuje možnosti využití polymorfismu.


@kaja47, kaja47@k47.cz, deadbeef.k47.cz, starší články