Výběr vhodného OOP jazyka

SB

Re:Výběr vhodného OOP jazyka
« Odpověď #120 kdy: 06. 06. 2018, 16:03:58 »
Python i JavaScript mají typy, nějak se v tom plácáš.

To vykládej někomu, kdo tomu nerozumí.

Teď ještě si ujasnit, co jsou to ty typy. Jestli jsou protipólem tříd, tak třeba Javascript primitivní typy má (však už kolem jejich fungování bylo dost dusno).


SB

Re:Výběr vhodného OOP jazyka
« Odpověď #121 kdy: 06. 06. 2018, 16:26:27 »
Jen pro pořádek, polymorfizmus v haskellu:

Kód: [Vybrat]
format (JSON x) = ...
format (XML x) = ...
format (HTML x) = ...

IMHO základní princip, který opravdu charakterizuje OOP je umístění stavu do objektu. Vše ostatní tu bylo, je, a častokrát i líp.

Super. A zvládne to taky zpracovat zprávu "format", která nemá v parametru JSON, XML nebo HTML? A zvládne to zpracovat zprávu, pro kterou nemá vůbec žádný předpis?

Kit

Re:Výběr vhodného OOP jazyka
« Odpověď #122 kdy: 06. 06. 2018, 16:28:39 »
...jazykovými prostředky, které to zapoudření zabezpečují i fakticky, což je podle mě celkem zbytečná věc.

Jasně, zapouzdření je přece na hovno. V ložnici přece taky nebudeme věšet záclony, aby nebylo dovnitř vidět, jak (a s kým) tam šukáte, stačí na okno napsat "NEKOUKAT". Nebo zamykání baráku. Taky na hovno, opět stačí napsat "NEPOVOLANÝM VSTUP ZAKÁZÁN" a už vám to nikdo nemůže vybrabčit. Nebo na kino stačí pověsit cedulku "Bezezbraňová zóna" a diváci jsou v bezpečí. Vždyť je to tak jednoduché!

Někteří si však pod pojmem zapouzdření představují kukátko, kterým se do té ložnice smí koukat a kterým je vidět všechno, co se děje uvnitř.

SB

Re:Výběr vhodného OOP jazyka
« Odpověď #123 kdy: 06. 06. 2018, 16:31:00 »
IMHO základní princip, který opravdu charakterizuje OOP je umístění stavu do objektu.

Stav tam je, ale na objekt to nestačí. Stav má v sobě kdeco.

Vše ostatní tu bylo, je, a častokrát i líp.

Rádi se necháme poučit.

Onestone

Re:Výběr vhodného OOP jazyka
« Odpověď #124 kdy: 06. 06. 2018, 16:32:21 »
Izolace problému v objektu se principiálně neliší od izolace problému v modulu u jakéhokoli typu návrhu, neboli to není nic nového, co by přišlo až s OOP.

Samotná izolace ne, ale objekty jsou mnohem víc! Jsou to izolované výpočetní jednotky, kterých si za běhu můžete jednoduše vytvořit, kolik chcete, a zase je smazat, jednoduše na ně ukazovat, nebo je naopak skrýt zapouzdřením, aby se viděly jen některé. To už je kurva novinkou!

...jazykovými prostředky, které to zapoudření zabezpečují i fakticky, což je podle mě celkem zbytečná věc.

Jasně, zapouzdření je přece na hovno. V ložnici přece taky nebudeme věšet záclony, aby nebylo dovnitř vidět, jak (a s kým) tam šukáte, stačí na okno napsat "NEKOUKAT". Nebo zamykání baráku. Taky na hovno, opět stačí napsat "NEPOVOLANÝM VSTUP ZAKÁZÁN" a už vám to nikdo nemůže vybrabčit. Nebo na kino stačí pověsit cedulku "Bezezbraňová zóna" a diváci jsou v bezpečí. Vždyť je to tak jednoduché!

Ovšem polymorfismus ... realizovaný ... pomocí generických funkcí (u nichž zase ztrácí smysl zapouzdření, jak ho chápou jazyky jako Java).

Generické funkce jsou taková ta omrdávka typového systému, pamatuju si to dobře, ne? Jak ale souvisejí se zapouzdřením, mi musíte vysvětlit.

...nezbytný rozsáhlý aparát na obcházení té časné vazby, proto jsou vymýšlený různé idiomy, jak typový systém obejít, a.k.a design patterns. A proto je většina programů v Javě nebo v C++ ve skutečnosti jen pramálo objektová.

Z návrhových vzorů řešících nedostatky v implementaci OOP si z hlavy vybavuju pouze dekorátor, což je ovšem typický příklad řešící chybějící pozdní vazbu v jazycích s podtypovým kvazipolymorfismem.
Zapouzdření hlavně vůbec nesouvisí s OOP.


SB

Re:Výběr vhodného OOP jazyka
« Odpověď #125 kdy: 06. 06. 2018, 16:32:37 »
Dodam este, ze ciste OOP samo o sebe neexistuje, vzdy je niecim "pokazene" a teda ide skor o multiparadigmovy pristup.  Kod moze byt viac objektovo-orientovany, alebo menej-objektovo orientovany podla toho, ake  je programator prasa, alebo ake obmedzenia su kladene na aplikaciu/system. OOP je stavove a stav je v objekte, to bez debaty.

Smalltalk by se do toho nevešel?

Nic mě nenapadá. Zkuste uvést příklad.

Kit

Re:Výběr vhodného OOP jazyka
« Odpověď #126 kdy: 06. 06. 2018, 16:35:25 »
Jen pro pořádek, polymorfizmus v haskellu:

Kód: [Vybrat]
format (JSON x) = ...
format (XML x) = ...
format (HTML x) = ...

IMHO základní princip, který opravdu charakterizuje OOP je umístění stavu do objektu. Vše ostatní tu bylo, je, a častokrát i líp.

Super. A zvládne to taky zpracovat zprávu "format", která nemá v parametru JSON, XML nebo HTML? A zvládne to zpracovat zprávu, pro kterou nemá vůbec žádný předpis?

Asi tam bude potřeba pro tyto účely přidat pravidlo na způsob
Kód: [Vybrat]
format (f x) = ...

Kit

Re:Výběr vhodného OOP jazyka
« Odpověď #127 kdy: 06. 06. 2018, 16:37:13 »
Zapouzdření hlavně vůbec nesouvisí s OOP.

Souvisí. Hlavně je však potřebné vědět, co je to zapouzdření.

Kit

Re:Výběr vhodného OOP jazyka
« Odpověď #128 kdy: 06. 06. 2018, 16:41:11 »
IMHO základní princip, který opravdu charakterizuje OOP je umístění stavu do objektu.

Stav tam je, ale na objekt to nestačí. Stav má v sobě kdeco.

V objektu je nejen stav, ale hlavně algoritmy, které s tímto stavem pracují.

SB

Re:Výběr vhodného OOP jazyka
« Odpověď #129 kdy: 06. 06. 2018, 16:43:37 »
Zapouzdření hlavně vůbec nesouvisí s OOP.

Naopak, OOP přímo ZÁVISÍ na zapouzdření, jinak by došlo k porušení izolace modelované subdomény od okolního světa a jejímu průniku mimo objekt, čímž by objekt ztratil zodpovědnost za svůj stav a jeho konsistenci, takže by už nešlo o objekt jako atomickou výpočetní jednotku.

SB

Re:Výběr vhodného OOP jazyka
« Odpověď #130 kdy: 06. 06. 2018, 16:44:48 »
Jen pro pořádek, polymorfizmus v haskellu:

Kód: [Vybrat]
format (JSON x) = ...
format (XML x) = ...
format (HTML x) = ...

IMHO základní princip, který opravdu charakterizuje OOP je umístění stavu do objektu. Vše ostatní tu bylo, je, a častokrát i líp.

Super. A zvládne to taky zpracovat zprávu "format", která nemá v parametru JSON, XML nebo HTML? A zvládne to zpracovat zprávu, pro kterou nemá vůbec žádný předpis?

Asi tam bude potřeba pro tyto účely přidat pravidlo na způsob
Kód: [Vybrat]
format (f x) = ...

Supr. A co ta druhá otázka?

Kit

Re:Výběr vhodného OOP jazyka
« Odpověď #131 kdy: 06. 06. 2018, 17:10:19 »
Jen pro pořádek, polymorfizmus v haskellu:

Kód: [Vybrat]
format (JSON x) = ...
format (XML x) = ...
format (HTML x) = ...

IMHO základní princip, který opravdu charakterizuje OOP je umístění stavu do objektu. Vše ostatní tu bylo, je, a častokrát i líp.

Super. A zvládne to taky zpracovat zprávu "format", která nemá v parametru JSON, XML nebo HTML? A zvládne to zpracovat zprávu, pro kterou nemá vůbec žádný předpis?

Asi tam bude potřeba pro tyto účely přidat pravidlo na způsob
Kód: [Vybrat]
format (f x) = ...

Supr. A co ta druhá otázka?

V Haskellu neumím, ale to dodatečné pravidlo by mělo vyřešit obě otázky.

Kiwi

Re:Výběr vhodného OOP jazyka
« Odpověď #132 kdy: 06. 06. 2018, 20:36:20 »
Izolace problému v objektu se principiálně neliší od izolace problému v modulu u jakéhokoli typu návrhu, neboli to není nic nového, co by přišlo až s OOP.

Samotná izolace ne, ale objekty jsou mnohem víc! Jsou to izolované výpočetní jednotky, kterých si za běhu můžete jednoduše vytvořit, kolik chcete, a zase je smazat, jednoduše na ně ukazovat, nebo je naopak skrýt zapouzdřením, aby se viděly jen některé. To už je kurva novinkou!

...jazykovými prostředky, které to zapoudření zabezpečují i fakticky, což je podle mě celkem zbytečná věc.

Jasně, zapouzdření je přece na hovno. V ložnici přece taky nebudeme věšet záclony, aby nebylo dovnitř vidět, jak (a s kým) tam šukáte, stačí na okno napsat "NEKOUKAT". Nebo zamykání baráku. Taky na hovno, opět stačí napsat "NEPOVOLANÝM VSTUP ZAKÁZÁN" a už vám to nikdo nemůže vybrabčit. Nebo na kino stačí pověsit cedulku "Bezezbraňová zóna" a diváci jsou v bezpečí. Vždyť je to tak jednoduché!
To je spíš jen otázka organizace struktury programu. V neobjektovém návrhu mi nic nebrání vytvářet, mazat a ukazovat na proměnné, představující vzájemně izolovaná data, nad nimiž operují příslušné procedury. Zásadní je rozbití vazby mezi jménem procedury a konkrétním typem dat a odložení svázání s konkrétní procedurou až na poslední chvíli, tím vzniká polymorfismus. Ale to lze realizovat i jinak, třeba v Lispu se to dělá pomocí generických funkcí, které nejsou součástí žádné třídy, ale podle typu objektů, na které je volám, poznají, jakou konkrétní metodu mají zavolat. Třída je pak jen seznam jmen atributů a metod, její instance seznam konkrétních dat. Polymorfní to celé je, ale zapouzdřené? Sémanticky ano, technicky vůbec. À propos - znáš hodně lidí, kteří třeba v C pitvají útroby struktury FILE, jen protože jim v tom nic nebrání? Takovéhle operace jsou jak střelit se do vlastní nohy. Určitý smysl by to dávalo jen u objektů uchovávajících citlivá data, jež nejsou určena mně. Ale pokud by jejich zabezpečení mělo záviset na zapouzdření (v tom technickém smyslu), tak by byla zabezpečená dost mizerně. Proto v tom technickém znepřístupnění nevidím nic zásadního. Pokud by bylo myšleno to zapouzdření v sémantickém smyslu, tak to by bylo něco jiného. Ale taky nic až tak zásadního.

Ovšem polymorfismus ... realizovaný ... pomocí generických funkcí (u nichž zase ztrácí smysl zapouzdření, jak ho chápou jazyky jako Java).

Generické funkce jsou taková ta omrdávka typového systému, pamatuju si to dobře, ne? Jak ale souvisejí se zapouzdřením, mi musíte vysvětlit.
Nikoliv. Viz výše. To jsem se jen špatně vyjádřil.

...nezbytný rozsáhlý aparát na obcházení té časné vazby, proto jsou vymýšlený různé idiomy, jak typový systém obejít, a.k.a design patterns. A proto je většina programů v Javě nebo v C++ ve skutečnosti jen pramálo objektová.

Z návrhových vzorů řešících nedostatky v implementaci OOP si z hlavy vybavuju pouze dekorátor, což je ovšem typický příklad řešící chybějící pozdní vazbu v jazycích s podtypovým kvazipolymorfismem.
A taky všechny možné factory, proxy, mediátory, state, template method... To jsou všechno obraty v dynamicky typovaných jazycích jednoduché jak facka, takže nikoho nenapadlo je nějak pojmenovávat, ale teprve u těch statických se muselo přijít na idiomy, jakými se to chování známé z těch dynamických nasimuluje.

Onestone

Re:Výběr vhodného OOP jazyka
« Odpověď #133 kdy: 07. 06. 2018, 00:00:47 »
Zapouzdření hlavně vůbec nesouvisí s OOP.
Souvisí. Hlavně je však potřebné vědět, co je to zapouzdření.
To je dost logické. Pak právě člověk ví, že nesouvisí ;)

Inkvizitor

Re:Výběr vhodného OOP jazyka
« Odpověď #134 kdy: 07. 06. 2018, 10:16:30 »
Zapouzdření hlavně vůbec nesouvisí s OOP.
Souvisí. Hlavně je však potřebné vědět, co je to zapouzdření.
To je dost logické. Pak právě člověk ví, že nesouvisí ;)

OOP bez zapouzdreni asi neni uplne koser, ale spousta lidi netusi, ze treba ve funkcionalnim Haskellu je mozne pomoci modulu dosahnout prakticky tehoz - s danym typem muze pracovat jenom dotycny modul, kdyz se z modulu nevyexportuje informace o vnitrku toho typu, proste se dovnitr funkce z jineho modulu vubec nepodiva.

Tudiz bych trval na tom, ze zapouzdreni neni to, co dela OOP. Natoz aby bylo jeho vysadou.