Čada: Objektové programování

SB

Re:Čada: Objektové programování
« Odpověď #15 kdy: 17. 06. 2015, 11:13:06 »
:D Původní návrh OOP byl asynchronní remote procedure call mezi různými procesy. To se ukázalo jako nepraktické, tak se vytvořila prakticky použitelná realizace objektů tak jak je v C++ nebo C# nebo v Javě. Ve Smalltalku je proto jedna z nejvíce doku*vených implementací OOP, ani jedno, ani druhé, pro začátečníka největší ztráta času.
Dnes se používají oba způsoby, pod názvem OOP praktická realizace objektů a pod názvem RPC původní idea.

Asynchronní ve smyslu spouštění metod nebo paralelismu? Nepraktické v čem? Prakticky použitelná díky čemu? Co myslíte pod slovy „jedno“ a „druhé“? Odstavec vůbec nic nevysvětluje, jen obecně plácá.

V životě jsem neslyšel, že by se původnímu objektovému paradigmatu říkalo RPC (a to se kolem toho pohybuju), ani mi není jasné, co to s tím má společného. Naopak jsem slyšel, že mezitímco zneužívané „object oriented programming“ bylo přenecháno hybridním bastlům typu C++, původní myšlenka se označuje jako „object programming“ nebo „pure object programming“.


l

Re:Čada: Objektové programování
« Odpověď #16 kdy: 17. 06. 2015, 11:47:04 »
Asynchronní ve smyslu spouštění metod nebo paralelismu? Nepraktické v čem? Prakticky použitelná díky čemu? Co myslíte pod slovy „jedno“ a „druhé“? Odstavec vůbec nic nevysvětluje, jen obecně plácá.

V životě jsem neslyšel, že by se původnímu objektovému paradigmatu říkalo RPC (a to se kolem toho pohybuju), ani mi není jasné, co to s tím má společného. Naopak jsem slyšel, že mezitímco zneužívané „object oriented programming“ bylo přenecháno hybridním bastlům typu C++, původní myšlenka se označuje jako „object programming“ nebo „pure object programming“.

Asynchronní ve smyslu samostatně fungující počítač, asynchronní spouštění metod. Nepraktické v tom, že není možné mít pro každý objekt proces nebo vlákno. Praktická realizace OOP v C++/C#/Java je dost jiná.
Smalltalk neumí ani původní návrh OOP ani OOP použité v C++/C#/Java, je to tedy největší ztráta času.
Pod pojmy object programming a pure object programming si každý představuje něco jiného, co je asynchronní RPC je poměrně jasné.

JSH

Re:Čada: Objektové programování
« Odpověď #17 kdy: 17. 06. 2015, 11:53:12 »
Naopak: Nejdříve na čisté formě pochopit (Smalltalk), pak se seznámit s dobastlenými implementacemi v ostatních jazycích. Jestliže nedojde k pochopení podstaty, nemá smysl OOP ani používat, jinak to dopadne právě tak, jak je vidět v praxi.
Na Smalltalk opravdu doporučuju kouknout. Na něm jsem pochopil, jak odtržené od reality můžou být čisté formy. A taky to, že mainstream jazyky připomínají prase s křídly spíš z nutnosti než díky špatnému návrhu.

Jann

Re:Čada: Objektové programování
« Odpověď #18 kdy: 17. 06. 2015, 12:23:09 »
Můžete doporučit knížku $PŘEDMĚT? Nějak jsem k ni nenašel recenze kromě jedné přímo v e-shopu (https://www.kosmas.cz/knihy/181112/objektove-programovani/), a ta je dost hrozná. Tak nevím, jakou knížku byste eventuálně doporučili k naučení základů OOP?

Takže…
Knížku jsem si prolistoval v knihovně a můj dojem je, že to autor dané recenze evidentně sám vůbec nechápe objektové programování a sám nejspíš patří mezi ty prasitele „objektového” kódu, pokud – nedej bože – sám aktivně programuje.
Naopak, knížka ukazuje rozdíly mezi různými implementacemi objektového přístupu, od těch neohrabanějších (Java) až po ty čistší (Objective C + Cocoa), ukazuje, jak se i v té Javě dá navrhnout relativně čistý design při vědomí jejích omezení, rozebírá různé modely a přístupy v objektovém návrhu, na příkladech ukazuje jejich výhody i úskalí, nezabíhá do zbytečného teoretizování, ale je prakticky orientovaná a srozumitelná i pro začátečníky. Zabývá se problémy, které většina jiných knih vůbec neřeší, ačkoli povědomí o nich je pro kvalitní objektový návrh nezbytné, naopak neřeší různé kosmetické nesmysly, jimiž se ty neohrabané objektové jazyky snaží maskovat svou neohrabanost a jež jsou prezentovány jako ty jedním z předřečníků zmiňované samospásné metody návrhu.
Celé toto nedorozumění tkví v tom, že 90% vývojářů, včetně těch, kteří dostanou ten hloupý nápad místo sebevzdělávání se a čtení napsat knihu a o své „rozumy” se podělit s nebohými čtenáři, ve skutečnosti objektovému programování vůbec nerozumí a nepochopili ho, čehož dokladem jsou jejich programátorské výtvory. V tomto ohledu bych knížku pana Čady považoval za jednu z mála světlých výjimek na českém trhu.

v

Re:Čada: Objektové programování
« Odpověď #19 kdy: 17. 06. 2015, 12:37:38 »
...objektovému programování vůbec nerozumí a nepochopili ho...

mohl byste prosím definovat "objektové programování"?


SB

Re:Čada: Objektové programování
« Odpověď #20 kdy: 17. 06. 2015, 12:52:35 »
Asynchronní ve smyslu spouštění metod nebo paralelismu? Nepraktické v čem? Prakticky použitelná díky čemu? Co myslíte pod slovy „jedno“ a „druhé“? Odstavec vůbec nic nevysvětluje, jen obecně plácá.

V životě jsem neslyšel, že by se původnímu objektovému paradigmatu říkalo RPC (a to se kolem toho pohybuju), ani mi není jasné, co to s tím má společného. Naopak jsem slyšel, že mezitímco zneužívané „object oriented programming“ bylo přenecháno hybridním bastlům typu C++, původní myšlenka se označuje jako „object programming“ nebo „pure object programming“.

Asynchronní ve smyslu samostatně fungující počítač, asynchronní spouštění metod. Nepraktické v tom, že není možné mít pro každý objekt proces nebo vlákno. Praktická realizace OOP v C++/C#/Java je dost jiná.
Smalltalk neumí ani původní návrh OOP ani OOP použité v C++/C#/Java, je to tedy největší ztráta času.
Pod pojmy object programming a pure object programming si každý představuje něco jiného, co je asynchronní RPC je poměrně jasné.

Samostatně fungující počítač??? Nevím, co máte na mysli. Objekt nemůže mít žádné vlákno, protože není původcem změn, tím jsou jeho metody. Nevím, v čem spočívá asynchronnost realizace v hybridních jazycích, ale podstatný vliv na použitelnost mají hypertrofovaný typový systém, polymorfismus dědičností, deklarativní třídy (a z toho plynoucí šílená implemetace reflexivity a neexistence polymorfismu na třídní straně), nadbytečné imperativní jazykové konstrukce, ... To se potom hodně těžko něco modeluje.
Jaký je ten původní OOP? Smalltalk vychází z tříd, které se prvně objevily v Simule, sám Smalltalk objektové paradigma značně rozšířil.

SB

Re:Čada: Objektové programování
« Odpověď #21 kdy: 17. 06. 2015, 13:09:40 »

Takže…
Knížku jsem si prolistoval v knihovně a můj dojem je, že to autor dané recenze evidentně sám vůbec nechápe objektové programování a sám nejspíš patří mezi ty prasitele „objektového” kódu, pokud – nedej bože – sám aktivně programuje.
Naopak, knížka ukazuje rozdíly mezi různými implementacemi objektového přístupu, od těch neohrabanějších (Java) až po ty čistší (Objective C + Cocoa), ukazuje, jak se i v té Javě dá navrhnout relativně čistý design při vědomí jejích omezení, rozebírá různé modely a přístupy v objektovém návrhu, na příkladech ukazuje jejich výhody i úskalí, nezabíhá do zbytečného teoretizování, ale je prakticky orientovaná a srozumitelná i pro začátečníky. Zabývá se problémy, které většina jiných knih vůbec neřeší, ačkoli povědomí o nich je pro kvalitní objektový návrh nezbytné, naopak neřeší různé kosmetické nesmysly, jimiž se ty neohrabané objektové jazyky snaží maskovat svou neohrabanost a jež jsou prezentovány jako ty jedním z předřečníků zmiňované samospásné metody návrhu.
Celé toto nedorozumění tkví v tom, že 90% vývojářů, včetně těch, kteří dostanou ten hloupý nápad místo sebevzdělávání se a čtení napsat knihu a o své „rozumy” se podělit s nebohými čtenáři, ve skutečnosti objektovému programování vůbec nerozumí a nepochopili ho, čehož dokladem jsou jejich programátorské výtvory. V tomto ohledu bych knížku pana Čady považoval za jednu z mála světlých výjimek na českém trhu.

Mám úplně ten samý dojem. Autor dokonce rozlišuje pojmy objekt, třída a instance a zmiňuje metatřídní implementaci včetně jejích výhod. Popisuje polymorfismus daný protokolem. To jsou věci, o kterých většina „hybridářů“ nemá ani páru! Dále (bohužel vidím jen z obsahu) zmiňuje chyby v objektovém návrhu (typické „když nevíš, tak to poděď“, generalizace, specializace), předávání zpráv, vzor Pozorovatel (typický objektový vzor) aj.
Kniha se pro seznámení s OOP (nebo radši pure object programming) určitě hodí.

SB

Re:Čada: Objektové programování
« Odpověď #22 kdy: 17. 06. 2015, 13:12:05 »
...objektovému programování vůbec nerozumí a nepochopili ho...

mohl byste prosím definovat "objektové programování"?

Programování využívající objektový výpočetní model.

l

Re:Čada: Objektové programování
« Odpověď #23 kdy: 17. 06. 2015, 13:23:03 »
Jaký je ten původní OOP?

Původní OOP je zasílání zpráv samostatným počítačům v síti. Nejblíže tomu má RPC.
http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en
I thought of objects being like biological cells and/or individual computers on a network, only able to communicate with messages (so messaging came at the very beginning -- it took a while to see how to do messaging in a programming language efficiently enough to be useful).

SB

Re:Čada: Objektové programování
« Odpověď #24 kdy: 17. 06. 2015, 14:13:12 »
Jaký je ten původní OOP?

Původní OOP je zasílání zpráv samostatným počítačům v síti. Nejblíže tomu má RPC.
http://userpage.fu-berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay_oop_en
I thought of objects being like biological cells and/or individual computers on a network, only able to communicate with messages (so messaging came at the very beginning -- it took a while to see how to do messaging in a programming language efficiently enough to be useful).

Myšlenka je v pořádku, ale logicky vyžaduje homogenní prostředí (VM lokálně, CORBA v síti), samotné počítače propojené do sítě homogenním prostředím nejsou. Nevím o tom, že by to nějaký z vámi zmiňovaných hybridů uměl bez „homogenizátorů“ (jak taky).

Honza

Re:Čada: Objektové programování
« Odpověď #25 kdy: 17. 06. 2015, 14:31:43 »
Ta kniha je jednoznačně jedna z nejlepších na našem trhu, která se systematicky a pořádně zabývá principy a implementací OOP. A že se mi jich za těch 25 let co se tím zabývám pár pod ruku dostalo :-)

Honza

Re:Čada: Objektové programování
« Odpověď #26 kdy: 17. 06. 2015, 14:46:13 »
Jo a pokud někdo z Vás chce přečíst pár názorů ohledně "objektového" programování v "opravdovém" OO jazyce jako Smalltalk, tak doporučuji toto nedávné vlákno : http://forum.root.cz/index.php?topic=11249.0 a hlavně přesně vyjádřené příspěvky Mirka Prýmka.
Sice se to zabývá primárně Objective-C, to ale na věci nic nemění. Ostatně pan Čada ve zmíněné knize pokročilé věci demonstruje právě na ObjC + Cocoa a věřte mi, že opravdu ví proč :-)

Nobody

Re:Čada: Objektové programování
« Odpověď #27 kdy: 17. 06. 2015, 14:50:15 »
...objektovému programování vůbec nerozumí a nepochopili ho...

mohl byste prosím definovat "objektové programování"?

To je programovani vychazejici z principu filozofie Ayn Randove.

SB

Re:Čada: Objektové programování
« Odpověď #28 kdy: 17. 06. 2015, 15:00:03 »
K původní otázce:
Jeden veřejně dostupný materiál od Merunky: https://student.sps-prosek.cz/~schope11it/Ostatn%C3%AD/merunka6.pdf
Některé části jsou trochu teoretické, ale lze to přeskočit. Materiál je mnohem širší, ale zajímavý.

l

Re:Čada: Objektové programování
« Odpověď #29 kdy: 17. 06. 2015, 15:00:39 »
Celé toto nedorozumění tkví v tom, že 90% vývojářů, včetně těch, kteří dostanou ten hloupý nápad místo sebevzdělávání se a čtení napsat knihu a o své „rozumy” se podělit s nebohými čtenáři, ve skutečnosti objektovému programování vůbec nerozumí a nepochopili ho, čehož dokladem jsou jejich programátorské výtvory.

Celé nedorozumění spočívá v tom, že tito a podobní autoři dodnes nepochopili, že původní OOP a dnešní OOP v C++ C# Java jsou dvě různé záležitosti a neustále tak matou laickou veřejnost. Je to zasílání asynchronních zpráv procesům proti synchronnímu volání funkcí alias metod v jednom vlákně.

Nevím o tom, že by to nějaký z vámi zmiňovaných hybridů uměl bez „homogenizátorů“ (jak taky).

Nevím o tom, že by někdo tvrdil že to umí :) Naopak všichni ví že to neumí, že se tam proto pořádný moloch CORBA musí dopsat ručně a to proto že v jazyku není podpora na zasílání zpráv objektům.