Co si myslíte o OOP?

SB

Re:Co si myslíte o OOP?
« Odpověď #390 kdy: 04. 01. 2019, 14:05:31 »
To, ze stare objekty (vytvorene podle predchozi verze kodu) zustanou nezmenene je snad v poradku ne?
Ne. To je to, co ti porad nedochazi. Podstata je ve vymene stareho za nove ne ve vytvoreni noveho. To druhé Python umí (a umí to jakýkoliv jazyk s REPL), to první ne.

Nevím, zda si rozumíte:
Jestliže ve Smalltalku přepíšu za běhu (Smalltalk má běh pořád) metodu, všechny instance dané třídy, přestože se nijak nezměnily, budou používat novou metodu, protože nositelem metod objektu je zde třída (způsob implementace metod). Když v Javascriptu změním kód, který generuje objekty včetně metod (bez "prototypování", ad-hoc), pak samozřejmě nové chování budou mít až ty nové objekty.


BaldSlattery

Re:Co si myslíte o OOP?
« Odpověď #391 kdy: 04. 01. 2019, 14:14:07 »
No LOL. Staticke typy vznikly za ucelem vykonostni optimalizace, pro jednoduchou a rychlou praci s pameti.. 
Taky si LOLnu. Samozřejmě, tak vznikli. Ale to je historie. Existuje taky věc, jako teorie typů.

Navzdory tomu spousta jejich priznivcu je presvedcena, ze jejich smysl je zajistit bezchybnost aplikace a z nich potom padaji obdobne nesmyslne hlasky, ze kdyz program proleze kompilatorem, tak je hotovo.
Ano, a taky to tak je. Sice to asi nejde dotáhnout tak, aby to bylo doslova jak píšu, ale odvedou ohromné množství práce. V porovnání s dynamickými, které nedělají žádnou práci, ...

Dovolim si tvrzeni, ze staticke typy adoruji lini programatori, kteri nechteji delat testy a ziji v naivnim presvedceni, ze kompilator testuje aplikaci za ne.
Měl jsem jednou přednášku na námět teorie typů. Vzhledem k tomu, jak na mě zmateně koukali mě už nepřekvapuje, že tu tolika lidem zcela ujel vlak.

Programy v dynamickych jazycich obecne nepadaji, to je domenou jazyku, ktere nemaji vyjimky. Nevzpominam si ze bych videl nekdy padnout python.
Tak když to říkáš. Na takovou blbost se nebudu optěžovat argumentovat.
Staticke typy zvysuji miru slozitosti programu, tedy jeho nachylnost k chybam.
Kandidát na nejdebilnější hlášku desetiletí.

Kit

Re:Co si myslíte o OOP?
« Odpověď #392 kdy: 04. 01. 2019, 14:23:36 »
Celé toto vlákno je o tom, že statické typování nemá žádné výhody proti dynamickému - snad jen výkonnostní. Pokud opravdu potřebuji výkon, použiji Fortan, kde ty statické typy mám.
Jenom vykonost. A bezpecnost. A moznost refaktorovat s podporou nastroju. A lepsi code completion. A snazsi TDD.

- Bezpečnost? To je jen iluze, která není ničím podložena.
- Možnost refaktorovat je stejná. Nevidím výhodu statického typování.
- Lepší code completion je jen dáno konkrétním použitým IDE. Ve Vimu je to jedno, tam vítězí dynamické typování.

Dynamicky typovaný jazyk se lépe čte, vlastně ke čtení ty typy ani nepotřebuji. Hodí se do hlavičky metod a funkcí - tam je dávám, protože programuji proti rozhraní, které je vyžaduje.

SB

Re:Co si myslíte o OOP?
« Odpověď #393 kdy: 04. 01. 2019, 14:25:43 »
Zapouzdření nemusí být fyzické. Stačí, když programátor nepřistupuje z vnějšku k atributům instance, a to ani prostřednictvím getterů či setterů.

Zapouzdření je nezávislé na programátorovi. Nemíním tu rozjíždět flamevár, už se to tu řešilo. Já uznávám pouze Kayovo OOP, a ten v tom má jasno.

Python je multiparadigmatickým jazykem, neobjektové konstrukce sice působí divoce, ale jsou tam. Žádný jazyk není dokonalý. Třídní (statické?) metody nepoužívám, takže příslušné anotace ani nemusím řešit.

Multiparadigmatismus by nevadil, kdyby byl přínosem. Jestliže zde lze plnohodnotně operaci nahradit zasláním zprávy objektu, je zde imperativní paradigma navíc, což samo o sobě vůbec není zadarmo - vyžaduje mimo implementace paradigmatu i implementaci spolupráce paradigmat, což samo o sobě komplikuje jazyk => porušení KISS.

Asi není, ale proč vyrábět další poprasený jazyk a spálit se znovu?

Třídní metody mají svoje rozsáhlé užití, proto by jejich implementace měla nějak vypadat. (Pozor, třídní a statický jsou 2 různé věci bastardizací OOP považované za jedno.)

operator

Re:Co si myslíte o OOP?
« Odpověď #394 kdy: 04. 01. 2019, 14:29:56 »
No LOL. Staticke typy vznikly za ucelem vykonostni optimalizace, pro jednoduchou a rychlou praci s pameti..  Navzdory tomu spousta jejich priznivcu je presvedcena, ze jejich smysl je zajistit bezchybnost aplikace a z nich potom padaji obdobne nesmyslne hlasky, ze kdyz program proleze kompilatorem, tak je hotovo.

Jako starý Pythonista musím nesouhlasit. Stačí blbá číselná konstanta (v Pythonu už je naštěstí enum), máš dvě sady číselných konstant, někdo se sekne, napíše něco podobného (našeptávání ve Vimu nebo v IDE) a chyba je na světě. To jsem bohužel viděl v praxi. A jelikož těch konstant můžeš mít desítky a jelikož to špatné číslo může nasekat paseku, která na první pohled není hned vidět, testy to pravděpodobně nevyřeší. Nehledě k tomu, že testy zcela obecně nezaručují korektnost aplikace ve všech situacích. Tady by explicitní typ a la Haskell vyřešil úplně všechno.

Dále ta Tvoje naprosto nekonstruktivní poznámka o účelu statických jazyků - jasně, u trošku inteligentnějších asemblerů (C a spol.) to není nic jiného, než přiblížení železu, jenže u moderních, dobře psaných jazyků typy pomáhají přesnému vyjadřování a kontrole korektnosti. To vidí každý, kdo zažil v akci *ML, Haskell, Rust atd. a nemá klapky na očích. Jazyky typu C mají navíc to typování úplně špatně (přetypování ukazatelů, hloupá sémantika boolovských operací). A Python, bohužel, z Céčka pár těch nesmyslů přebral (sémantika boolovských operací, před verzí 3 bylo dokonce možno porovnávat číslo a None, to byl teda nápad!)

Takže otázka nezní, co bylo původním záměrem statických jazyků, ale co přinášejí navíc a v čem samozřejmě mohou mít nevýhody. Zbytek Tvého příspěvku necituju, ale vzhledem k tomu, že explicitně zmiňuješ C, doporučuju trochu pokory a samostudia.
Jako stary pythonista bys mel vedet, ze python konstanty nema.  Kdyz mas dve sady cisel a nechces aby doslo k jejich zamene, staci si je otypovat. To slo delat vzdy a enum v pythonu nedela nic jineho, je to jen preddefinovana trida za timto ucelem. Staticke typy k tomu nepotrebujes a testy ti to odhali, kdyz budou dobre, take muzes pouzit typing.

Delas tu chybu, ze si pletes obecne typy a staticke typy. Typy aby plnily svou kontrolni funkci nemusi byt staticke a ani to neni zadouci, je to omezujici a dela to program slozitejsi, rozumej nachylnejsi k chybam. Jedine plus pro staticke typy je vyssi vykon, zaplaceny vyssi slozitosti. Jazyky typu C maji slabe typovani, tvrditvze to je spatne je velmi odvazne, ale je to hezky doklad toho, ze _staticke_ typovani ma jiny ucel. Doslo by ti to rychleji, kdyby ses nasnazil mavnout rukou nad tim, proc vubec staticke typy vznikly, tento duvod nepominul. Pak bys jim neprisuzoval ucel, ktery nemaji.



Re:Co si myslíte o OOP?
« Odpověď #395 kdy: 04. 01. 2019, 14:36:38 »
- Bezpečnost? To je jen iluze, která není ničím podložena.
- Možnost refaktorovat je stejná. Nevidím výhodu statického typování.
- Lepší code completion je jen dáno konkrétním použitým IDE. Ve Vimu je to jedno, tam vítězí dynamické typování.

Dynamicky typovaný jazyk se lépe čte, vlastně ke čtení ty typy ani nepotřebuji. Hodí se do hlavičky metod a funkcí - tam je dávám, protože programuji proti rozhraní, které je vyžaduje.

Ze nepouzivas IDE je ciste tvuj problem. Rozdil je v tom, ze IDE se statickym typovanim moznost ma, bez ne.

Bezpecnost samozrejme neni zadna iluze. Neni stoprocentni, ale pomerne dost chyb se proste udelat neda (nebo jen za cenu urciteho na prvni pohled patrneho nasili)

Refaktoring meles porad dokola a porad spatne. Mas-li dve metody stejneho jmena v ruznych hierarchiich, tak bez statickeho typovani neudelas rename jen jedne z nich. Trivialni priklad. Ze jsi v refaktorovani skoncil u regexpu je opet jen tva omezenost.

operator

Re:Co si myslíte o OOP?
« Odpověď #396 kdy: 04. 01. 2019, 14:44:02 »
Fakt nechápu, co tu řešíte. Když vemu ten úžasný Python, tak pokud mám methodu:
Kód: [Vybrat]
def get_record(self, data):
Tak co ta metoda vrací? A co jí mám poslat? Fakt někdo chce takový jazyk používat na víc než na hraní a skriptíky?

To je prece popsane v dokumentaci k te funkci. Samotna znalost typu te k pochopeni funkce a jak ji pouzivat nepriblizuje nijak vic. I kdybys vedel, ze int je cislo, porad bez dokumentace nevis jake cislo a co znamena.  Ano, dynamicke jazyky se pouzivaji na vic veci, nez hrani se skriptiky.

Re:Co si myslíte o OOP?
« Odpověď #397 kdy: 04. 01. 2019, 14:46:55 »
Fakt nechápu, co tu řešíte. Když vemu ten úžasný Python, tak pokud mám methodu:
Kód: [Vybrat]
def get_record(self, data):
Tak co ta metoda vrací? A co jí mám poslat? Fakt někdo chce takový jazyk používat na víc než na hraní a skriptíky?

To je prece popsane v dokumentaci k te funkci. Samotna znalost typu te k pochopeni funkce a jak ji pouzivat nepriblizuje nijak vic. I kdybys vedel, ze int je cislo, porad bez dokumentace nevis jake cislo a co znamena.  Ano, dynamicke jazyky se pouzivaji na vic veci, nez hrani se skriptiky.

Teoreticky. Prakticky treba kdyz mas getXs(), tak podle typu vis, zda mohou byt xka duplicitni (list vs. set).

Inkvizitor

Re:Co si myslíte o OOP?
« Odpověď #398 kdy: 04. 01. 2019, 14:52:33 »
Jako stary pythonista bys mel vedet, ze python konstanty nema.  Kdyz mas dve sady cisel a nechces aby doslo k jejich zamene, staci si je otypovat. To slo delat vzdy a enum v pythonu nedela nic jineho, je to jen preddefinovana trida za timto ucelem. Staticke typy k tomu nepotrebujes a testy ti to odhali, kdyz budou dobre, take muzes pouzit typing.

Delas tu chybu, ze si pletes obecne typy a staticke typy. Typy aby plnily svou kontrolni funkci nemusi byt staticke a ani to neni zadouci, je to omezujici a dela to program slozitejsi, rozumej nachylnejsi k chybam. Jedine plus pro staticke typy je vyssi vykon, zaplaceny vyssi slozitosti. Jazyky typu C maji slabe typovani, tvrditvze to je spatne je velmi odvazne, ale je to hezky doklad toho, ze _staticke_ typovani ma jiny ucel. Doslo by ti to rychleji, kdyby ses nasnazil mavnout rukou nad tim, proc vubec staticke typy vznikly, tento duvod nepominul. Pak bys jim neprisuzoval ucel, ktery nemaji.

Je to marný, s Tebou se nedomluvím. Od zítřka kamarádím s Kitem.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Co si myslíte o OOP?
« Odpověď #399 kdy: 04. 01. 2019, 15:03:58 »
... a nemusime type checkeru vysvetlovat nektere situace.
Tak, že nepoužití typů je jednodužší pro autora jazyka, to je tak nějak jasné. Ale tady mi tvrdí, že to má výhody pro někoho, kdo ten jazyk bude používat.

V tom co jsem psal jsem mel na mysli programatora. Napriklad nemusim type checkeru v Haskellu vysvetlovat, ze zadany retezcovy literal ma byt typu Text a nikoli typu String. (A o existenci OverloadedStrings vim, jde o obecny problem.)
To beru.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Co si myslíte o OOP?
« Odpověď #400 kdy: 04. 01. 2019, 15:06:03 »
Ale ať nad tím dumám jak dumám, tak mi vychází, že dynamické typování je znouzecnost. Nemá žádné benefity. Pletu se?
Se zkvalitněním inference výhody trochu ubývají. Ale pár bys jich našel. Například když potřebuješ někde na zkoušku nějaký typ změnit, může ti probublat do spousty kódu, takže to musíš změnit i na spoustě mít, který vůbec spouštět nechceš. Je to podobný jako s IO v Haskellu - nemůžeš si někam jenom tak narychlo dát nějaký debug výpis...

Nebo jinak: Kotím javový kód. Mám 5 věcí rozdělaných (např. v TDD standard), ale dokud to nebudu mít alespoň formálně (tedy i typově, což samo o sobě nestačí) správně, tak to nepřeložím. Takže to nějak ojebu (doplním kraviny, pozakomentuju - krásný příklad na situaci, kdy kód funguje špatně, ale překladem prošel, takže jej někteří považují za správný!), abych mohl vyzkoušet TU JEDNU VĚC, co jsem potřeboval.
Ale jo, to už tu bylo. Dokonce jsem to uváděl jako jeden ze scénářů, kdy je dynamické typování lepší HNED V OTÁZCE.

operator

Re:Co si myslíte o OOP?
« Odpověď #401 kdy: 04. 01. 2019, 15:08:18 »
Fakt nechápu, co tu řešíte. Když vemu ten úžasný Python, tak pokud mám methodu:
Kód: [Vybrat]
def get_record(self, data):
Tak co ta metoda vrací? A co jí mám poslat? Fakt někdo chce takový jazyk používat na víc než na hraní a skriptíky?

Tak za prvé by měla mít metoda dokumentační komentář a za druhé se dají přidat typy do signatury. https://docs.python.org/3/library/typing.html

Proč by ho měla mít? Když se dobře jmenuje, tak přesně víš, co dělá. Může ho mít, ale nevím, proč bych do něj měl dávat typ?

A proč bych je tam přidával, když tu všichni píšou, že nejsou potřeba?

Jen mě to zajímá, fakt do toho nechci rýt. Dynamické typování zřejmě žádné výhody nemá a celé tohle vlákno to akorát potvrzuje. Takže bych rád věděl, jak to funguje a jak právě dynamičtí programátoři přemýšlí a jak fungují. Třeba bych tomu přišel na chuť taky. Pokud ale nevím, co posílat za typy, tak bohužel v tom dělat neumím.
V pythonu se z dokumentacnich retezcu mj. generuje dokumentace. Tva otazka tedy je, proc by mel byt program zdokumentovany. Tato dokumentace je primou soucasti programu/knihovny.

Ten typ tam muzes dat, kdyz ti to prijde vyhodne a nemusis, kdyz to je nepotreba nebo to naopak program komplikuje. Je to moznost, nikoliv povinnost. Ja je nepouzivam, ale pokud ma nekdo pocit, ze diky tomu bude mit lepsi program, tak tu moznost ma.

Dynamicke typovani vyhodu ma, je jednodussi, flexíbilnejsi a srozumitelnejsi. Staticke typovani je vlastne docela hloupe a neprirozene, je umele. Principialni rozdil mezi statickym a dynamickym typovanim je v tom, kdo nese informaci o typu, zda promenna nebo hodnota.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Co si myslíte o OOP?
« Odpověď #402 kdy: 04. 01. 2019, 15:08:40 »
Je to marný, s Tebou se nedomluvím. Od zítřka kamarádím s Kitem.
Si pomůžeš? :-P

JS

Re:Co si myslíte o OOP?
« Odpověď #403 kdy: 04. 01. 2019, 15:19:11 »
jako obvykle si každý představuje pod pojmem "typ" něco trochu (nebo i hodně) jiného
tenhle to hezky shrnul: http://tomasp.net/blog/2015/against-types/

To ovsem neni nic tak neobvykleho, ze pojem "typ" ma v programovani jiny vyznam nez v matematice. Treba pojem "funkce" ma v programovani take jiny vyznam.

Funkcionalni programovani se prave obecne snazi obe discipliny priblizit a tedy tam se snazi oba pojmy pouzivat primarne v matematickem vyznamu (coz je uzsi a formalnejsi). Ale obecne v programovani to ten vyznam, bohuzel historicky, nema.

Inkvizitor

Re:Co si myslíte o OOP?
« Odpověď #404 kdy: 04. 01. 2019, 15:41:04 »
Je to marný, s Tebou se nedomluvím. Od zítřka kamarádím s Kitem.
Si pomůžeš? :-P

Jak řekl klasik, všechno je relativní.