Zdroje k rozvoji OOP myšlení

gamer

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #30 kdy: 16. 08. 2016, 09:57:12 »
co tedy radis?
Když to sem napíšu, tak to skončí jako nekonečný flamewar, jestli je lepší A nebo B. Ať si každý používá co chce. Každopádně C++ je na učení OOP dobré jen pro člověka, který C++ velmi dobře ovládá. Což se tak trochu navzájem vylučuje...


SB

Re:OOP - zdroje
« Odpověď #31 kdy: 16. 08. 2016, 13:58:40 »

Nakoukl jsem do ní a zjistil jsem, že na začátku se ani moc nezabývá C++, jako spíš OOP v obecné rovině. Takže celkově ta kniha může být docela dobrá zejména kvůli: "... první díl jsou jen obecné řeči a hloupé příklady".

Právě ty obecné řeči a "hloupé" příklady jsou při výuce OOP nejdůležitější. Jinak to programátor začne mydlit procedurálně, protože C++ k tomu silně svádí.

Zcela souhlasím, OOP je myšlenka, ne implementace. Ale pořád si nejsem jistý tou následnou implementací v C++. :)

SB

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #32 kdy: 16. 08. 2016, 14:05:42 »
Neříkáte to přesně - čím abstraktnější jazyk máte, tím znovupoužitelnější konstrukce můžete psát. Neboli duplicitám můžete zabránit jen na takové úrovni, na které vám to dovolí jazyk. Samo OOP má taky nástroje pro obecné konstrukce, např. dependency injection, dědičnost (ne nutně), delegování, ...

Chtělo by to příklad. Už i "blbé" C umožňuje používání callbacků, které toho vládnou pořešit opravdu hodně.

Příklad: Chcete provést nějaký výpočet...
něco jako jazyk Karel: Téměř žádná abstrakce => můžete explicitně sečíst 4+5, obecnější zápis nejde;
něco jako Basic: abstrakce hodnoty proměnnou => už můžete vytvořit obecný výpočet a + b;
jazyk s funkcemi jako členy nebo uzávěrami => můžete do operace vstřikovat i postup výpočtu;
atd.

SB

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #33 kdy: 16. 08. 2016, 14:10:13 »
panove a com je rec? vzdyt C++ je jazyk kde sa da s OOP poradne vyhrat. Aspon nas na skole ucili, ze je to OOP jazyk. jste si jisti ze opravdu myslite OOP?

...a učil vás to céčkař, ne?
Plno jazyků je OOP, ale některé jsou prostě víc OOP nebo se v nich jednodušeji OOP modeluje. Je to jasné?

SB

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #34 kdy: 16. 08. 2016, 14:16:43 »
C++ je jedna z konkrétních implementací OOP a má svoje probémy. Namátkou nepodpora nativních interfaces, musí se to dělat přes abstraktní třídu, což vadí třeba když chci objekt implementující dva různé interface, vede to na vícenásobnou dědičnost se všemi negativními důsledky. V C++ je taky velice jednoduché střelit se do nohy, zapomenutý virtuální destructor v bázové třídě může být docela zábavný. Ze stejného důvodu není ani tohle dobrý nápad:
Kód: [Vybrat]
class MyVector : public std::vector
Pokud se OOP učím, nechci takové věci řešit.

A jste u toho - interface, abstraktní třída, dědičnost, virtuálnost, třída obecně - nic z toho není pro OOP nezbytné, je to způsob implementace v C++.


zmija

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #35 kdy: 16. 08. 2016, 15:10:36 »
panove a com je rec? vzdyt C++ je jazyk kde sa da s OOP poradne vyhrat. Aspon nas na skole ucili, ze je to OOP jazyk. jste si jisti ze opravdu myslite OOP?

...a učil vás to céčkař, ne?
Plno jazyků je OOP, ale některé jsou prostě víc OOP nebo se v nich jednodušeji OOP modeluje. Je to jasné?

Ucil me to pan Ing. Peter Peringer, kterej je fakt trida v C/C++. To se mu musi uznat. Kdo studoval na FIT VUT, tak ho urcite zna.

Kit

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #36 kdy: 16. 08. 2016, 15:19:19 »
panove a com je rec? vzdyt C++ je jazyk kde sa da s OOP poradne vyhrat. Aspon nas na skole ucili, ze je to OOP jazyk. jste si jisti ze opravdu myslite OOP?

...a učil vás to céčkař, ne?
Plno jazyků je OOP, ale některé jsou prostě víc OOP nebo se v nich jednodušeji OOP modeluje. Je to jasné?

Ucil me to pan Ing. Peter Peringer, kterej je fakt trida v C/C++. To se mu musi uznat. Kdo studoval na FIT VUT, tak ho urcite zna.

Peringera znám velmi dobře. Určitě jsi ho pochopil špatně. V C++ se dá objektově programovat, ale pokud někdo programuje v C++, tak to vůbec nemusí znamenat, že skutečně objektově programuje, i když objekty používá.

expert

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #37 kdy: 16. 08. 2016, 15:44:53 »
Peringera znám velmi dobře. Určitě jsi ho pochopil špatně. V C++ se dá objektově programovat, ale pokud někdo programuje v C++, tak to vůbec nemusí znamenat, že skutečně objektově programuje, i když objekty používá.

Programuji v C++ a používám objekty, ale jak poznám, jestli programuji objektově? Mohl by ses rozepsat?

SB

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #38 kdy: 16. 08. 2016, 15:50:30 »
Ucil me to pan Ing. Peter Peringer, kterej je fakt trida v C/C++. To se mu musi uznat. Kdo studoval na FIT VUT, tak ho urcite zna.

Beru, že je třeba dobrý v C++, ale o OOP to nic nevypovídá (céčkařů jsem viděl mraky, ale OOP nechápal snad ani jeden). Ať je to jakkoli, pro výuku OOP si vyberte jiný jazyk, nepřidělávejte si práci hned na začátku.

gl

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #39 kdy: 16. 08. 2016, 15:54:01 »
Beru, že je třeba dobrý v C++, ale o OOP to nic nevypovídá (céčkařů jsem viděl mraky, ale OOP nechápal snad ani jeden). Ať je to jakkoli, pro výuku OOP si vyberte jiný jazyk, nepřidělávejte si práci hned na začátku.

Co znamená chápat OOP? Přijde mi, že z toho děláte zbytečně vědu.

Inkvizitor

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #40 kdy: 16. 08. 2016, 15:55:00 »
Neříkáte to přesně - čím abstraktnější jazyk máte, tím znovupoužitelnější konstrukce můžete psát. Neboli duplicitám můžete zabránit jen na takové úrovni, na které vám to dovolí jazyk. Samo OOP má taky nástroje pro obecné konstrukce, např. dependency injection, dědičnost (ne nutně), delegování, ...

Chtělo by to příklad. Už i "blbé" C umožňuje používání callbacků, které toho vládnou pořešit opravdu hodně.

Příklad: Chcete provést nějaký výpočet...
něco jako jazyk Karel: Téměř žádná abstrakce => můžete explicitně sečíst 4+5, obecnější zápis nejde;
něco jako Basic: abstrakce hodnoty proměnnou => už můžete vytvořit obecný výpočet a + b;
jazyk s funkcemi jako členy nebo uzávěrami => můžete do operace vstřikovat i postup výpočtu;
atd.

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".

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

Mno, mozna to neni veda, ale spis takova kombinace vedy, umeni a remesla ;)

Clovek ma vetsinou po prvnim seznameni s OOP (nebo jinym paradigmem) tendenci ho pouzivat... ne uplne stastne.

gl

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

Mno, mozna to neni veda, ale spis takova kombinace vedy, umeni a remesla ;)

Clovek ma vetsinou po prvnim seznameni s OOP (nebo jinym paradigmem) tendenci ho pouzivat... ne uplne stastne.

Za to IMHO částečně mohou jazyky jako Java a C#, kde se objekty používají i pro strukturování kódu. Lidi se to potom snaží cpát všude.


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

Mno, mozna to neni veda, ale spis takova kombinace vedy, umeni a remesla ;)

Clovek ma vetsinou po prvnim seznameni s OOP (nebo jinym paradigmem) tendenci ho pouzivat... ne uplne stastne.

Za to IMHO částečně mohou jazyky jako Java a C#, kde se objekty používají i pro strukturování kódu. Lidi se to potom snaží cpát všude.

To neni zas takovy problem, ve Smalltalku je to jeste duslednejsi...

Kiwi

Re:Zdroje k rozvoji OOP myšlení
« Odpověď #44 kdy: 16. 08. 2016, 20:14:33 »
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...