Co si myslíte o OOP?

mirek

Re:Co si myslíte o OOP?
« Odpověď #375 kdy: 04. 01. 2019, 11:28:57 »
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?


JS

Re:Co si myslíte o OOP?
« Odpověď #376 kdy: 04. 01. 2019, 11:30:39 »
Funkcionální jazyky neznám, ale z toho, co jsem zatím viděl, řeší výpočet přesně opačně.
- funkce popisují změny stavu
- bez stavu nemají smysl
- jsou neoddělitelné

Jediný rozdíl je, že ten stav je vně.

- Funkce přece nepopisují změny stavu, ale transformují vstupní data na výstupní. Objekty nemusí měnit svůj stav a mnohé jsou zcela immutable.
- Funkce mají smysl i bez stavu. Co třeba sinus nebo logaritmus? Kde mají ten stav? Výstup se neukládá tam, kde dříve byl vstup, ale posílá se dál.
- V OOP jsou instance navázány na metody. U funkcí se data volně přiřazují přes parametry dle potřeby

Netvrdím, že tu není podobnost, dokonce se v OOP dá mírně inspirovat z FP, ale těch rozdílů je docela dost. Ve FP je docela kladen důraz na typování, zatímco v OOP není podstatné.

Moc nechapu, co tu resite. OOP a FP jsou dualni - je mozne z jednoho udelat druhe pomoci IoC. (Ale fakt je, ze me ten FP pristup prijde prehlednejsi. Je to vec vkusu.) S typovanim FP az tak moc nesouvisi - prvni FP jazyk - lambda kalkul - byl beztypovy (ale take v dusledku toho nebyl silne normalizujici, coz je.. neprijemne).

rumcajz

Re:Co si myslíte o OOP?
« Odpověď #377 kdy: 04. 01. 2019, 11:31:35 »
Python je srackoidny jazyk. Na C# sa nechyta

JS

Re:Co si myslíte o OOP?
« Odpověď #378 kdy: 04. 01. 2019, 11:34:03 »
... 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.)

JS

Re:Co si myslíte o OOP?
« Odpověď #379 kdy: 04. 01. 2019, 11:35:41 »
Smysl statických typů je zajistit, aby se něco takového nestalo.
Smyslem statickych typu je vykonostni optimalizace.

Smyslem je oboji a jeste jedna vec navic - staticky dispatch na zaklade typu. Typy maji v programovani tri funkce - kontrolu parametru, volbu datove struktury, a dispatch.


anonym

Re:Co si myslíte o OOP?
« Odpověď #380 kdy: 04. 01. 2019, 11:38:50 »
Hosi to je hrozne tohleto, to je zumpa toto...

SB

Re:Co si myslíte o OOP?
« Odpověď #381 kdy: 04. 01. 2019, 12:28:34 »
V JVM, co jsem se dočetl, hot reloading jde, ale nemůžeš měnit signatury ani odstraňovat nebo přidávat metody. Takže vlastně můžeš jenom měnit implementaci existujících věcí.

A to je právě jedním z důsledků toho, že Java nemá zasílání zpráv, ale volání funkcí.

rumcajz

Re:Co si myslíte o OOP?
« Odpověď #382 kdy: 04. 01. 2019, 12:41:08 »
Hosi, co tak ist dokoncit si strednu skolu?

Re:Co si myslíte o OOP?
« Odpověď #383 kdy: 04. 01. 2019, 12:45:52 »
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


mirek

Re:Co si myslíte o OOP?
« Odpověď #384 kdy: 04. 01. 2019, 12:55:43 »
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.

SB

Re:Co si myslíte o OOP?
« Odpověď #385 kdy: 04. 01. 2019, 13:19:15 »
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.

v

Re:Co si myslíte o OOP?
« Odpověď #386 kdy: 04. 01. 2019, 13:22:06 »
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/

SB

Re:Co si myslíte o OOP?
« Odpověď #387 kdy: 04. 01. 2019, 13:26:43 »
No tak to z chybného předpokladu vyvozuješ chybný závěr, no, co na to říct jiného? REPL máš třeba v pythonu a code reloading tam dělat nejde (AFAIK). Existující kód prostě běží dál, změny se projeví jenom v nově nataženém.
Uz je to davno co sem delal s pythonem. Ale melo by to jit.

V PyCharmu před necelým rokem mi to nešlo (přestože bych to fakt docenil). Proč nevím.

Kit

Re:Co si myslíte o OOP?
« Odpověď #388 kdy: 04. 01. 2019, 13:30:29 »
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.

Té metodě pošleš data a vrátí record. Jak prosté, typy ani signatury k tomu nejsou potřebné.

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.

Re:Co si myslíte o OOP?
« Odpověď #389 kdy: 04. 01. 2019, 13:45:14 »
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.

Té metodě pošleš data a vrátí record. Jak prosté, typy ani signatury k tomu nejsou potřebné.

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.

Co vlastne nam ti Rimane prinesli?