Výběr vhodného OOP jazyka

SB

Re:Výběr vhodného OOP jazyka
« Odpověď #90 kdy: 04. 06. 2018, 10:30:14 »
Co je na Smalltalku ... tak skvělého oproti moderním jazykům?

Jen tak z hlavy: Je pořád jednoduchý i po implementaci např. mixinů ap. Má dosud nepřekonaný debugger, kdy je možno za chodu opravovat chyby a pokračovat ve výpočtu bez nutnosti cosi znovu kompilovat či spouštět. Je message oriented (správný název pro původní záměr autorů) a zároveň zapouzdřuje - to zvládá ze známých jazyků pouze Javascript, ale za cenu složité konstrukce objektů s vnořenými funkčními kontexty.


SB

Re:Výběr vhodného OOP jazyka
« Odpověď #91 kdy: 04. 06. 2018, 10:33:43 »
Smalltalk má z dnešního pohledu jednu velkou nevýhodu - nemá statické typování.

Toto je nesmyslná paušalizace. Má to svoje výhody i nevýhody.

SB

Re:Výběr vhodného OOP jazyka
« Odpověď #92 kdy: 04. 06. 2018, 10:40:55 »
Netypovost Smalltalku má v OOP jazyku docela smysl, ale je otázka, zda celé OOP není slepá ulička.

Netypovost je především předpokladem pozdní vazby!
Zjevně není, pořád jsou věci, které se v tom modelují jednoduše. Zádrhelem je, že to není pro kdekoho, to ale funkcionální jazyky taky ne.

Inkvizitor

Re:Výběr vhodného OOP jazyka
« Odpověď #93 kdy: 04. 06. 2018, 10:58:02 »
Netypovost Smalltalku má v OOP jazyku docela smysl, ale je otázka, zda celé OOP není slepá ulička.

Netypovost je především předpokladem pozdní vazby!
Zjevně není, pořád jsou věci, které se v tom modelují jednoduše. Zádrhelem je, že to není pro kdekoho, to ale funkcionální jazyky taky ne.

Ono asi zadne programovani neni "pro kdekoho", ale to je zase jina vec. Mas nejaky priklad typicke domeny, kde je "klasicke" OOP vyrazne vyhodnejsi nez treba typova parametrizace? Krome tvorby GUI...

Kiwi

Re:Výběr vhodného OOP jazyka
« Odpověď #94 kdy: 04. 06. 2018, 11:31:48 »
Smalltalk má z dnešního pohledu jednu velkou nevýhodu - nemá statické typování.
Alan Kay by tě asi za takové tvrzení sežral za živa. Statické typování se s objektovým modelem vůbec nesnese, to je zkrátka fakt, který vychází ze samotné podstaty objektového modelu. Statickým typováním se objektový jazyk neuvěřitelně zkomplikuje - stačí se kouknout na C++ nebo na Javu (a na jejich historický vývoj) a uvědomit si, které všechny konstrukce v těch jazycích jsou jen kvůli typům. 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. Na to je třeba mít proměnné spíše jen jako místa pro různé instance, ale není třeba je předem označovat visačkou typu, protože typová kontrola není v OOP zapotřebí - všechny ty objekty jsou dostatečně inteligentní entity k tomu, aby chybu vyřešily samy ad hoc podle momentálních okolností. Nebo vůbec nemusí jít o chybu - pokud několik různých nesouvisejících objektů rozumí stejné zprávě, tak neexistuje rozumný důvod, proč by měl objektový jazyk zakazovat umístit je do stejné proměnné. Typová kontrola mi tuto pozdní vazbu strašně ztěžuje. Prakticky jakýkoliv kus kódu ve Smalltalku je mnohem kratší a přehlednější než ten samý u Javy, o C++ ani nemluvě.

Jako největší výhoda statického typování se uvádí odhalení chyb při kompilaci. Ale to se dá řešit unit testy - a např. Smalltalk k jejich psaní nabízí mocné prostředky.

Stručně - statické typování vychází z myšlenky, že dopředu vím co s čím budu dělat, už v době kompilace. Objektový model ale vychází z přesně opačné myšlenky - že takovéto věci se rozhodnou až za běhu uvnitř objektů. Proto bude statický typový systém v objektovém jazyku vždycky představovat obrovskou kouli na noze.


Re:Výběr vhodného OOP jazyka
« Odpověď #95 kdy: 04. 06. 2018, 11:55:54 »
Jako největší výhoda statického typování se uvádí odhalení chyb při kompilaci. Ale to se dá řešit unit testy - a např. Smalltalk k jejich psaní nabízí mocné prostředky.

Rozdil mezi unittesty a statickym typovanim, je, ze unitttest ti ukazuje situace, kde to z hlediska typu funguje. Staticke typy ti zarucuji, ze to v ramci typu (ne nutne celeho runtime) funguje.

Kit

Re:Výběr vhodného OOP jazyka
« Odpověď #96 kdy: 04. 06. 2018, 12:02:31 »
Jako největší výhoda statického typování se uvádí odhalení chyb při kompilaci. Ale to se dá řešit unit testy - a např. Smalltalk k jejich psaní nabízí mocné prostředky.

Java se snažila místo testů použít typy. Testy jsou však stále potřebné, vznikla jakási validační schizofrenie. Podobně se statické typování cpe do PHP,  i když ho nepotřebuje. Smalltalk se o to nepokusil a zůstal u testů, čímž celý návrh aplikace zjednodušil.

Re:Výběr vhodného OOP jazyka
« Odpověď #97 kdy: 04. 06. 2018, 12:16:43 »
Jako největší výhoda statického typování se uvádí odhalení chyb při kompilaci. Ale to se dá řešit unit testy - a např. Smalltalk k jejich psaní nabízí mocné prostředky.

Java se snažila místo testů použít typy. Testy jsou však stále potřebné, vznikla jakási validační schizofrenie. Podobně se statické typování cpe do PHP,  i když ho nepotřebuje. Smalltalk se o to nepokusil a zůstal u testů, čímž celý návrh aplikace zjednodušil.

Protoze oboji resi jiny problem? To neni schizofrenie, proste pouzivas pro kazdou uroven mozne chyby nejvhodnejsi nastroj. (Ze by se Java misto testu pokousela prosadit typy je samozrejme hovadina. To z principu nejde. Stejne jako z principu nejde mit typovou kontrolu udelanou tak dobre testy jako statickou kontrolou.)

Onestone

Re:Výběr vhodného OOP jazyka
« Odpověď #98 kdy: 04. 06. 2018, 20:02:04 »
Netypovost Smalltalku má v OOP jazyku docela smysl, ale je otázka, zda celé OOP není slepá ulička.
Netypovost je především předpokladem pozdní vazby!
To je nebetyčná blbost.

ava

Re:Výběr vhodného OOP jazyka
« Odpověď #99 kdy: 05. 06. 2018, 11:36:56 »
Netypovost Smalltalku má v OOP jazyku docela smysl, ale je otázka, zda celé OOP není slepá ulička.

Netypovost je především předpokladem pozdní vazby!
Zjevně není, pořád jsou věci, které se v tom modelují jednoduše. Zádrhelem je, že to není pro kdekoho, to ale funkcionální jazyky taky ne.

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

Onestone

Re:Výběr vhodného OOP jazyka
« Odpověď #100 kdy: 05. 06. 2018, 13:39:51 »
Netypovost Smalltalku má v OOP jazyku docela smysl, ale je otázka, zda celé OOP není slepá ulička.

Netypovost je především předpokladem pozdní vazby!
Zjevně není, pořád jsou věci, které se v tom modelují jednoduše. Zádrhelem je, že to není pro kdekoho, to ale funkcionální jazyky taky ne.

(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?

SB

Re:Výběr vhodného OOP jazyka
« Odpověď #101 kdy: 05. 06. 2018, 14:17:56 »
...Mas nejaky priklad typicke domeny, kde je "klasicke" OOP vyrazne vyhodnejsi nez treba typova parametrizace? Krome tvorby GUI...

Tak zrovna GUI určitě není něco, kvůli čemu OOP vzniklo. Pro mě(!) pořád platí snadné modelování obchodních systémů. Jiné užití mě nyní nenapadá.

SB

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

SB

Re:Výběr vhodného OOP jazyka
« Odpověď #103 kdy: 05. 06. 2018, 14:53:54 »
Rozdil mezi unittesty a statickym typovanim, je, ze unitttest ti ukazuje situace, kde to z hlediska typu funguje. Staticke typy ti zarucuji, ze to v ramci typu (ne nutne celeho runtime) funguje.

Ale hovno. Statické typování zajišťuje shody "typu", nanejvýš "podtypu". Nic víc, nic míň. To samo o sobě pochopitelně ještě nezaručuje správnost. Jednotkové testy NEMAJÍ s typy co do činění, pouze ověřují, zda pro dané vstupy vznikají požadované výstupy. To je vše. Zde pro změnu vzniká problém se správným pokrytím testy.

SB

Re:Výběr vhodného OOP jazyka
« Odpověď #104 kdy: 05. 06. 2018, 14:57:29 »
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?