Výběr vhodného OOP jazyka

Re:Výběr vhodného OOP jazyka
« Odpověď #105 kdy: 05. 06. 2018, 15:05:10 »
Netypovost je především předpokladem pozdní vazby!
To je nebetyčná blbost.

Jak se instanci třídy "Kniha" v typovém systému posílá zpráva "diDoPyči", kterou Kniha vůbec nemá v protokolu?

Blbě


ava

Re:Výběr vhodného OOP jazyka
« Odpověď #106 kdy: 05. 06. 2018, 15:20:32 »

(Bohužel v praxi vymizelí) následovníci Smalltalku jako je Self nebo Newspeak se ubírali směrem k optional (pluggable) type systémům, což mi pro dynamické jazyky jako je Smalltalk přijde jako ideální kompromis.

Pěkné shrnutí je tady: http://bracha.org/pluggableTypesPosition.pdf

Myslím (ale nevím podrobnosti), že optional type system má (měl?) i Dart, http://journal.stuffwithstuff.com/2011/10/21/wrapping-my-head-around-optional-typing/

Spíš pro zajímavost, Optional typing může fungovat jen v jazycích, kde typové anotace neovlivňují význam kódu, takže by asi mohl fungovat v Javě nebo v C#, ale už ne ve Scale (implicity) nebo v Rustu, F# (traity) - alespoň taková je moje intuice, formálně bych za to ruku do ohně nedal.
A co ObjC?

ObjC moc neznám, jen si vybavuji že je to mix C a Smalltalku, pro tu Smalltalkovou část by to asi šlo, pro tu C asi ne (muselo by to být hodně ohnuté C).
Ještě abych upravil svůj předchozí příspěvek - u Rustu a F# jsem myslel nikoliv traity ale typeclassy (které se v Rustu uvádějí klíčovým slovem trait, proto mě to zmátlo), a u typeclass si nejsem úplně jistý, jestli by se daly nějak napasovat na optional type system, možná jo..

A když jsem psal Self a Newspeak, myslel jsem StrongTalk a Newspeak, sorry :) Ale i na StrongTalku i na Dartu pracoval Gilad Bracha, takže k tomuhle tématu už budou asi relevatntnější dokumenty týkající se novějšího Dartu než staršího StrongTalku (třeba zde: http://www.bracha.org/nwst.html)

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Výběr vhodného OOP jazyka
« Odpověď #107 kdy: 05. 06. 2018, 15:37:41 »
Podobně se statické typování cpe do PHP,  i když ho nepotřebuje.
Optional statické typy jsou věc, která činí PHP výjimečným (v rámci toho, že je to bastl). Říct, že ho nepotřebuje je zoufalé nepochopení vo co de.

Pokud nechápeš typy, tak používej jazyky, které je nemají. Python, nebo Javascript jsou v takovém případě mnohem lepší volbou.

Kit

Re:Výběr vhodného OOP jazyka
« Odpověď #108 kdy: 05. 06. 2018, 16:03:25 »
Podobně se statické typování cpe do PHP,  i když ho nepotřebuje.
Optional statické typy jsou věc, která činí PHP výjimečným (v rámci toho, že je to bastl). Říct, že ho nepotřebuje je zoufalé nepochopení vo co de.

Pokud nechápeš typy, tak používej jazyky, které je nemají. Python, nebo Javascript jsou v takovém případě mnohem lepší volbou.

Řekl bych, že jsi zoufale nepochopil, o co mi šlo.

Kiwi

Re:Výběr vhodného OOP jazyka
« Odpověď #109 kdy: 05. 06. 2018, 17:21:38 »
...Středobodem OOP není dědění ani zapouzdření, jak se s oblibou omílá jako mantra, ale polymorfismus, k němuž je nezbytná pozdní vazba...

Tak pozor, zapouzdření JE jednou z klíčových vlastností OOP, protože tím zajišťuje izolaci problému v objektu, ale dohadovat se tu o tom nemíním, to už tu bylo.
Polymorfismus pochopitelně, ale ten je vlastně pouze důsledkem té pozdní vazby, ne vytvořený překladačem jako u podtypového kvazipolymorfismu.
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. Tak se člověk snažil programovat i v BASICu na 8bitech v rámci možností, které ten jazyk nabízel, tj. při absenci lokálních proměnných. Na "zapouzdřené" funkční moduly se dělí i samotný počítač, ale třeba i rádio, nejde-li o nějakou reflexní konstrukci. U OOP se to začalo zdůrazňovat hlavně v souvislosti s jazykovými prostředky, které to zapoudření zabezpečují i fakticky, což je podle mě celkem zbytečná věc.

Odvozování podtříd pomocí dědění je zase spíše taková zkratka, jak zrecyklovat existující kód, ale není v ničem významnější než třeba kompozice, která se tak zdaleka nezdůrazňuje.

Ovšem polymorfismus, to je něco, na čem OOP stojí a padá - ať už realizovaný na základě zpráv, nebo pomocí generických funkcí (u nichž zase ztrácí smysl zapouzdření, jak ho chápou jazyky jako Java). A ten zase stojí a padá s pozdní, přesněji velmi pozdní vazbou. Nechci se hádat o tom, co je předpokladem čeho, já chápu pozdní vazbu jako technické řešení polymorfismu a pojem polymorfismus za výstižnější, protože přesně popisuje, oč tu jde - o mnohotvárnost v typech objektů, jež se mohou vyskytnout na těch samých místech v různých okamžicích běhu programu. Časná vazba u statického typování je v příkrém rozporu s tímto přístupem, proto je tak obtížné toho polymorfismu ve staticky typovaných jazycích dosáhnout, proto je k tomu 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á.


Kit

Re:Výběr vhodného OOP jazyka
« Odpověď #110 kdy: 05. 06. 2018, 17:45:53 »
Časná vazba u statického typování je v příkrém rozporu s tímto přístupem, proto je tak obtížné toho polymorfismu ve staticky typovaných jazycích dosáhnout, proto je k tomu 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á.

V Javě se to dá obejít v jednodušších případech přes Object nebo je možné ho rozšířit o nějaké rozhraní.

Onestone

Re:Výběr vhodného OOP jazyka
« Odpověď #111 kdy: 05. 06. 2018, 22:36:56 »
Podobně se statické typování cpe do PHP,  i když ho nepotřebuje.
Optional statické typy jsou věc, která činí PHP výjimečným (v rámci toho, že je to bastl). Říct, že ho nepotřebuje je zoufalé nepochopení vo co de.

Pokud nechápeš typy, tak používej jazyky, které je nemají. Python, nebo Javascript jsou v takovém případě mnohem lepší volbou.
Python i JavaScript mají typy, nějak se v tom plácáš.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Výběr vhodného OOP jazyka
« Odpověď #112 kdy: 05. 06. 2018, 22:56:02 »
Python i JavaScript mají typy, nějak se v tom plácáš.

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

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Výběr vhodného OOP jazyka
« Odpověď #113 kdy: 05. 06. 2018, 23:03:23 »
Ovšem polymorfismus, to je něco, na čem OOP stojí a padá - ať už realizovaný na základě zpráv, nebo pomocí generických funkcí (u nichž zase ztrácí smysl zapouzdření, jak ho chápou jazyky jako Java).

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.

Onestone

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

To vykládej někomu, kdo tomu nerozumí.
To evidentně právě dělám.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Výběr vhodného OOP jazyka
« Odpověď #115 kdy: 06. 06. 2018, 03:00:09 »
Python i JavaScript mají typy, nějak se v tom plácáš.

To vykládej někomu, kdo tomu nerozumí.
To evidentně právě dělám.

Že já vždycky těmhle trollům naběhnu...

Inkvizitor

Re:Výběr vhodného OOP jazyka
« Odpověď #116 kdy: 06. 06. 2018, 11:04:05 »
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.

Vidim to podobne.

balki

Re:Výběr vhodného OOP jazyka
« Odpověď #117 kdy: 06. 06. 2018, 11:23:31 »
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.

Vidim to podobne.

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.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Výběr vhodného OOP jazyka
« Odpověď #118 kdy: 06. 06. 2018, 15:00:34 »
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?

SB

Re:Výběr vhodného OOP jazyka
« Odpověď #119 kdy: 06. 06. 2018, 15:57:32 »
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.