Co si myslíte o OOP?

v

Re:Co si myslíte o OOP?
« Odpověď #945 kdy: 13. 01. 2019, 17:43:38 »
Snažit se někoho přesvědčit, že tahle metoda není 100% je na hranici paranoi -- pokud nejsi papoušek.
nebo transgendered


SB

Re:Co si myslíte o OOP?
« Odpověď #946 kdy: 15. 01. 2019, 11:26:25 »
Ne, Python opravdu není "multiparadigmatický", to je marketingový blábol. Ono v principu vůbec nic takového jako "multiparadigmatický" neexistuje, protože ta paradigmata jsou právě o tom, co ti jazyk nedovolí udělat, ne o tom, co ti dovolí. Když něco z principu nejde -> máš jistotu, že k tomu nedošlo -> máš zaručenou informaci.

Z tohoto pohledu Python není OOP, protože u něj neplatí, že "z principu nejde" měnit vnitřní stav objektu zvenku. Troufnete si to vysvětlovat místním mistrům?

Re:Co si myslíte o OOP?
« Odpověď #947 kdy: 15. 01. 2019, 11:39:01 »
Z tohoto pohledu Python není OOP, protože u něj neplatí, že "z principu nejde" měnit vnitřní stav objektu zvenku. Troufnete si to vysvětlovat místním mistrům?
Určitě nemá "ukázkové", "vzorové", "čisté" OOP. Má OOP (a všechno ostatní) "pragmatické" nebo "good enough". Což je v praxi často přesně to, co lidi chtějí (viz https://en.wikipedia.org/wiki/Worse_is_better)

gll

  • ****
  • 429
    • Zobrazit profil
    • E-mail
Re:Co si myslíte o OOP?
« Odpověď #948 kdy: 15. 01. 2019, 11:41:16 »
Ne, Python opravdu není "multiparadigmatický", to je marketingový blábol. Ono v principu vůbec nic takového jako "multiparadigmatický" neexistuje, protože ta paradigmata jsou právě o tom, co ti jazyk nedovolí udělat, ne o tom, co ti dovolí. Když něco z principu nejde -> máš jistotu, že k tomu nedošlo -> máš zaručenou informaci.

Z tohoto pohledu Python není OOP, protože u něj neplatí, že "z principu nejde" měnit vnitřní stav objektu zvenku. Troufnete si to vysvětlovat místním mistrům?

co znamená měnit stav z venku? Přiřazení v Pythonu zavolá metodu __setattr__. Tyhle diskuze vždy skončí dohadováním o slovíčkách.

Kit

Re:Co si myslíte o OOP?
« Odpověď #949 kdy: 15. 01. 2019, 11:45:17 »
Ne, Python opravdu není "multiparadigmatický", to je marketingový blábol. Ono v principu vůbec nic takového jako "multiparadigmatický" neexistuje, protože ta paradigmata jsou právě o tom, co ti jazyk nedovolí udělat, ne o tom, co ti dovolí. Když něco z principu nejde -> máš jistotu, že k tomu nedošlo -> máš zaručenou informaci.
Z tohoto pohledu Python není OOP, protože u něj neplatí, že "z principu nejde" měnit vnitřní stav objektu zvenku. Troufnete si to vysvětlovat místním mistrům?

Když někdo zvenku zavolá setter, tak také mění stav objektu zvenku. Používání setterů je tedy v rozporu s principy OOP.


SB

Re:Co si myslíte o OOP?
« Odpověď #950 kdy: 15. 01. 2019, 13:42:48 »
Když někdo zvenku zavolá setter, tak také mění stav objektu zvenku. Používání setterů je tedy v rozporu s principy OOP.

Setter je jako každá metoda uvnitř objektu, takže se nejedná o změnu zvenku. Stav je bez existujícího prostředníka zvenku nedostupný.

SB

Re:Co si myslíte o OOP?
« Odpověď #951 kdy: 15. 01. 2019, 13:44:08 »
co znamená měnit stav z venku? Přiřazení v Pythonu zavolá metodu __setattr__. Tyhle diskuze vždy skončí dohadováním o slovíčkách.

O způsobech implementace řeč nebyla.

Re:Co si myslíte o OOP?
« Odpověď #952 kdy: 15. 01. 2019, 14:36:42 »
Setter je jako každá metoda uvnitř objektu, takže se nejedná o změnu zvenku. Stav je bez existujícího prostředníka zvenku nedostupný.
Mně teda přijde, že to je spíš otázka designová/koncepční. Buď k objektu přistupuju jako ke structu/dementovi, kterého polopaticky řídím, nebo k němu přistupuju jako k dospělému, kterého o něco žádám a sděluju mu, jaké parametry odpovědi by se mi líbily. Nepřijde mi, že by tam byla ostrá hranice.

Setter

Re:Co si myslíte o OOP?
« Odpověď #953 kdy: 15. 01. 2019, 15:07:32 »
Používání setterů je tedy v rozporu s principy OOP.
https://en.wikipedia.org/wiki/Setter ?

operator

Re:Co si myslíte o OOP?
« Odpověď #954 kdy: 15. 01. 2019, 15:48:26 »
Odpor vuci dynamickym jazykum zazniva od tech, kteri se v nich pokousi programovat staticky, protoze to jinak neumi.
Jenže svět, který se snažíme v IT modelovat/automatizovat má spíše charakter statických typů....Nikdo se nejmenuje 123456 nebo 10.60 a na výplatu dostanu vždy nějakou částku a ne stokorunčeských...takže oprávněný požadavek dynamických typů zpravidla zaznívá jen tehdy, když někdo něco generalizoval-sloučil. Navíc zákazník zpravidla požaduje ukládat data to staticky typovaných databází...v tomto případě nedává moc smysl zavádět do systému nějakou dynamickou složku.
Ve statickem jazyku jsi nucen svet modelovat staticky, ale on ve skutecnosti staticky neni, kdyz nic jineho, vyviji se v case a je to prave zakaznik, kdo potrebuje aplikaci prizpusobovat.

operator

Re:co si myslite o oop?
« Odpověď #955 kdy: 15. 01. 2019, 15:49:22 »

P.S. Kadete, k těm typům. Je lepší hodinu bojovat se statickými typy, než týden hledat, proč se to číslo chová divně. Schválně, mám SessionID 231479973001 a používám to jako číslo ve formátu UINT64. Co dostanu, pokud ho první knihovna interně konvertuje do UINT32 (protože na ni od dob 32b nikdo nesáhl), druhá do INT64 (protože signed považuje za nativní formát) a pak zpátky do UINT64? Jaký budeš mít SessionID na konci toho procesu? A uspokojí tě to? Ale co, hlavní je, že ani ty tři warningy při buildu nedostaneš... A to se počítá.
Takže na začátku parsování/verifikace dat na jednom místě, následná logika pak ví, že data jsou validní a jak jsou zabalený. A pokud jsou zabalený jinak, kompilátor to zatepla nabonzuje...

Bez urazky, ale kdyz jsi prase a pouzivas praseci knihovny ktery ti hloupy session id prezvejka do tolika formatu, tak se nedivim, ze potrebujes statickou kontrolu. Ja bych taky odmitnul pracovat na prasecim Python projektu, kdybych tam videl praseciny podobnyho typu. Taky bych byl radsi kdyby to bylo staticky otypovany.

Jenze ja bych vzal ten prasecak, pokusil se najit co se to snazi delat, tj. najit vstupy a vystupy a jak to komunikuje s okolnim svetem, a vyhazet 90% toho chliva ven.

Presne to taky delam ve svy praxi. V tvym pripade bych vyhazel vsechny th black box knihovnh co mi znasilnujou session id, session id bych nahradil pouhym stringem, protoze nepotrebuju delat aritmetiku ani pocitatncialni rovnice se session id.

Kod bych zredukoval na desetinu mozna min ve zlomku casu. To co ostatnim trva mesice, ja dodavam do tydne. Protoze dokazu rychle najit co je v programu potreba a co je balast.

Kdyz to dotahnu do konce a klient je spokojenej muzu zacit konecne optimalizovat. Takze vezmu kritickou sekci a prepisu ji v Cythonu, v C nebo necim podobnym. Nebo napisu kritickou sekci jako cistej C, java program a pospojuju to unix pipelinou. Je mi to prakticky jedno. A vis co. Dneska jsou komoy tak rychly, ze klient radsi zaplati za dve dalsi masiny misto prepisu do rychlejsiho jazyka.

Presne tak.

operator

Re:co si myslite o oop?
« Odpověď #956 kdy: 15. 01. 2019, 15:54:56 »
Bez urazky, ale kdyz jsi prase a pouzivas praseci knihovny ktery ti hloupy session id prezvejka do tolika formatu, tak se nedivim, ze potrebujes statickou kontrolu...

Já preferuju vlastní kód, ale nikdo ti nezaplatí vývoj vlastních knihoven. Vždycky používáš kód třetí strany a inspekce od kompilátoru se vždycky hodí (resp. je zadarmo).  "Model světa" totiž musíš přechrchlat na byty, aby jim stroj rozuměl a to jsou najednou chyby jak víno. Zaokrouhlování u floatů, přetečení nebo podtečení hodnot,... Prostě je fajn si říct, že to bude tak a ještě lepší si to restriktivně vynutit.

Btw, nemusí to být jenom staticky linkovaný knihovny, může to být kombinace několika jazyků, jedna z těch věcí může běžet na jiným fyzickým stroji,... A o to je to zákařnější - není nad to, když server má 64b hodnoty, klient 32b hodnoty a vývojář se diví. A pokud nezná typy (a s tím i tyhle pasti), tak si pěkně namlátí hubu.

Můj příklad je jenom malinká ukázka, jak to dopadá, když prasata ignorujou typy:
Krok | Typ | Dekadicky | Hexadecimálně | Podrobnosti
0 | uint64 | 231479973001 | 0x0000000035E5481489 | hodnota má 40b
1 | uint32 | 3846706313 | 0xE5481489 | přišli jsme o horních 8b hodnoty
2 | int64 | -448260983 | 0xFFFFFFFFE5481489 | bit 31 = 1 -> záporné číslo
3 | uint64 | 18446744072813029651 | 0xFFFFFFFFE5481489 | Interpretováno jako UINT64

Další past je třeba float - currency. Jak to má sakra kompilátor/interpreter poznat jenom podle toho, že jsou v parsovaným stringu číslice a mezi nima čárka? To jako podle toho, že je před tím "price="? A každej typ se přitom chová jinak...

Zkrátka, volnost typu = volnost kompilátoru = volnost chování výsledné aplikace. Typ je totiž nedílná součást popisu dat. Když kompilátor neví, co použít a jenom tak tam něco práskne, tak je něco blbě v principu.
Svet musis digitalizovat, ale nemusis mit staticka data. V dalsi casti popiras sam sebe. V pythonu bys na to mel jeden univerzalni int a tvuj problem by vubec nenastal. Takze staticke typi te pred timto problemem nechřani,míny ho zpusobuji. Korunujes to v zaveru tvrzenim, ze typ je soucasti dat. Vitej ve svete dynamickych jazyku, tam to opravdu plati.

Kit

Re:Co si myslíte o OOP?
« Odpověď #957 kdy: 15. 01. 2019, 16:47:59 »
Když někdo zvenku zavolá setter, tak také mění stav objektu zvenku. Používání setterů je tedy v rozporu s principy OOP.

Setter je jako každá metoda uvnitř objektu, takže se nejedná o změnu zvenku. Stav je bez existujícího prostředníka zvenku nedostupný.

Proto by settery měly být privátní.

operator

Re:Co si myslíte o OOP?
« Odpověď #958 kdy: 15. 01. 2019, 16:56:22 »
je dobré znát ne dva až tři jazyky, ale především dvě až tři paradigmata
V tom je prave dobry python, protoze ti umoznuje jednotliva paradigmata podle potreby prirozene kombinovat.
Tak to se podle mě velice tragicky mýlíš. Pokud chceš nějakému paradigmatu porozumět, musíš si ho vyzkoušet pokud možno v čisté podobě. Protože jenom ta tě donutí opravdu použít daný přístup a neuhýbat jinam. Tj. pokud funkcionální, tak Haskell, ne Scalu. Na Haskellu pochopíš, o co jde, a pak v praxi už můžeš vzít tu Scalu, protože to může být ze spousty důvodů praktičtější.

Ne, Python opravdu není "multiparadigmatický", to je marketingový blábol. Ono v principu vůbec nic takového jako "multiparadigmatický" neexistuje, protože ta paradigmata jsou právě o tom, co ti jazyk nedovolí udělat, ne o tom, co ti dovolí. Když něco z principu nejde -> máš jistotu, že k tomu nedošlo -> máš zaručenou informaci.

Za druhe ruzne paradigmata jsou uzitecna, ale nepotrebujes si kvuli tomu povrchne hrat s hromadou prakticky nevyuzitelnych jazyku.
Potřebuješ, protože žádný jiný způsob, jak jim porozumět, neexistuje.
Porozumění záleží na inteligenci. Kdyby si to každý musel zkoušet, nikdo to nevymyslí. Zrovna tak je to věc sebeovládání.  Ovládat se můžeš sám a nebo potřebuješ, aby někdo ovlédal tebe, ať člověk nebo jazyk nebo statické typy. Někdo radši svobodu a zodpovědnost, někdo radši totalitu a přenesení zodpovědnosti na systém. Python je multiparadigmatický. Paradigma spočívá v přístupu k věci, ne v omezení. Python ti umožňuje různé přístupy. Čisté paradigma je extremismus. Ideální je možnost výběru a flexibilního přizpůsobení se aktuálním potřebám.

Re:Co si myslíte o OOP?
« Odpověď #959 kdy: 15. 01. 2019, 17:15:33 »
Python ti umožňuje různé přístupy. Čisté paradigma je extremismus. Ideální je možnost výběru a flexibilního přizpůsobení se aktuálním potřebám.
Jasný. A i JavaScript je multiparadigmatický. A vlastně každý v současnosti existující jazyk. Protože tenhle blábol lidi naučil si myslet, že když má jazyk funkce jako first class citizens, tak je funkcionální. Až na to, že ono je to ve skutečnosti o dost  zajímavější. Jenže to nezjistíš, protože sis "funkcionálně" zaprogramoval v pythonu a nic jinýho nikdy nezkusíš. (tím nemyslím tebe osobně, ale lidi, kteří na tenhle blábol naskočili)