Zdroje k rozvoji OOP myšlení

Kit

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #45 kdy: 16. 08. 2016, 20:28:45 »
Po nějakém čase jsem se ... dostal ke Smalltalku, u něhož si živě vzpomínám na ten moment, kdy by člověk vykřikl "heuréka!" Tím byl můj pohled na OOP zformován a tím jsem odsouzen k jazykům jako Objective C, Ruby, Python apod., chci-li psát objektově, aniž bych přitom musel nadávat jak špaček, jako je tomu u Javy nebo nedej bože u C++.

To bude asi ono. Mnoho z těch, kteří chválí OOP v C++ si jednoduše nevyzkoušelo, jak je to s OOP v jiných jazycích, např. ve jmenovaném Smalltalku. Vždyť i v proklínaném PHP je OOP na mnohem vyšším levelu než v C++.


zmija

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #46 kdy: 16. 08. 2016, 21:30:12 »
no pockat. srovnavat C++ a PHP to je teda katastrofa. Ne ne. To nedelejte.

Ran

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #47 kdy: 16. 08. 2016, 21:48:21 »

Citace
Mne nejde o flamewar, pokud chce Ran delat OOP, at ho dela, ale zajima me, jestli jeho otazka nema falesny motiv, napr. zda si nemysli, ze OOP magicky vyresi problemy, ktere nejsou zpusobene tim, ze je kod "malo objektovy".

Nemyslím, že jde o falešný motiv. Pouze jsem jako většina lidí začínal s procedurálním programováním a tak nějak "cítím", že jsem se od něj ještě úplně neodprostil. Teď jsem viděl nějaké přednášky, většinou od lidí co vyrostli na smalltalku a přišlo mi že se mám ještě hodně co učit, tak jsem se jen zeptal na nějaké materiály co se osvědčili vám všem...

Citace
Po nějakém čase jsem se - na základě doporučení vyvolaném podobným žehráním, jako jsem napsal k C++ tady, ale před zkušenějším kolegou - dostal ke Smalltalku, u něhož si živě vzpomínám na ten moment, kdy by člověk vykřikl "heuréka!"

I tak nějak by se to dalo popsat, akorát jsem zatím stále před tím "heuréka"...

Citace
Za to IMHO částečně mohou jazyky jako Java a C#, kde se objekty používají i pro strukturování kódu.

+1

Tzn. chci se jen učit... :)

Kit

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #48 kdy: 16. 08. 2016, 21:49:22 »
no pockat. srovnavat C++ a PHP to je teda katastrofa. Ne ne. To nedelejte.

Srovnávám OOP v C++ vs. OOP v PHP.

Kit

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #49 kdy: 16. 08. 2016, 21:53:09 »
Nemyslím, že jde o falešný motiv. Pouze jsem jako většina lidí začínal s procedurálním programováním a tak nějak "cítím", že jsem se od něj ještě úplně neodprostil. Teď jsem viděl nějaké přednášky, většinou od lidí co vyrostli na smalltalku a přišlo mi že se mám ještě hodně co učit, tak jsem se jen zeptal na nějaké materiály co se osvědčili vám všem...

Tak na chvíli odlož C++, nainstaluj si Smalltalk a zkoušej si příklady. I když se pak vrátíš k C++, to objektové myšlení ti zůstane.


Ran

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #50 kdy: 16. 08. 2016, 21:56:07 »
Citace
Tak na chvíli odlož C++, nainstaluj si Smalltalk a zkoušej si příklady.

Asi to bude nejlepší možnost.

balki

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #51 kdy: 16. 08. 2016, 22:42:05 »
Bohužel, OOP je dnes příliš široký pojem. Takže bych možná volil opačnou cestu - jazyk a s ním i "jeho" pojetí OOP. Člověk zvyklý na "objektové" programování v C++ bude mít potíže s Javou a Ruby nerozdejchá vůbec. Buď uzná, že to nedává a půjde od toho (ta lepší varianta), nebo se bude pokoušet "objektově" programovat tak, jak je zvyklý z C++. A až to po něm bude číst javista resp. rubista, to bude takových nadávek...

Jinak co se mě týče, tak jsem céčkař, který se pak učil C++ a s ním i OOP, ale nějak jsem to tenkrát nepochopil a nic mi to neříkalo, co učebnice a jiní c++kaři považovali za úžasné, mi připadalo jako celkem zbytečné, ne-li přímo otravné, neustále mi unikaly ty úžasné výhody OOP. Zdrojáky programů v C++ mi připadaly delší a nepřehlednější než odpovídající kód v C, aniž by to přinášelo nějaké významné výhody, a tohoto dojmu jsem se nezbavil dodnes.
Po nějakém čase jsem se - na základě doporučení vyvolaném podobným žehráním, jako jsem napsal k C++ tady, ale před zkušenějším kolegou - dostal ke Smalltalku, u něhož si živě vzpomínám na ten moment, kdy by člověk vykřikl "heuréka!" Tím byl můj pohled na OOP zformován a tím jsem odsouzen k jazykům jako Objective C, Ruby, Python apod., chci-li psát objektově, aniž bych přitom musel nadávat jak špaček, jako je tomu u Javy nebo nedej bože u C++.
Když bych se ale zamyslel, kolik projektů bylo C++ a kolik Python, tak bych musel říct, že na chleba jsem si vydělával tím C++. A vydělávat si prací, kterou od srdce nesnášíte...

Myslim si opak, ked sa clovek nauci principy oop, potom mu bude lahsie sa adaptovat na obmedzenia jazykov. OOP je len jedno, je otazka, ako ho kto zhovadi :)

Staci zacat v niecom inom, ako C++ a vsetko vporadku.


Kiwi

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #52 kdy: 17. 08. 2016, 01:51:43 »
To bude asi ono. Mnoho z těch, kteří chválí OOP v C++ si jednoduše nevyzkoušelo, jak je to s OOP v jiných jazycích, např. ve jmenovaném Smalltalku. Vždyť i v proklínaném PHP je OOP na mnohem vyšším levelu než v C++.
Vyhovuje-li jim to, nemají důvod zkoušet jiné přístupy, ba dokonce by se jim IMHO zdály nesprávné. A je známá věc, že přístup, jenž si člověk osvojí jako první, se pro něj stane velmi svazující.

Pouze jsem jako většina lidí začínal s procedurálním programováním a tak nějak "cítím", že jsem se od něj ještě úplně neodprostil.
Nemyslím si, že by procedurální programování bylo ve sporu s objektovým. OOP je abstrakčně výš. Řeší principy, jakými se zachází s jednotlivými elementy programu, jak spolu interagují data a algoritmy. Procedurální přístup tuto problematiku vůbec neřeší, to je na autorovi programu, aby si to sám specifikoval. Jestliže strukturované programování přináší principy a nástroje k abstraktivizaci a interpretaci dat a k organizaci kódu (místo aby to musel dělat programátor "ručně"), tak OOP se snaží pomoci rozlousknout problém, jak to zařídit, aby si data vždy našla cestu k tomu správnému algoritmu, který je zpracuje (místo aby to musel dělat programátor "ručně"). Na jakém substrátu je to celé vybudované, jestli procedurálním či jiném, není nijak zvlášť podstatné. Čímž netvrdím, že ten substrát nebude mít na výslednou podobu mechanismů OOP žádný vliv.

Citace
I tak nějak by se to dalo popsat, akorát jsem zatím stále před tím "heuréka"...
Ten moment přijde, když najednou člověk vidí, že to, co jsem o OOP napsal v odstavci výše, mu pod rukama opravdu funguje a že k tomu, aby stejnou funkcionalitu implementoval v neobjektovém prostředí, musel by napsat násobně více kódu. Alespoň teda u mě to tak bylo.

I když se pak vrátíš k C++, to objektové myšlení ti zůstane.
Myslim si opak, ked sa clovek nauci principy oop, potom mu bude lahsie sa adaptovat na obmedzenia jazykov.
Tím si právě nejsem tak úplně jist. Člověk si snadněji zvyká na komfort než na omezení.

Citace
OOP je len jedno
Jenže různí lidé si ho představují různě a obvykle jsou přesvědčeni o správnosti té své představy (včetně mě  :) ). A protože nerad ztrácím čas hádkami, tak se podobně kategorickým výrokům raději vyhýbám. Jestli má někdo pocit, že objektový program se získá tak, že se funkce a proměnné (nějak) natlačí do tříd a zařídí se, aby to bylo (za každou cenu) v dědické hierarchii a napíše se getInstance, protože to tak přece měli v tej brožuře "Pepek Vyskoč: Jak se naučit psát ten nejvíc dokonalej objektovej kód za 10 dnů", tak je to jeho věc.

balki

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #53 kdy: 17. 08. 2016, 02:35:50 »
Citace
OOP je len jedno
Jenže různí lidé si ho představují různě a obvykle jsou přesvědčeni o správnosti té své představy (včetně mě  :) ). A protože nerad ztrácím čas hádkami, tak se podobně kategorickým výrokům raději vyhýbám. Jestli má někdo pocit, že objektový program se získá tak, že se funkce a proměnné (nějak) natlačí do tříd a zařídí se, aby to bylo (za každou cenu) v dědické hierarchii a napíše se getInstance, protože to tak přece měli v tej brožuře "Pepek Vyskoč: Jak se naučit psát ten nejvíc dokonalej objektovej kód za 10 dnů", tak je to jeho věc.

Pokial si clovek mysli o OOP kraviny a kasle na autority v tomto obore, tak je tych objektovych programovani aj 750.38 . Podobnym vyhlaseniam sa nevyhybam, lebo o "paradigmach" (hlupy nazov, ale pouziva sa)  som mal bakalarku, diplomovku a (bohuzial) aj nedokoncenu dizertacku. Su univerzalne principy, ktore vymysleli mudri ludia, ked sa zanedba ich vyuka, clovek potom objavuje znova koleso.

SB

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #54 kdy: 17. 08. 2016, 09:24:21 »
Co znamená chápat OOP? Přijde mi, že z toho děláte zbytečně vědu.

Chápat způsob modelování (struktury, organizace) a výpočtu.
Koncept OOP je poměrně jednoduchý, skutečnou vědu z něj udělaly právě až jazyky jako Java, C++ aj., vizte https://forum.root.cz/index.php?topic=13697.msg175279#msg175279 .

SB

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #55 kdy: 17. 08. 2016, 09:29:43 »
OK, ale "neco jako Karel" ani "neco jako Basic" se v praxi nepouziva, takze se bavime minimalne o "jazyce s funkcemi jako cleny". Tam uz se da DRY velmi slusne pouzivat i bez "objektoveho mysleni".

Mne nejde o flamewar, pokud chce Ran delat OOP, at ho dela, ale zajima me, jestli jeho otazka nema falesny motiv, napr. zda si nemysli, ze OOP magicky vyresi problemy, ktere nejsou zpusobene tim, ze je kod "malo objektovy".

Jasně, nebudeme tu řešit kde kolik, chtěl jsem tím jen ukázat, že hodně abstraktní jazyky dokážou značně zmenšit velikost kódu a zvýšit znovupoužitelnost komponent. Sice (skoro) ve všech jazycích jde (skoro) všechno, ale v každých jinak složitě. Už jen proto si jazyky nikdy nebudou rovny (jak někteří tvrdí).

A to souvisí s druhou částí odpovědi - záleží, co chce tazatel dělat, OOP je vhodné pouze na omezenou skupinu problémů.

SB

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #56 kdy: 17. 08. 2016, 09:46:47 »
Bohužel, OOP je dnes příliš široký pojem. Takže bych možná volil opačnou cestu - jazyk a s ním i "jeho" pojetí OOP. Člověk zvyklý na "objektové" programování v C++ bude mít potíže s Javou a Ruby nerozdejchá vůbec. Buď uzná, že to nedává a půjde od toho (ta lepší varianta), nebo se bude pokoušet "objektově" programovat tak, jak je zvyklý z C++. A až to po něm bude číst javista resp. rubista, to bude takových nadávek...

Jinak co se mě týče, tak jsem céčkař, který se pak učil C++ a s ním i OOP, ale nějak jsem to tenkrát nepochopil a nic mi to neříkalo, co učebnice a jiní c++kaři považovali za úžasné, mi připadalo jako celkem zbytečné, ne-li přímo otravné, neustále mi unikaly ty úžasné výhody OOP. Zdrojáky programů v C++ mi připadaly delší a nepřehlednější než odpovídající kód v C, aniž by to přinášelo nějaké významné výhody, a tohoto dojmu jsem se nezbavil dodnes.
Po nějakém čase jsem se - na základě doporučení vyvolaném podobným žehráním, jako jsem napsal k C++ tady, ale před zkušenějším kolegou - dostal ke Smalltalku, u něhož si živě vzpomínám na ten moment, kdy by člověk vykřikl "heuréka!" Tím byl můj pohled na OOP zformován a tím jsem odsouzen k jazykům jako Objective C, Ruby, Python apod., chci-li psát objektově, aniž bych přitom musel nadávat jak špaček, jako je tomu u Javy nebo nedej bože u C++.
Když bych se ale zamyslel, kolik projektů bylo C++ a kolik Python, tak bych musel říct, že na chleba jsem si vydělával tím C++. A vydělávat si prací, kterou od srdce nesnášíte...

Zažil jsem téměř to samé: Od mala mě lámali myšlení do imperativního, OOP mi začalo dávat smysl (opět po několika letech těžkého lámání mysli) až (klidně ať se někteří naserou) se Smalltalkem, přišlo něco jako prohlédnutí. Když se k tomu časem přidalo pochopení prototypování (je snad ještě jednodušší než třídně-instanční implementace), je to ono.

K jazykům: Osobně(!) jazyk, který nepodporuje velmi pozdní vazbu (very late binding), nepovažuju za objektový. Takových moc není.

SB

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #57 kdy: 17. 08. 2016, 10:32:30 »
Nemyslím, že jde o falešný motiv. Pouze jsem jako většina lidí začínal s procedurálním programováním a tak nějak "cítím", že jsem se od něj ještě úplně neodprostil. Teď jsem viděl nějaké přednášky, většinou od lidí co vyrostli na smalltalku a přišlo mi že se mám ještě hodně co učit, tak jsem se jen zeptal na nějaké materiály co se osvědčili vám všem...

...

I tak nějak by se to dalo popsat, akorát jsem zatím stále před tím "heuréka"...

Tzn. chci se jen učit... :)

Tak vám to zkrátím: O OOP bylo vymláceno už hodně prázdné slámy (převážně těmi, co tom nic nevědí).

Buďto chcete používat OOP v mainstreamových jazycích - s tím vám radit nebudu,
nebo chcete OOP pochopit - stáhněte si z http://pharo.org/ celé prostředí (stačí rozbalit a spustit) a můžete začít.
Z literatury doporučuju jeden z nejlepších textů pro začátečníky, a to 201EVojtěch Merunka: Objektové metody a přístupy -  Smalltalk-80 (učební text)201C, bohužel si ho budete muset opatřit legálně např. dotazem autorovi. Případně je možno dohledat jeho volně dostupné texty, např. z konference Objekty (konané v ČR).

SB

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #58 kdy: 17. 08. 2016, 10:34:19 »
Tak na chvíli odlož C++, nainstaluj si Smalltalk a zkoušej si příklady. I když se pak vrátíš k C++, to objektové myšlení ti zůstane.

Zůstane, akorát zjistí, že to, co šlo ve Smalltalku, už jinde nejde a bude nasraný.

podlesh

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #59 kdy: 17. 08. 2016, 11:06:24 »
Já osobně zastávám názor, že každý OOP programátor má mít nějaké zkušenosti s funkcionálním programováním. Jinak zůstane stále svázán v imperativním světě.  Zmiňovaný smalltalk samozřejmě také pomůže, ale FP je IMHO lepší na uvědomění si užitku dekompozice/kompozice (což je dle mých praktických zkušeností hlavní problém s imperativním programováním).

Bohužel z nějakého nepochopitelného důvodu hodně VŠ kompletně FP přeskakují :-( Přitom od toho studium na VŠ je, aby si člověk vyzkoušel ty "v praxi nepoužívané" věci.