Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: CS 15. 06. 2015, 15:40:23

Název: Čada: Objektové programování
Přispěvatel: CS 15. 06. 2015, 15:40:23
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?
Název: Re:Čada: Objektové programování
Přispěvatel: Nobody 15. 06. 2015, 16:20:01
Dobre, ze jsi s tim prisel na root. Tady se to mnohokrat probiralo a zaver je jasny (https://www.kosmas.cz/knihy/191719/chci-uspet-v-it/).
Název: Re:Čada: Objektové programování
Přispěvatel: Jann 15. 06. 2015, 19:13:48
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?

Squeak by Example

Tam se OOP vysvětluje na Smalltalku, což je ryze objektový jazyk s velmi jednoduchou (i když poněkud neobvyklou) syntaxí a velmi intuitivním vývojovým prostředím. Knížka je zdarma stažitelná z netu, stejně jako Squeak. Samotný Smalltalk se sice v praxi příliš nepoužívá, ale neznám lepší jazyk na výuku a pochopení objektového programování. Při učení se nějakému praktickému jazyku si z něj odneseš dobré návyky. Navíc výuka v něm je docela zábavná, samotný Squeak je totiž napsaný ve Smalltalku, takže objekty jsou často opravdu objekty na obrazovce, na něž si můžeš kliknout myší, prozkoumat jejich vlastnosti, upravit si je či odvodit si od nich vlastní a okamžitě vidět, co to udělá.
Název: Re:Čada: Objektové programování
Přispěvatel: j 15. 06. 2015, 19:39:46
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?

A napsal si uz neco na aspon 10k radku? OOP se totiz (porad) velmi casto uci/vysvetluje/... jako jedina dokonala modla, takze to pak presne podle toho vypada. Jinak docela dost zalezi, jakej jazyk hodlas pouzivat, pricipy jsou sice stejny, ale odlisnosti velky.
Název: Re:Čada: Objektové programování
Přispěvatel: l 15. 06. 2015, 22:03:38
Squeak by Example

Tam se OOP vysvětluje na Smalltalku

Squak i Smalltalk používá jiné OOP než to OOP které se používá masivně v praxi, začátečníkům doporučit nelze, jsou pak zmatení.
Název: Re:Čada: Objektové programování
Přispěvatel: Kiwi 15. 06. 2015, 23:03:04
Squeak by Example

Tam se OOP vysvětluje na Smalltalku

Squak i Smalltalk používá jiné OOP než to OOP které se používá masivně v praxi, začátečníkům doporučit nelze, jsou pak zmatení.

1. Připojuji se k názoru, že chce-li se někdo naučit a opravdu pochopit objektové programování, tak Smalltalk je tou nejlepší cestou, jak toho dosáhnout.

2. Souhlasím s tím, že to "praktické objektové programování" se od toho smalltalkovského liší. Protože to "praktické OOP" není žádné OOP, ale hromada sr...k, slepá cesta vývoje programování, jeden obrovský omyl, něco, co by se mělo aktivně potírat, jako se kdysi potíral příkaz GOTO. Je to programovací styl lidí, kteří v IT nemají co dělat a mnohem lépe by udělali jak pro sebe, tak pro IT, kdyby raději prodávali brambory na tržišti nebo je okopávali na poli nebo tak něco adekvátního. Ono "praktické OOP" selhává v podstatě ve všem, co si OOP původně bralo za cíl řešit: halda zcela zbytečného syntaktického balastu, z níž vzniká ještě větší halda nepřehledného balastního kódu, který v praxi vůbec není znovupoužitelný, je spjatý s hromadou zbytečných mechanismů, s nimiž musejí překladače počítat a výsledkem jejich práce je pak mimořádně nenažraný, pomalý kód.

3. Chce-li se tedy někdo učit to "praktické OOP", tak je úplně jedno z čeho, protože co autor, to jiný pohled na věc. A každý z nich je samozřejmě ten jediný správný, každý káže to jediné, samospásné paradigma a všeřešící vývojový vzor.

4. Pokud se chce někdo podívat na OOP i z jiného úhlu než smalltalkovského, tak v Common Lispu prostřednictvím CLOS. Pokud chce někdo vidět, co by úplně stačilo k implementaci toho "praktického OOP", tak ať mrkne na Oberon. Pokud chce někdo vidět odstrašující příklad, jak se to v žádném případě dělat nemá a důkaz, že lidé budou žrát i ho..a, pokud je pocukrujete a uděláte jim marketing, tak ať se vrhne na C++.
Název: Re:Čada: Objektové programování
Přispěvatel: dikmoc 15. 06. 2015, 23:21:23
Protože to "praktické OOP" není žádné OOP, ale hromada sr...k, slepá cesta vývoje programování, jeden obrovský omyl, něco, co by se mělo aktivně potírat, jako se kdysi potíral příkaz GOTO. Je to programovací styl lidí, kteří v IT nemají co dělat a mnohem lépe by udělali jak pro sebe, tak pro IT, kdyby raději prodávali brambory na tržišti nebo je okopávali na poli nebo tak něco adekvátního. Ono "praktické OOP" selhává v podstatě ve všem, co si OOP původně bralo za cíl řešit

:D Ještěže chodím na Root, protože tohle mi otevřelo oči! Hned jsem vypnul pár bankovních SW a zítra je s klukama budeme přepisovat!
Název: Re:Čada: Objektové programování
Přispěvatel: l 15. 06. 2015, 23:57:24
chce-li se někdo naučit a opravdu pochopit objektové programování, tak Smalltalk je tou nejlepší cestou, jak toho dosáhnout.

: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.
Název: Re:Čada: Objektové programování
Přispěvatel: grg 16. 06. 2015, 08:20:05
A niečo k pôvodnej otázke nebude?
Název: Re:Čada: Objektové programování
Přispěvatel: hawran diskuse 16. 06. 2015, 10:15:18
Ještě bacha na ty setry/getry/tetry ...
Název: Re:Čada: Objektové programování
Přispěvatel: Jann 16. 06. 2015, 11:37:26
A niečo k pôvodnej otázke nebude?

A číst umíš? Nebo si někomu řekni, ať ti to přečte.

:D Ještěže chodím na Root, protože tohle mi otevřelo oči! Hned jsem vypnul pár bankovních SW a zítra je s klukama budeme přepisovat!

Ještě nám prozraď, kde ten váš SW běží. Rád bych se takovým institucím vyhnul co největším obloukem.
Název: Re:Čada: Objektové programování
Přispěvatel: SB 17. 06. 2015, 10:47:35
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?

Soudruh recenzent nenapsal přesněji, co je na knize špatného, ale dle náhledu na grada.cz naopak vypadá kniha nadprůměrně dobře a použitelně.
Název: Re:Čada: Objektové programování
Přispěvatel: SB 17. 06. 2015, 10:49:16

Squeak by Example


Doporučuju Pharo by Example a prostředí Pharo, je na tom v údržbě mnohem lépe než Squeak.
Název: Re:Čada: Objektové programování
Přispěvatel: SB 17. 06. 2015, 10:52:45
Squak i Smalltalk používá jiné OOP než to OOP které se používá masivně v praxi, začátečníkům doporučit nelze, jsou pak zmatení.

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.
Název: Re:Čada: Objektové programování
Přispěvatel: SB 17. 06. 2015, 11:01:00
1. ...

2. ...

3. ...

4. ...

Nemá smysl nosit dříví do lesa, pan Kiwi to napsal naprosto přesně.

K materiálům: VÝBORNOU literaturou je skriptum Vojtěch Merunka: Objektové metody a přístupy - Smalltalk-80, předpokládám ale, že to neseženete, a šířit to nemůžu. Zkuste napsat autorovi.
Název: Re:Čada: Objektové programování
Přispěvatel: SB 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“.
Název: Re:Čada: Objektové programování
Přispěvatel: l 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é.
Název: Re:Čada: Objektové programování
Přispěvatel: JSH 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.
Název: Re:Čada: Objektové programování
Přispěvatel: Jann 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.
Název: Re:Čada: Objektové programování
Přispěvatel: v 17. 06. 2015, 12:37:38
...objektovému programování vůbec nerozumí a nepochopili ho...

mohl byste prosím definovat "objektové programování"?
Název: Re:Čada: Objektové programování
Přispěvatel: SB 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.
Název: Re:Čada: Objektové programování
Přispěvatel: SB 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í.
Název: Re:Čada: Objektové programování
Přispěvatel: SB 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.
Název: Re:Čada: Objektové programování
Přispěvatel: l 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).
Název: Re:Čada: Objektové programování
Přispěvatel: SB 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).
Název: Re:Čada: Objektové programování
Přispěvatel: Honza 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 :-)
Název: Re:Čada: Objektové programování
Přispěvatel: Honza 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č :-)
Název: Re:Čada: Objektové programování
Přispěvatel: Nobody 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.
Název: Re:Čada: Objektové programování
Přispěvatel: SB 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ý.
Název: Re:Čada: Objektové programování
Přispěvatel: l 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.
Název: Re:Čada: Objektové programování
Přispěvatel: SB 17. 06. 2015, 15:16:54
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.

1. Nikdo se tu nehádá, že původní OOP mělo být asynchronní a všechny implementace jsou synchronní, a taky to neznamená, že nemůžou objekty komunikovat asynchronně. Svár spočívá v skutečnosti, jak snadno či těžko se v kterých jazycích vytváří objektový model a že někteří autoři nepochopili, které vlastnosti implementace OOP modelování pomáhají a které škodí.
2. CORBu jsem uvedl jako příklad, a je úplně šumák, jak je realizovaná či funkční, jako ukázka nutnosti přemostění nehomogenního prostředí stačí. Objektové jazyky samozřejmě zasílání zpráv objektům mají, ale v homogenním prostředí. Ale to už jsem říkal!
Název: Re:Čada: Objektové programování
Přispěvatel: l 17. 06. 2015, 15:48:41
Svár spočívá v skutečnosti, jak snadno či těžko se v kterých jazycích vytváří objektový model a že někteří autoři nepochopili, které vlastnosti implementace OOP modelování pomáhají a které škodí.

Mě se zdá že podstata sváru je vágnost definice "objektový model" :) Dokud byl objekt synonymum pro strukturu s přibastlenými metodami, vtable, konstruktorem, destruktorem, bylo jasno a sváry nebyly :)
Název: Re:Čada: Objektové programování
Přispěvatel: Jann 17. 06. 2015, 16:07:00
Svár spočívá v skutečnosti, jak snadno či těžko se v kterých jazycích vytváří objektový model a že někteří autoři nepochopili, které vlastnosti implementace OOP modelování pomáhají a které škodí.

Mě se zdá že podstata sváru je vágnost definice "objektový model" :) Dokud byl objekt synonymum pro strukturu s přibastlenými metodami, vtable, konstruktorem, destruktorem, bylo jasno a sváry nebyly :)

To nebylo jasno nikdy, resp. mohlo se to zdát být jasné těm, kteří si pod OOP dokázali představit jen to, co píšeš, protože o OOP očividně mnoho nevěděli. Rozšířil se totiž blud, že "OOP = zapouzdření + dědičnost". Jenže realita je taková, že "OOP = polymorfismus + pozdní vazba" a otázkou zůstává, jak ten polymorfismus a pozdní vazbu implementovat. Některé jazyky na to šly přes dědění, zapouzdření, přetěžování a VFT, jiné se vydaly cestou zasílání zpráv (způsob jejichž zpracování je vnitřní záležitostí objektu, včetně typu vrácené hodnoty), jiné cestou generických funkcí, ležících zcela mimo hierarchii tříd. První přístup se rozšířil nejvíce, jenže má také nejvíce slabých míst a přísně vzato ani není schopen splnit "definiční požadavky" OOP (polymorfismus + (extrémně) pozdní vazbu).
Název: Re:Čada: Objektové programování
Přispěvatel: SB 17. 06. 2015, 16:48:59
...že "OOP = zapouzdření + dědičnost". Jenže realita je taková, že "OOP = polymorfismus + pozdní vazba" ...

Pozor, mezi ZÁKLADNÍ vlastnosti určitě patří i to zapouzdření, je to nutným požadavkem pro zajištění konzistence stavů a zabránění objektovým orgiím.
Na druhou stranu dědičnost tam určitě nepatří - prototypované jazyky ji nemají a je možno ji nahradit delegací.

...jak ten polymorfismus a pozdní vazbu implementovat. Některé jazyky na to šly přes dědění, zapouzdření, přetěžování a VFT, jiné se vydaly cestou zasílání zpráv (způsob jejichž zpracování je vnitřní záležitostí objektu, včetně typu vrácené hodnoty), jiné cestou generických funkcí, ležících zcela mimo hierarchii tříd. První přístup se rozšířil nejvíce, jenže má také nejvíce slabých míst a přísně vzato ani není schopen splnit "definiční požadavky" OOP (polymorfismus + (extrémně) pozdní vazbu).

Asi těžko půjde implementovat odpovědnost za zpracování zprávy voláním místo zasílání, když o zpracování rozhoduje objekt. Takže zrovna volání x zasílání je dost důležitý implementační detail.
Název: Re:Čada: Objektové programování
Přispěvatel: JSH 17. 06. 2015, 17:16:35
Asi těžko půjde implementovat odpovědnost za zpracování zprávy voláním místo zasílání, když o zpracování rozhoduje objekt. Takže zrovna volání x zasílání je dost důležitý implementační detail.
Tady se úplně nechytám. Nevidím tam až tak zásadní rozdíl. Při posílání zprávy se podle typu objektu vybere funkce k zavolání (koukneme do hashmapy). Při volání metody se podle typu objektu vybere funkce k zavolání (koukneme do vtable). Jediný rozdíl vidím v tom, že při posílání zpráv může objekt všechny neznámé zprávy někam přeposlat. U mainstream oop to neprojde překladem. Jo, principielně v jednom případě rozhoduje volající a v druhém volaný, ale výsledek je prakticky na jedno kopyto.
V čem se pletu?
Název: Re:Čada: Objektové programování
Přispěvatel: l 17. 06. 2015, 17:30:17
"definiční požadavky" OOP (polymorfismus + (extrémně) pozdní vazbu)

Jasná otázka "polymorfismus + (extrémně) pozdní vazba", má jasnou odpověď: Dávno to máte před sebou, třeba C# s MethodBase.Invoke.
Bohužel extrémně pozdní vazba je v praxi kontraproduktivní, doufám že mě nebudete přesvědčovat že je v pořádku kontrolovat překlepy v názvech metod až za běhu. Jsou výjimky a jednou z výjimek je inter-process komunikace. Je to náhoda nebo logický důsledek, že všechno co se točí kolem "správného OOP" vždy skončí u inter-process komunikace ? :)
Název: Re:Čada: Objektové programování
Přispěvatel: rootacek 18. 06. 2015, 00:54:55
Protože to "praktické OOP" není žádné OOP, ale hromada sr...k, slepá cesta vývoje programování, jeden obrovský omyl, něco, co by se mělo aktivně potírat, jako se kdysi potíral příkaz GOTO. Je to programovací styl lidí, kteří v IT nemají co dělat a mnohem lépe by udělali jak pro sebe, tak pro IT, kdyby raději prodávali brambory na tržišti nebo je okopávali na poli nebo tak něco adekvátního. Ono "praktické OOP" selhává v podstatě ve všem, co si OOP původně bralo za cíl řešit: halda zcela zbytečného syntaktického balastu, z níž vzniká ještě větší halda nepřehledného balastního kódu, který v praxi vůbec není znovupoužitelný, je spjatý s hromadou zbytečných mechanismů, s nimiž musejí překladače počítat a výsledkem jejich práce je pak mimořádně nenažraný, pomalý kód..

Jsem rád, že tady jsou lidi s tímto názorem.Nejlepší je, že spoléhajíci na OOP, ale bez procedurálu či paradigmat by to neexistovalo...
Ja bych řekl, že oop, je líné programování.A o dost jednodušší a v podstatě z programátora se stává ovce, která vlastně programovat neumí umí jen
Kód: [Vybrat]
$this->result(); např možná :) .

Název: Re:Čada: Objektové programování
Přispěvatel: SB 18. 06. 2015, 08:13:12
Asi těžko půjde implementovat odpovědnost za zpracování zprávy voláním místo zasílání, když o zpracování rozhoduje objekt. Takže zrovna volání x zasílání je dost důležitý implementační detail.
Tady se úplně nechytám. Nevidím tam až tak zásadní rozdíl. Při posílání zprávy se podle typu objektu vybere funkce k zavolání (koukneme do hashmapy). Při volání metody se podle typu objektu vybere funkce k zavolání (koukneme do vtable). Jediný rozdíl vidím v tom, že při posílání zpráv může objekt všechny neznámé zprávy někam přeposlat. U mainstream oop to neprojde překladem. Jo, principielně v jednom případě rozhoduje volající a v druhém volaný, ale výsledek je prakticky na jedno kopyto.
V čem se pletu?

Jde o ty neznámé zprávy. Ale to by asi šlo ojebat posíláním metodě doesNotUnderstand, když existuje, nebo vybořit. Takže asi implementovat daný koncept by nějak šlo. Každopádně je to dost důležité.
Název: Re:Čada: Objektové programování
Přispěvatel: SB 18. 06. 2015, 08:45:04
Jasná otázka "polymorfismus + (extrémně) pozdní vazba", má jasnou odpověď: Dávno to máte před sebou, třeba C# s MethodBase.Invoke...

Jo, a takhle je to v hybridních jazycích s deklarativními třídami se vším, reflexe se patlá jakousi zalomenou knihovnou a imperativně. Ve Smalltalku stačí jednoduché
<objekt> perform: <zpráva> with: <případný parametr>.

...Bohužel extrémně pozdní vazba je v praxi kontraproduktivní, doufám že mě nebudete přesvědčovat že je v pořádku kontrolovat překlepy v názvech metod až za běhu. Jsou výjimky a jednou z výjimek je inter-process komunikace. Je to náhoda nebo logický důsledek, že všechno co se točí kolem "správného OOP" vždy skončí u inter-process komunikace ? :)

Je asi tak kontraproduktivní, že dokáže v případech, kdy je to třeba, značně zjednodušit návrh. Na druhou stranu nadužívání není vyžadováno.
S meziprocesovou komunikací nemám zkušenost, tam nemůžu posuzovat. Můžete klidně přiblížit problém.
Název: Re:Čada: Objektové programování
Přispěvatel: SB 18. 06. 2015, 09:02:56
Jsem rád, že tady jsou lidi s tímto názorem.Nejlepší je, že spoléhajíci na OOP, ale bez procedurálu či paradigmat by to neexistovalo...
Ja bych řekl, že oop, je líné programování.A o dost jednodušší a v podstatě z programátora se stává ovce, která vlastně programovat neumí umí jen
Kód: [Vybrat]
$this->result(); např možná :) .

Přibližte mi, co je na Smalltalku procedurálního, to mě hodně zajímá...
Jaká paradigmata máte na mysli?
OOP je v první řadě systém organizace modelu a jeho výpočtu, který má zjednodušit vedení velkých projektů. To samo o sobě neznamená, že by vývojář nemusel přemýšlet. Důkazem je mi právě ona praxe, kdy drtivá většina vývojářů není schopna vytvořit objektový model dané domény. Takže ono to pro úplné blbce asi nebude, spíš se potkávám s těmi nasranými, že jim to nejde.
Název: Re:Čada: Objektové programování
Přispěvatel: perceptron 18. 06. 2015, 10:04:32
Citace
Je to programovací styl lidí, kteří v IT nemají co dělat a mnohem lépe by udělali jak pro sebe, tak pro IT, kdyby raději prodávali brambory na tržišti nebo je okopávali na poli nebo tak něco adekvátního.
rofl to je nazor jak z pivnice.

vyhodime tu kopu kodu zrusime oop jazyky a pojdeme rubat c, abap, perl a erlang.

(http://i.imgur.com/nK8V3gV.png)

resp pojdeme rubat aktor model ako je napr v akke lebo ten obviouzly splna tie poziadavky
Název: Re:Čada: Objektové programování
Přispěvatel: l 18. 06. 2015, 11:17:07
Jo, a takhle je to v hybridních jazycích s deklarativními třídami se vším, reflexe se patlá jakousi zalomenou knihovnou a imperativně.

Luxus to není, dostačuje na zamýšlený účel.

Je asi tak kontraproduktivní, že dokáže v případech, kdy je to třeba, značně zjednodušit návrh. Na druhou stranu nadužívání není vyžadováno.

Jsem ochoten připustit, že sem tam existuje případ kdy se to může hodit a těchto pár případů se vyřeší alternativně třeba přes reflexi. Trvám na tom že výchozí chování OOP (uvnitř jednoho procesu) nemůže být extrémně pozdní vazba.

OOP je v první řadě systém organizace modelu a jeho výpočtu, který má zjednodušit vedení velkých projektů.

A jsme opět u toho, že podstata sváru je vágnost definice "objektový model" :) Zjevně co člověk to názor :)
Název: Re:Čada: Objektové programování
Přispěvatel: SB 18. 06. 2015, 12:22:31
Jo, a takhle je to v hybridních jazycích s deklarativními třídami se vším, reflexe se patlá jakousi zalomenou knihovnou a imperativně.

Luxus to není, dostačuje na zamýšlený účel.

Je asi tak kontraproduktivní, že dokáže v případech, kdy je to třeba, značně zjednodušit návrh. Na druhou stranu nadužívání není vyžadováno.

Jsem ochoten připustit, že sem tam existuje případ kdy se to může hodit a těchto pár případů se vyřeší alternativně třeba přes reflexi. Trvám na tom že výchozí chování OOP (uvnitř jednoho procesu) nemůže být extrémně pozdní vazba.

OOP je v první řadě systém organizace modelu a jeho výpočtu, který má zjednodušit vedení velkých projektů.

A jsme opět u toho, že podstata sváru je vágnost definice "objektový model" :) Zjevně co člověk to názor :)

Na zamýšlený účel dostačuje i procedurální členění, ale spravovatelnější to nebude.

Pozdní vazba je univerzální, jde s ní udělat víc než s časnou, proto její volba v jazyku při zachování jeho jednoduchosti.

Tak ono už jenom zapouzdření znamená mimořádný nárůst izolace částí modelu. Dá se využít někde mimo objektový model?
Název: Re:Čada: Objektové programování
Přispěvatel: l 18. 06. 2015, 14:03:26
Pozdní vazba je univerzální, jde s ní udělat víc než s časnou

Jestli chcete donekonečna obhajovat hledání metod podle názvu za běhu, tak s Váma končím, tato myšlenka je zcela pomýlená. Na odůvodněné případy stačí reflexe.
Název: Re:Čada: Objektové programování
Přispěvatel: JSH 18. 06. 2015, 14:21:39
Tak ono už jenom zapouzdření znamená mimořádný nárůst izolace částí modelu. Dá se využít někde mimo objektový model?
:o Třeba tak nějak úplně všude? Nesetkal jsem se s jazykem, ve kterém by se nedaly detaily schovat za nějaké rozhraní.
Název: Re:Čada: Objektové programování
Přispěvatel: Mr. Pointless 18. 06. 2015, 18:24:00
Thinking in C++ 2nd Edition by Bruce Eckel

Free Electronic Book
Volume 1 & Volume 2

http://mindview.net/Books/TICPP/ThinkingInCPP2e.html
Název: Re:Čada: Objektové programování
Přispěvatel: SB 19. 06. 2015, 07:41:34
Tak ono už jenom zapouzdření znamená mimořádný nárůst izolace částí modelu. Dá se využít někde mimo objektový model?
:o Třeba tak nějak úplně všude? Nesetkal jsem se s jazykem, ve kterém by se nedaly detaily schovat za nějaké rozhraní.

Rozhraní má i objekt. Rozhraní čeho máte na mysli? Jak je realizována zvenku nepřístupná doména? Knihovnou? Nějak jinak?
Název: Re:Čada: Objektové programování
Přispěvatel: SB 19. 06. 2015, 07:44:47
Jestli chcete donekonečna obhajovat hledání metod podle názvu za běhu, tak s Váma končím, tato myšlenka je zcela pomýlená. Na odůvodněné případy stačí reflexe.

„Reflexi“ hybridních jazyků jsme už probrali. Takže jsme už probrali asi všechno, nemusíme dál pokračovat.
Název: Re:Čada: Objektové programování
Přispěvatel: Kit 19. 06. 2015, 09:07:39
Pozor, mezi ZÁKLADNÍ vlastnosti určitě patří i to zapouzdření, je to nutným požadavkem pro zajištění konzistence stavů a zabránění objektovým orgiím.

Kéž by vývojáři takové zapouzdření dělali. Místo toho tam nacpou hromady getterů a setterů...
Název: Re:Čada: Objektové programování
Přispěvatel: l 19. 06. 2015, 09:27:25
Kéž by vývojáři takové zapouzdření dělali. Místo toho tam nacpou hromady getterů a setterů...

Getter a Setter je zapouzdření. G/S jsou normální metody jako každé jiné a můžeš si tam napsat cokoliv jako do každé jiné metody. Není pravda že Setter je povinně this->m_variable=new_value Pokud si to takhle myslíš, žiješ v hlubokém omylu. Je pravda, že spousta programátorů v tomto hlubokém omylu žije.
Název: Re:Čada: Objektové programování
Přispěvatel: Kit 19. 06. 2015, 09:39:37
Kéž by vývojáři takové zapouzdření dělali. Místo toho tam nacpou hromady getterů a setterů...

Getter a Setter je zapouzdření. G/S jsou normální metody jako každé jiné a můžeš si tam napsat cokoliv jako do každé jiné metody. Není pravda že Setter je povinně this->m_variable=new_value Pokud si to takhle myslíš, žiješ v hlubokém omylu. Je pravda, že spousta programátorů v tomto hlubokém omylu žije.

Právěže v tom omylu nežiji a pokud sis všiml, tak mám proti těmto nešvarům dost vyhraněný postoj. Osobně zapouzdřuji bez getterů a setterů. Nepotřebuji je, protože práci s objektem implementuji uvnitř objektu a případné závislosti injektuji.
Název: Re:Čada: Objektové programování
Přispěvatel: hawran diskuse 19. 06. 2015, 09:58:19
Kdo používá (g/s)etry je zrádce rasy a bude exkomunikován.
Název: Re:Čada: Objektové programování
Přispěvatel: l 19. 06. 2015, 10:17:25

Postoj můžeš mít jaký chceš, G/S jsou zapouzdření.

Pro změnu objektu buď zavoláš nějakou metodu a je jedno jestli je si ji pojmenuješ SetX nebo MoveHorizontal, nebo přestoupíš na víru immutable a při jakékoliv změně vytvoříš objekt nový a nové vlastnosti nastavíš v konstruktoru. Jiné možnosti moc nejsou.
Název: Re:Čada: Objektové programování
Přispěvatel: Ondra Satai Nekola 19. 06. 2015, 10:28:21
Tak, tak. G/S jsou zapouzdreni. Leckdy to neni dobry navrh, ale nikde neni psano, ze zapouzdreni + polymorfismus samo o sobe k dobremu navrhu staci...
Název: Re:Čada: Objektové programování
Přispěvatel: JSH 19. 06. 2015, 10:38:41
Tak ono už jenom zapouzdření znamená mimořádný nárůst izolace částí modelu. Dá se využít někde mimo objektový model?
:o Třeba tak nějak úplně všude? Nesetkal jsem se s jazykem, ve kterém by se nedaly detaily schovat za nějaké rozhraní.

Rozhraní má i objekt. Rozhraní čeho máte na mysli? Jak je realizována zvenku nepřístupná doména? Knihovnou? Nějak jinak?
Sorry, nechápu dotaz. Ten původní jsem pochopil jako "Dá se zapouzdření využít někde mimo objektový model?" Vzhledem k tomu, že zapouzdření není nic jiného než skrytí nepodstatných detailů, tak se využívá v čistých i nečistých, objektových i neobjektových jazycích.
A na mysli mám rozhraní čehokoliv.
Název: Re:Čada: Objektové programování
Přispěvatel: rootacek 22. 06. 2015, 17:40:45
Jsem rád, že tady jsou lidi s tímto názorem.Nejlepší je, že spoléhajíci na OOP, ale bez procedurálu či paradigmat by to neexistovalo...
Ja bych řekl, že oop, je líné programování.A o dost jednodušší a v podstatě z programátora se stává ovce, která vlastně programovat neumí umí jen
Kód: [Vybrat]
$this->result(); např možná :) .

Přibližte mi, co je na Smalltalku procedurálního, to mě hodně zajímá...
Jaká paradigmata máte na mysli?
OOP je v první řadě systém organizace modelu a jeho výpočtu, který má zjednodušit vedení velkých projektů. To samo o sobě neznamená, že by vývojář nemusel přemýšlet. Důkazem je mi právě ona praxe, kdy drtivá většina vývojářů není schopna vytvořit objektový model dané domény. Takže ono to pro úplné blbce asi nebude, spíš se potkávám s těmi nasranými, že jim to nejde.

Myslel jsem to v obecné rovině. Ne ve Smalltalku. Neříkám, pro blbce, ale asi logicky, je něco jiného programovat v nižším jazyce, než ve vyšším.Kde mám většinu nízkoúrovňových věcí hotovou. A hezky si dělám ten svůj estetický přehledný kód se syntaktickým cukrem.
Název: Re:Čada: Objektové programování
Přispěvatel: SB 23. 06. 2015, 07:44:45
Tak ono už jenom zapouzdření znamená mimořádný nárůst izolace částí modelu. Dá se využít někde mimo objektový model?
:o Třeba tak nějak úplně všude? Nesetkal jsem se s jazykem, ve kterém by se nedaly detaily schovat za nějaké rozhraní.

Rozhraní má i objekt. Rozhraní čeho máte na mysli? Jak je realizována zvenku nepřístupná doména? Knihovnou? Nějak jinak?
Sorry, nechápu dotaz. Ten původní jsem pochopil jako "Dá se zapouzdření využít někde mimo objektový model?" Vzhledem k tomu, že zapouzdření není nic jiného než skrytí nepodstatných detailů, tak se využívá v čistých i nečistých, objektových i neobjektových jazycích.
A na mysli mám rozhraní čehokoliv.

Já zase nechápu odpověď. Rozhraní je jen předpis funkcionality systému, který popisuje, kterou funkcionalitu systém určitě implementuje, ale neznamená, že neimplementuje nic dalšího, takže nijak neomezuje využití jeho dalších funkcionalit, např. přes další rozhraní či např. objektově posláním zprávy (u hybridních jazyků třeba před „posláním“ (čti voláním) přetřídovat (čti přetypovat)). Takže rozhraní mechanismem zapouzdření není.
Uveďte jiný příklad implementace zapouzdření.
Název: Re:Čada: Objektové programování
Přispěvatel: SB 23. 06. 2015, 07:59:26
Jsem rád, že tady jsou lidi s tímto názorem.Nejlepší je, že spoléhajíci na OOP, ale bez procedurálu či paradigmat by to neexistovalo...
Ja bych řekl, že oop, je líné programování.A o dost jednodušší a v podstatě z programátora se stává ovce, která vlastně programovat neumí umí jen
Kód: [Vybrat]
$this->result(); např možná :) .

Přibližte mi, co je na Smalltalku procedurálního, to mě hodně zajímá...
Jaká paradigmata máte na mysli?
OOP je v první řadě systém organizace modelu a jeho výpočtu, který má zjednodušit vedení velkých projektů. To samo o sobě neznamená, že by vývojář nemusel přemýšlet. Důkazem je mi právě ona praxe, kdy drtivá většina vývojářů není schopna vytvořit objektový model dané domény. Takže ono to pro úplné blbce asi nebude, spíš se potkávám s těmi nasranými, že jim to nejde.

Myslel jsem to v obecné rovině. Ne ve Smalltalku. Neříkám, pro blbce, ale asi logicky, je něco jiného programovat v nižším jazyce, než ve vyšším.Kde mám většinu nízkoúrovňových věcí hotovou. A hezky si dělám ten svůj estetický přehledný kód se syntaktickým cukrem.

Smalltalk jsem uvedl schválně jako jazyk, který se docela dobře obešel bez imperativního paradigmatu.
Vysokoúrovňové programování je o tom, že máte 3 prde_le práce se sestavením modelu a nemáte čas se srát (a pokaždé znovu) s hovadinami, jak projít seznam ap.
Název: Re:Čada: Objektové programování
Přispěvatel: yorik 23. 06. 2015, 09:51:43
kniha OOP, pre uplnych zaciatocnikov:
OOP - Naučte se myslet a programovat objektově, Rudolf Pecinovský

http://knihy.cpress.cz/oop.html
Název: Re:Čada: Objektové programování
Přispěvatel: JSH 23. 06. 2015, 10:40:33
Já zase nechápu odpověď. Rozhraní je jen předpis funkcionality systému, který popisuje, kterou funkcionalitu systém určitě implementuje, ale neznamená, že neimplementuje nic dalšího, takže nijak neomezuje využití jeho dalších funkcionalit, např. přes další rozhraní či např. objektově posláním zprávy (u hybridních jazyků třeba před „posláním“ (čti voláním) přetřídovat (čti přetypovat)). Takže rozhraní mechanismem zapouzdření není.
Uveďte jiný příklad implementace zapouzdření.
Rozhraní taky není mechanismus zapouzdření. Rozhraní je popis toho, co je přes zapouzdření vidět.

Příklad zapouzdření by bylo třeba několik exportovaných funkcí a data schovaná za nějaký abstraktní handle (void ptr, int). Tady to zapouzdření nedělají objekty, ale moduly.
Název: Re:Čada: Objektové programování
Přispěvatel: hawran diskuse 23. 06. 2015, 11:10:43
(http://images2.fanpop.com/images/photos/6200000/The-NeverEnding-Story-the-neverending-story-6204842-500-282.jpg)
Název: Re:Čada: Objektové programování
Přispěvatel: Kit 23. 06. 2015, 11:47:40
Tak, tak. G/S jsou zapouzdreni. Leckdy to neni dobry navrh, ale nikde neni psano, ze zapouzdreni + polymorfismus samo o sobe k dobremu navrhu staci...

Problémem G/S je, že často zbytečně rozšiřují rozhraní objektů. Dávat do interface G/S mi připadá odporné.
Název: Re:Čada: Objektové programování
Přispěvatel: Ondra Satai Nekola 23. 06. 2015, 12:50:07
Tak, tak. G/S jsou zapouzdreni. Leckdy to neni dobry navrh, ale nikde neni psano, ze zapouzdreni + polymorfismus samo o sobe k dobremu navrhu staci...

Problémem G/S je, že často zbytečně rozšiřují rozhraní objektů. Dávat do interface G/S mi připadá odporné.

Tak to je ovsem uplne jine tvrzeni nez to puvodni ;)
Název: Re:Čada: Objektové programování
Přispěvatel: Kit 23. 06. 2015, 13:02:26
Problémem G/S je, že často zbytečně rozšiřují rozhraní objektů. Dávat do interface G/S mi připadá odporné.

Tak to je ovsem uplne jine tvrzeni nez to puvodni ;)

V čem je úplně jiné?
Název: Re:Čada: Objektové programování
Přispěvatel: SB 24. 06. 2015, 16:11:48
Rozhraní taky není mechanismus zapouzdření. Rozhraní je popis toho, co je přes zapouzdření vidět.

Příklad zapouzdření by bylo třeba několik exportovaných funkcí a data schovaná za nějaký abstraktní handle (void ptr, int). Tady to zapouzdření nedělají objekty, ale moduly.

A ten handle je tam na co???

Takže zapouzdření moduly. Na to jsem se už ale ptal, takže jen myšlenku dokončíme: Vystavění aplikace z tisíce modulů asi nebude moc jednoduché, kde se nacházejí stavy, netuším. Mimoto další objektové vlastnosti jako identitu a další to asi mít nebude, co?
Název: Re:Čada: Objektové programování
Přispěvatel: Radek Miček 24. 06. 2015, 16:58:05
Vystavění aplikace z tisíce modulů asi nebude moc jednoduché

Například v Haskellu, OCamlu, Standard ML nebo Prologu se to normálně používá.

Je to jednodušší a v případě OCamlu i flexibilnější než OOP z Javy.

Citace
kde se nacházejí stavy, netuším

Stav můžete dát do záznamu v modulu. Tento záznam pak předáváte funkcím. Uvnitř modulu vidíte záznam včetně jednotlivých polí, zvenku se však záznam může tvářit jako abstraktní typ - jeho jednotlivá pole nejsou vidět.
Název: Re:Čada: Objektové programování
Přispěvatel: SB 25. 06. 2015, 07:46:42
Vystavění aplikace z tisíce modulů asi nebude moc jednoduché

Například v Haskellu, OCamlu, Standard ML nebo Prologu se to normálně používá.

Je to jednodušší a v případě OCamlu i flexibilnější než OOP z Javy.

V pořádku, tyto jazyky neznám. Mimoto OOP Javy pro mě není etalonem.

Citace
kde se nacházejí stavy, netuším

Stav můžete dát do záznamu v modulu. Tento záznam pak předáváte funkcím. Uvnitř modulu vidíte záznam včetně jednotlivých polí, zvenku se však záznam může tvářit jako abstraktní typ - jeho jednotlivá pole nejsou vidět.

Takže
1. centrální data bez lokálního kontextu - nutnost explicitně funkcím předhazovat data, možnost použití funkcí s nevhodnými daty,
2. takové rádobyzapouzdření obfuskací, předpokládám přepisovatelné, takže negarantovaný stav.

Pořád mi nikdo neukázal stejně jednoduchou alternativu k objektovému paradigmatu. To je to, co se tu snažím získat a osobně by mě to dost zajímalo. Prosím proto reakce na mě pouze k tomuto cíli, ať tu nejsme do skonání světa. Děkuji.
Název: Re:Čada: Objektové programování
Přispěvatel: Radek Miček 25. 06. 2015, 10:24:44
nutnost explicitně funkcím předhazovat data

To děláte i v jiných OO jazycích, ne? Když například napíši obj.met(), tak metodě met explicitně předávám objekt obj.

Citace
2. takové rádobyzapouzdření obfuskací, předpokládám přepisovatelné, takže negarantovaný stav.

Zapouzdření funguje spolehlivě. Například implementace zásobníku v OCamlu:

Kód: [Vybrat]
module type STACK = sig
  type 'a t
  val empty : 'a t
  val push : 'a -> 'a t -> 'a t
end

module Stack : STACK = struct
  type 'a t = 'a list
  let empty = []
  let push x xs = x :: xs
end

Zásobník je implementován strukturou/modulem Stack, jenž má signaturu STACK. Signatura říká, jak se struktura tváří zvenčí. V našem případě je typ t (jediný typ ve struktuře) abstraktní - nikdo zvenčí neuvidí, že je zásobník implementován jako spojový seznam, jediný, kdo to vidí, jsou funkce ze struktury Stack - v našem případě funkce empty a push.

Na rozdíl od mainstreamových jazyků jsou signatury srovnávány strukturálně, nikoliv nominálně - to zvyšuje flexibilitu. Například stuktura

Kód: [Vybrat]
module AnotherStack = struct
  type 'a t = 'a list
  let empty = []
  let push x xs = x :: xs
  let pop (_ : 'a t) = failwith "TODO"
end

jde použít v místě, kde je očekávána struktura se signaturou STACK - struktuře AnotherStack nebylo nutné přiřadit signaturu STACK (nevadí ani to, že AnotherStack obsahuje funkci navíc). Jelikož jsme struktuře AnotherStack explicitně nepřiřadili signaturu, kompilátor jí přiřadí signaturu automaticky, tato signatura odhalí vše - i zvenčí bude vidět, že je zásobník implementován jako spojový seznam.

Struktura AnotherStack může být uvnitř jiné struktury například M. Při přiřazování signatury struktuře M můžeme přiřadit i signaturu struktuře AnotherStack, anebo strukturu AnotherStack můžeme úplně vynechat - pak tato struktura bude vidět pouze uvnitř M, nikoliv zvenčí.

Citace
Pořád mi nikdo neukázal stejně jednoduchou alternativu k objektovému paradigmatu. To je to, co se tu snažím získat a osobně by mě to dost zajímalo.

Moduly v OCamlu můžete chápat jako objekty bez dědičnosti - můžete je předávat funkcím i vracet z funkcí. Mj. pokud potřebujete dědičnost, má OCaml i objektový systém s dědičností (zapouzdření se tam však vynucuje pomocí modulů). Nicméně na rozdíl od modulů/struktur nemohou objekty (z objektového systému) obsahovat typy. Dá se například říci, že Scala sjednotila systém modulů a objektů do jednoho - tam objekty mohou obsahovat i typy a funguje tam i dědičnost.
Název: Re:Čada: Objektové programování
Přispěvatel: JSH 25. 06. 2015, 10:32:46
A ten handle je tam na co???
Za tím handlem jsou schovaná data. Mohl bych říct, že je to handle "objektu", ale v podstatně volnějším smyslu než v OOP. Ono to celé bude vlastně dost podobně k OOP, akorát ty "objekty" jsou tupé balíčky dat.
Citace
Takže zapouzdření moduly. Na to jsem se už ale ptal, takže jen myšlenku dokončíme: Vystavění aplikace z tisíce modulů asi nebude moc jednoduché, kde se nacházejí stavy, netuším. Mimoto další objektové vlastnosti jako identitu a další to asi mít nebude, co?
Stavy jsou schované za tím handlem (např ukazatel na haldu). Identita vyplývá zase z toho handlu.
Citace
1. centrální data bez lokálního kontextu - nutnost explicitně funkcím předhazovat data, možnost použití funkcí s nevhodnými daty,
Moduly nejsou objekty. Modul nemusí mít data jen globálně. Právě proto je tam ten handle. Modul je blíž třídě než objektu.
U silně typovaných jazyků je to použití funkcí s nevhodnými daty dost omezené. U staticky typovaných jazyků to navíc chytne už překladač. Použití funkce s nevhodnými daty je stejné jako zaslání nevhodné zprávy nějakému objektu.
Citace
2. takové rádobyzapouzdření obfuskací, předpokládám přepisovatelné, takže negarantovaný stav.
Jaká obfuskace. Data jsou schovaná za nějaký handle a dá se s nima manipulovat jen omezenou množinou finkcí. Pokud to rozhraní nenavrhne prase, tak každá funkce nechá data v konzistentním stavu.
Citace
Pořád mi nikdo neukázal stejně jednoduchou alternativu k objektovému paradigmatu.
Jednoduchou alternativu pro jakou aplikaci? OOP je jedno z paradigmat. Na něco se hodí víc, na něco míň. Já osobně ani nepsal že by OOP mělo nějakou univerzální alternativu. Jen jsem psal, že zapouzdření není rozhodně nějaká specialita OOP.
Název: Re:Čada: Objektové programování
Přispěvatel: SB 26. 06. 2015, 10:41:57
nutnost explicitně funkcím předhazovat data

To děláte i v jiných OO jazycích, ne? Když například napíši obj.met(), tak metodě met explicitně předávám objekt obj.


Ne!!! Nemůžu si vybírat stavy (objekt) pro jednu metodu, nemůžu napsat jiný_obj.ta_samá_met(), protože metoda je součástí objektu a pracuje s jeho stavy! To je nepochopení OOP. V OOP se nemůžu kdykoli šťourat ve stavech cizími metodami.

Zapouzdření funguje spolehlivě. Například implementace zásobníku v OCamlu...

Jde ten seznam zásobníku z venku přečíst či něčím přepsat, i když neznám jeho strukturu? Jde => nejedná se o zapouzdření, nejde => je zapouzdření.

Moduly v OCamlu můžete chápat jako objekty bez dědičnosti - můžete je předávat funkcím i vracet z funkcí.

To je typický imperativní přístup - obecným funkcím předhazuju nějaká specifická data/stavy. Nic takového OOP nemá.


Nicméně na rozdíl od modulů/struktur nemohou objekty (z objektového systému) obsahovat typy.

Čistě objektový systém NESMÍ obsahovat typy, není k tomu důvod a komplikuje to celý výpočetní model.
Název: Re:Čada: Objektové programování
Přispěvatel: SB 26. 06. 2015, 10:55:57
Za tím handlem jsou schovaná data. Mohl bych říct, že je to handle "objektu", ale v podstatně volnějším smyslu než v OOP. Ono to celé bude vlastně dost podobně k OOP, akorát ty "objekty" jsou tupé balíčky dat.

Vzhledem k tomu, že klíčovou podstatou objektu je, že není tupý, tak kde je potom podobnost?

Stavy jsou schované za tím handlem (např ukazatel na haldu). Identita vyplývá zase z toho handlu.

„Schované“ už jsme probírali.

U silně typovaných jazyků je to použití funkcí s nevhodnými daty dost omezené. U staticky typovaných jazyků to navíc chytne už překladač. Použití funkce s nevhodnými daty je stejné jako zaslání nevhodné zprávy nějakému objektu.

Klasický argument, že typová kontrola řeší chyby - neřeší, garantuje, že do stringu nedáte číslo, ale už negarantuje, že tam nestrčíte řetězec, který tam vůbec nemá smysl. Kdežto zapouzdření garantuje, že se vůbec nedostanete k datům, ke kterým se dostat nemáte, takže s nimi ani pracovat nemůžete.

Citace
Pořád mi nikdo neukázal stejně jednoduchou alternativu k objektovému paradigmatu.
Jednoduchou alternativu pro jakou aplikaci? OOP je jedno z paradigmat. Na něco se hodí víc, na něco míň. Já osobně ani nepsal že by OOP mělo nějakou univerzální alternativu. Jen jsem psal, že zapouzdření není rozhodně nějaká specialita OOP.

Pro modelování složitých grafových vztahů a zpracování v obchodních aplikacích. Pořád platí nezodpovězený dotaz, zda lze z modulu (OCamlu?) cokoliv číst či zapisovat, když neznám jeho strukturu.
Název: Re:Čada: Objektové programování
Přispěvatel: SB 26. 06. 2015, 10:58:11
Rozmyslete, zda chcete ještě reagovat, protože už jsme všechno probrali a začínáme mlátit prázdnou slámu (a už mě to docela přestává bavit).
Název: Re:Čada: Objektové programování
Přispěvatel: v 26. 06. 2015, 11:15:29
Čistě objektový systém NESMÍ obsahovat typy, není k tomu důvod a komplikuje to celý výpočetní model.

jaká je definice objektového systému? resp. jak je definován "objektový výpočetní model"?
Název: Re:Čada: Objektové programování
Přispěvatel: JSH 26. 06. 2015, 11:18:10
Pro modelování složitých grafových vztahů a zpracování v obchodních aplikacích. Pořád platí nezodpovězený dotaz, zda lze z modulu (OCamlu?) cokoliv číst či zapisovat, když neznám jeho strukturu.
Na grafové věci je OOP to nejstrašnější, co jsem kdy viděl. Obzvlášť jak se objeví visitor pattern.

Vaše neznalosti věcí mimo OOP už opravovat nebudu. Taky mě to nebaví.
Název: Re:Čada: Objektové programování
Přispěvatel: v 26. 06. 2015, 11:21:31
U silně typovaných jazyků je to použití funkcí s nevhodnými daty dost omezené. U staticky typovaných jazyků to navíc chytne už překladač. Použití funkce s nevhodnými daty je stejné jako zaslání nevhodné zprávy nějakému objektu.

Klasický argument, že typová kontrola řeší chyby - neřeší, garantuje, že do stringu nedáte číslo, ale už negarantuje, že tam nestrčíte řetězec, který tam vůbec nemá smysl. Kdežto zapouzdření garantuje, že se vůbec nedostanete k datům, ke kterým se dostat nemáte, takže s nimi ani pracovat nemůžete.


to není pravda, např. v Haskellu je možné definovat pro typ (např.) String "newtype" a následně "type class" určující jak je s ním možno pracovat, to že jej nikdo jiným neprohlédne se pak zajisté neexportováním konstruktoru z modulu
(ale pokud kriticky záleží na formátu řetězce, tak by ta hodnota neměla být vyjádřena řetězcem )
Název: Re:Čada: Objektové programování
Přispěvatel: Radek Miček 26. 06. 2015, 11:35:13
nutnost explicitně funkcím předhazovat data

To děláte i v jiných OO jazycích, ne? Když například napíši obj.met(), tak metodě met explicitně předávám objekt obj.


Ne!!! Nemůžu si vybírat stavy (objekt) pro jednu metodu, nemůžu napsat jiný_obj.ta_samá_met(), protože metoda je součástí objektu a pracuje s jeho stavy! To je nepochopení OOP. V OOP se nemůžu kdykoli šťourat ve stavech cizími metodami.

Ve stavu se nešťouráte cizími funkcemi - jsou to funkce z toho modulu.

Citace
Zapouzdření funguje spolehlivě. Například implementace zásobníku v OCamlu...

Jde ten seznam zásobníku z venku přečíst či něčím přepsat, i když neznám jeho strukturu? Jde => nejedná se o zapouzdření, nejde => je zapouzdření.

Nejde.

Citace
Moduly v OCamlu můžete chápat jako objekty bez dědičnosti - můžete je předávat funkcím i vracet z funkcí.

To je typický imperativní přístup - obecným funkcím předhazuju nějaká specifická data/stavy. Nic takového OOP nemá.

Nerozumím. Vždyť i v OOP mohu metodám předat/poslat jiný objekt.

Citace
Nicméně na rozdíl od modulů/struktur nemohou objekty (z objektového systému) obsahovat typy.

Čistě objektový systém NESMÍ obsahovat typy, není k tomu důvod a komplikuje to celý výpočetní model.

Podobně jako máte virtuální metody, můžete mít i virtuální třídy - typy ve třídách dávají dobrý smysl. Viz třeba OO jazyky BETA nebo Scala.

Obecně typy ve třídách zvyšují vyjadřovací schopnosti jazyka
Název: Re:Čada: Objektové programování
Přispěvatel: Radek Miček 26. 06. 2015, 11:59:22
Klasický argument, že typová kontrola řeší chyby - neřeší, garantuje, že do stringu nedáte číslo, ale už negarantuje, že tam nestrčíte řetězec, který tam vůbec nemá smysl. Kdežto zapouzdření garantuje, že se vůbec nedostanete k datům, ke kterým se dostat nemáte, takže s nimi ani pracovat nemůžete.

Záleží, jaký máte typový systém. Například v jazycích se závislými typy to jde. Například můj starší kód v jazyce Idris (https://github.com/radekm/satviz/blob/master/test/TestSolver.idr) má testy na úrovni typového systému:

Kód: [Vybrat]
test_parseLit_pos : so $ parseLit "c" == Right (MkLit Pos "c")
test_parseLit_pos = oh

Zde se jedná o test funkce parseLit - typ so $ parseLit "c" == Right (MkLit Pos "c") - obsahuje její volání - při typové kontrole se tedy funkce parseLit zavolá a zkontroluje se, že vrátila Right (MkLit Pos "c").
Název: Re:Čada: Objektové programování
Přispěvatel: PeVa 26. 06. 2015, 12:44:41
Zrovna podobný problém se zapouzdřením řeším (setry, getry a podobně) už hodně let.
Podle mne je pro výsledek rozhodující jaký koncept ošetření chybových stavů je implementován celkově v systému.
Jestli pozdní nebo včasný. Teď nemluvím o testovaní uživatelem zadaných hodnot, ale řešení výjímek/výjmečných stavů.

Včasný koncept je založen na principu,že nekorektní stavy neumožní objekt ani vytvořit.
Pozdní koncept je založen na principu, že nekorektní stavy jsou ošetřovány až v momentě potřeby, ale objekt jde
vytvořit. A metody, které s uvedenými stavy nepracují mohou normálně fungovat.

Uvedu na příkladu:
řekněme, že máme třídu psa. A chceme vytvořit jednu instanci na základě dat s db, ale po načtení zjistíme,
že je požadováno vytvořit psa se 3 nohama....(neřeším jak tato věc v db vznikla).
A) Včasné řešení neumožní psa ani vytvořit. Vyjímku vyhodí už constructor.
B) Pozdní řešení psa vytvoří, ale vyjímky vyhodí až metoda běhej. Metoda podej pac bude normálně fungovat pro zdravé nohy.

OOP teorie říkají, že A) je správně..objekt lze založit jen pokud jsou stavy vnitřně konzistentní.

Bohužel praxe ukazuje, že B) je významně lepší, neboť nám dává možnost na nekorektní stavy reagovat a
chybný stav opravit (psa zoperovat, aby měl 4 nohy a mohl pak běhat).

Pro A) musím explicitně řešit jak se vypořádat s nekonzistencí, ale to je někdy problém, nekonzistnce je vně systému.

Pro B mám tedy volnější podmínky na konzistenci vnitřních stavů a getry a setry, zde často postrádají úplně smysl.
neboť konzistenci hodnot nekontrolují....

PeVa




Název: Re:Čada: Objektové programování
Přispěvatel: SB 26. 06. 2015, 13:01:28
Čistě objektový systém NESMÍ obsahovat typy, není k tomu důvod a komplikuje to celý výpočetní model.

jaká je definice objektového systému? resp. jak je definován "objektový výpočetní model"?

Model, jehož hodnoty a výpočty jsou realizovány objekty. Kupodivu. Hybridní model je něco jiného.
Název: Re:Čada: Objektové programování
Přispěvatel: JSH 26. 06. 2015, 13:07:37
PeVa :
Tady bych nesouhlasil. Možnost A podstatně zmenšuje množství stavů, které musím jako programátor řešit. Pokud mám konzistentního Psa, tak nemusím řešit jestli umí běhat na každém místě, kde ho chci použít. Přišití nohy můžu řešit na jediném místě a to tam, kde ten objekt vytvářím.
Takhle veškeré nekonzistence zvenku řeším právě na hranici systému a uvnitř je všechno konzistentní.

Samozřejmě pokud modeluju veterinu, tak budou požadavky na konzistentního psa trochu jiné, než když modeluju K9. :)
Název: Re:Čada: Objektové programování
Přispěvatel: v 26. 06. 2015, 13:07:47
Čistě objektový systém NESMÍ obsahovat typy, není k tomu důvod a komplikuje to celý výpočetní model.

jaká je definice objektového systému? resp. jak je definován "objektový výpočetní model"?

Model, jehož hodnoty a výpočty jsou realizovány objekty. Kupodivu. Hybridní model je něco jiného.

vy sem tu definici napsat nechcete nebo neumíte? nebo si myslíte, že si dělám srandu? nebo jak je to s váma?
Název: Re:Čada: Objektové programování
Přispěvatel: Kit 26. 06. 2015, 13:09:43
Uvedu na příkladu:
řekněme, že máme třídu psa. A chceme vytvořit jednu instanci na základě dat s db, ale po načtení zjistíme,
že je požadováno vytvořit psa se 3 nohama....(neřeším jak tato věc v db vznikla).
A) Včasné řešení neumožní psa ani vytvořit. Vyjímku vyhodí už constructor.
B) Pozdní řešení psa vytvoří, ale vyjímky vyhodí až metoda běhej. Metoda podej pac bude normálně fungovat pro zdravé nohy.

OOP teorie říkají, že A) je správně..objekt lze založit jen pokud jsou stavy vnitřně konzistentní.

Bohužel praxe ukazuje, že B) je významně lepší, neboť nám dává možnost na nekorektní stavy reagovat a
chybný stav opravit (psa zoperovat, aby měl 4 nohy a mohl pak běhat).

Pro A) musím explicitně řešit jak se vypořádat s nekonzistencí, ale to je někdy problém, nekonzistnce je vně systému.

Pro B mám tedy volnější podmínky na konzistenci vnitřních stavů a getry a setry, zde často postrádají úplně smysl.
neboť konzistenci hodnot nekontrolují....

PeVa

A) také nepotřebuje getry/setry. Pokud potřebuji mít možnost třínohého psa, ošetřím to v konstruktoru, resp. tuto kontrolu mohu vypustit. Pokud však čtyřnohému psu budu chtít nohu amputovat, místo setteru provedu chirurgický zákrok. Tedy pokud urizniNohu() nepovažuješ za setter.
Název: Re:Čada: Objektové programování
Přispěvatel: SB 26. 06. 2015, 13:26:02
Na grafové věci je OOP to nejstrašnější, co jsem kdy viděl. Obzvlášť jak se objeví visitor pattern.

Na grafové věci je imperativní paradigma to nejstrašnější, co jsem kdy viděl. Obzvlášť jak se objeví for( ).

Vaše neznalosti věcí mimo OOP už opravovat nebudu. Taky mě to nebaví.

Úplně stačilo odpovědět na některé dotazy. Taky vás neprcám za vaše znalosti OOP.
Název: Re:Čada: Objektové programování
Přispěvatel: PeVa 26. 06. 2015, 13:27:19
PeVa :
Tady bych nesouhlasil. Možnost A podstatně zmenšuje množství stavů, které musím jako programátor řešit. Pokud mám konzistentního Psa, tak nemusím řešit jestli umí běhat na každém místě, kde ho chci použít. Přišití nohy můžu řešit na jediném místě a to tam, kde ten objekt vytvářím.
Takhle veškeré nekonzistence zvenku řeším právě na hranici systému a uvnitř je všechno konzistentní.

Samozřejmě pokud modeluju veterinu, tak budou požadavky na konzistentního psa trochu jiné, než když modeluju K9. :)

Není to úplně přesné, jak to popisuješ...při B) test na nohy musíš implementovat ve všech metodách, kde pes nohy bude používat, při štěkání pochopitelně ne. Není to ani tak, že každé běhání psa má vlastni implementaci, ta je pochopitelně jen jedna.
B) je sice pracnější, ale za to názorné a dokumentuje nutné předpoklady pro úspěšné zvládnutí funkcionality-činnosti. Když se nějakej mimozemšťan zeptá, k čemu ten pes vlastně nohy potřebuje, a jaké musí být, tak je to hned jasné. Podobně je to s ocasem a ušima.

Ano v tvém kontextu při A) se situace zjednodušší, nicméně jsi jen přenesl zodpovědnost za řešení nekonzistence vně.
Nekonzistenci tak jako tak někdo musí nakonec vyřešit. Jak ji chceš ale vyřešit, když nemužes vytvořit ani psa, že?

Název: Re:Čada: Objektové programování
Přispěvatel: v 26. 06. 2015, 13:31:53
PeVa :
Tady bych nesouhlasil. Možnost A podstatně zmenšuje množství stavů, které musím jako programátor řešit. Pokud mám konzistentního Psa, tak nemusím řešit jestli umí běhat na každém místě, kde ho chci použít. Přišití nohy můžu řešit na jediném místě a to tam, kde ten objekt vytvářím.
Takhle veškeré nekonzistence zvenku řeším právě na hranici systému a uvnitř je všechno konzistentní.

Samozřejmě pokud modeluju veterinu, tak budou požadavky na konzistentního psa trochu jiné, než když modeluju K9. :)

Není to úplně přesné, jak to popisuješ...při B) test na nohy musíš implementovat ve všech metodách, kde pes nohy bude používat, při štěkání pochopitelně ne. Není to ani tak, že každé běhání psa má vlastni implementaci, ta je pochopitelně jen jedna.
B) je sice pracnější, ale za to názorné a dokumentuje nutné předpoklady pro úspěšné zvládnutí funkcionality-činnosti. Když se nějakej mimozemšťan zeptá, k čemu ten pes vlastně nohy potřebuje, a jaké musí být, tak je to hned jasné. Podobně je to s ocasem a ušima.

Ano v tvém kontextu při A) se situace zjednodušší, nicméně jsi jen přenesl zodpovědnost za řešení nekonzistence vně.
Nekonzistenci tak jako tak někdo musí nakonec vyřešit. Jak ji chceš ale vyřešit, když nemužes vytvořit ani psa, že?

a není to jenom falešné dilema? co vytvořit z dat z venku objekt snadno manipulovatelný, ale bez kontrol, druhému objektu s kontrolou tento předat a pokud kontrola selže využít první objekt k opravě dat
připomíná mi to situaci kdy z textu vytvořím AST (=první objekt) a pak ho proženu typovou kontrolou (vznikne druhý objekt)
Název: Re:Čada: Objektové programování
Přispěvatel: SB 26. 06. 2015, 13:32:43
to není pravda, např. v Haskellu je možné definovat pro typ (např.) String "newtype" a následně "type class" určující jak je s ním možno pracovat, to že jej nikdo jiným neprohlédne se pak zajisté neexportováním konstruktoru z modulu
(ale pokud kriticky záleží na formátu řetězce, tak by ta hodnota neměla být vyjádřena řetězcem )

V pořádku, v Haskellu i jinde to funguje, je to jen otázkou deklarace, já jsem narážel na argumenty takových, kteří považují omezení na String za dostatečnou kontrolu správnosti dat.
Název: Re:Čada: Objektové programování
Přispěvatel: PeVa 26. 06. 2015, 13:37:54
A) také nepotřebuje getry/setry. Pokud potřebuji mít možnost třínohého psa, ošetřím to v konstruktoru, resp. tuto kontrolu mohu vypustit. Pokud však čtyřnohému psu budu chtít nohu amputovat, místo setteru provedu chirurgický zákrok. Tedy pokud urizniNohu() nepovažuješ za setter.

Nohu neamputuješ, ty máš už nažačátku psa, kterej má 3 nohy.

Podobý pohled můžeš mít samozřejmě na většinu vlastností, takže vlastně kladeš jen minimální podmínky na konzistenci vntiřních stavů.

Je pes bez osacu, nohou i bez srdce ještě pes....? Z genetického i programátorského poledu ano...Neboť i takového psa mohu jako programátor oživit. A pokud to neumím dnes....mohu to umět za 2 roky.....v dalším releasu.


Název: Re:Čada: Objektové programování
Přispěvatel: PeVa 26. 06. 2015, 13:44:02
Já se tu jinak nechci přít jestli A) ne B je správně...Jen jsem chtěl uvést, že jsou zde 2 koncepty jak k problémům přistupovat.
Při A) kladu podmínky na konzistenci stavů...a getry a setry mají velkou důležistost. Při B) je to na opak....I v aplikaci mám 2 typy různých objektů. Tam kde je pod kontrolou celý životní cyklus, je A) určitě správně tam, kde nemám toto pod kontrolou, pak je lepší asi B.
Název: Re:Čada: Objektové programování
Přispěvatel: Kit 26. 06. 2015, 13:50:19
B) je sice pracnější, ale za to názorné a dokumentuje nutné předpoklady pro úspěšné zvládnutí funkcionality-činnosti. Když se nějakej mimozemšťan zeptá, k čemu ten pes vlastně nohy potřebuje, a jaké musí být, tak je to hned jasné. Podobně je to s ocasem a ušima.

Ano v tvém kontextu při A) se situace zjednodušší, nicméně jsi jen přenesl zodpovědnost za řešení nekonzistence vně.
Nekonzistenci tak jako tak někdo musí nakonec vyřešit. Jak ji chceš ale vyřešit, když nemužes vytvořit ani psa, že?

Otázkou je, co je to konzistence. Řekněme, že u psa máme atributy jméno a počet nohou. Konzistenci můžeme definovat jako objekt bez atributů, s povinným atributem jméno nebo s povinnými oběma atributy. Pokud jsou povinné oba atributy a jeden z nich není zadán, konstruktor může problém vyřešit za mne (pes má obvykle 4 nohy, dosadí default) nebo odmítne takový objekt vytvořit a výjimkou přesunu řešení nekonzistence vně (odmítne zaevidovat psa, který nemá jméno).
Název: Re:Čada: Objektové programování
Přispěvatel: SB 26. 06. 2015, 13:50:43
Ve stavu se nešťouráte cizími funkcemi - jsou to funkce z toho modulu.

O pár přízpěvků zpět někdo psal, že to může být jakákoliv funkce, nejenom z modulu. Možná jsem to jen nepochopil.

Nejde.

V pořádku, to jsem chtěl ale vědět hned.

Nerozumím. Vždyť i v OOP mohu metodám předat/poslat jiný objekt.

Objekt ano, ale k jeho datům se nedostanete (když to nebude explicitně chtít).

Podobně jako máte virtuální metody, můžete mít i virtuální třídy...

Popravdě už si nepamatuju, co je virtuální třída. Virtuální metoda je omrdávka vymyšlená v hybridních jazycích, aby nemuseli za běhu řešit method dispatch.

...typy ve třídách dávají dobrý smysl. Viz třeba OO jazyky BETA nebo Scala.

K čemu jsou dobré?

Obecně typy ve třídách zvyšují vyjadřovací schopnosti jazyka

...a komplikují jeho sémantiku (vyžadují rozdílné, imperativní zpracování).
Název: Re:Čada: Objektové programování
Přispěvatel: Kit 26. 06. 2015, 13:53:06
A) také nepotřebuje getry/setry. Pokud potřebuji mít možnost třínohého psa, ošetřím to v konstruktoru, resp. tuto kontrolu mohu vypustit. Pokud však čtyřnohému psu budu chtít nohu amputovat, místo setteru provedu chirurgický zákrok. Tedy pokud urizniNohu() nepovažuješ za setter.

Nohu neamputuješ, ty máš už nažačátku psa, kterej má 3 nohy.

Pokud mám třínohého psa, uvedu to v konstruktoru. Setter nepotřebuji.
Název: Re:Čada: Objektové programování
Přispěvatel: JSH 26. 06. 2015, 13:58:42
V pořádku, v Haskellu i jinde to funguje, je to jen otázkou deklarace, já jsem narážel na argumenty takových, kteří považují omezení na String za dostatečnou kontrolu správnosti dat.
Pokud jste tak pochopil ten můj příspěvek, tak jste ho pochopil špatně. Typová kontrola tak, jak jsem ji popsal zhruba odpovídá "Porozumí tenhle objekt mojí zprávě?" A jestli ne, tak to zjistím už při překladu a nemusím si na to psát unit test.

Ano, silná typová kontrola komplikuje jazyk. Zároveň ale ulehčuje práci protože eliminuje kopec triviálních chyb. Nezaručí to program bez chyb, ale to snad nikdo ani netvrdí.
Název: Re:Čada: Objektové programování
Přispěvatel: PeVa 26. 06. 2015, 14:04:48
Pokud mám třínohého psa, uvedu to v konstruktoru. Setter nepotřebuji.

Ja se nepřu, ale nepotřebuješ to uvádět ani v konstrukoru ani nepotřebuješ setter....Neboť je to úplně jedno jak je na tom pes s nohama...Jednou je to podle DNA pes a ostatní věci jsou podružné...Jestli pes může běhat je dáno jenom tím, jak je na tom momentálně s nohama...to se může pochopitelně celkem snadno měnit.

Název: Re:Čada: Objektové programování
Přispěvatel: Kit 26. 06. 2015, 14:09:23
Pokud mám třínohého psa, uvedu to v konstruktoru. Setter nepotřebuji.

Ja se nepřu, ale nepotřebuješ to uvádět ani v konstrukoru ani nepotřebuješ setter....Neboť je to úplně jedno jak je na tom pes s nohama...Jednou je to podle DNA pes a ostatní věci jsou podružné...Jestli pes může běhat je dáno jenom tím, jak je na tom momentálně s nohama...to se může pochopitelně celkem snadno měnit.

K čemu je pak objekt, který nemá žádné atributy a nemůže tedy držet žádný stav?
Název: Re:Čada: Objektové programování
Přispěvatel: PeVa 26. 06. 2015, 14:21:09
K čemu je pak objekt, který nemá žádné atributy a nemůže tedy držet žádný stav?

Ale ten objekt má attributy, mnoho atributů...má nohy, má uši, ocas....a spoustu dalšího...

Ano nedrží stavovou informaci....(žiji/nežiji).

Ano pokud implementuji vnitřní stavy, pak musím implementovat settery a gettery, aby vnitřní stav byl konzistentní.


Název: Re:Čada: Objektové programování
Přispěvatel: Kit 26. 06. 2015, 14:36:58
Ano pokud implementuji vnitřní stavy, pak musím implementovat settery a gettery, aby vnitřní stav byl konzistentní.

Vnitřní stavy mohou být přece konzistentní i bez G/S. Jak mohou zajistit konzistenci? Vždyť (často zbytečně) rozšiřují rozhraní objektu. Bez G/S není možné tu konzistenci nijak ohrozit.
Název: Re:Čada: Objektové programování
Přispěvatel: SB 26. 06. 2015, 15:21:02

To jste nevybral dobrý příklad, s tím psem: Buďto načítáte z objektové DB, pak jen replikujete již existující objekt na straně klientu, aniž byste musel něco řešit. Nebo načítáte z jiného zdroje (třeba RDB), pak je to pro vás vnější systém a objekt vzniká poprvé, je tedy třeba ověřit správnost dat pro rekonstrukci objektu, a to dle mechanismu vzniku samotného objektu např. v konstruktoru či v mapovači.