Co si myslíte o OOP?

operator

Re:Co si myslíte o OOP?
« Odpověď #1230 kdy: 23. 01. 2019, 06:10:59 »
Asi bych nemluvil o urovni, ale jinak ano, presne to je cil, zjednoduseni programoveho kodu. Krome toho se take zvysi efetivita tvorby programu.
Class v Javascriptu nic nezjednodušuje. Kód nezkracuje. Je to jen omáčka navíc.
Ta omacka navic je zadana, takze evidentne neco zjednodusuje. Minimalne pochopeni jazyka pro nektere programatory. Imho je to vyhodne i pro jednodussi a prehlednejsi objektovy navrh programu. Prototypova dedicnost je dobra pro DOM, tedy kdyz chces pracovat s rozsahlou a bohatou kolekci uz existujicich kolekci. Ale neni dobra, kdyz podobnou strukturu nechces jen pouzivat, ale chces ji navrhnout sam.


operator

Re:Co si myslíte o OOP?
« Odpověď #1231 kdy: 23. 01. 2019, 06:19:38 »
javascript donedávna neměl ani třídy ani moduly a nechyběly. Byly přidány hlavně z marketingových důvodů. Vše bylo objekt/slovník. Stále je, nová syntax je jen nadbytečný cukr.
Platí tedy i věta, že require, který načítá modul, byl přidán z marketingových důvodů a je to jen nadbytečný syntax sugar? A ty "marketingové důvody" znamenají, "Chceme aby to používalo více lidí, kteří nevědí, co je pro ně dobré."? Já jen aby to zaznělo pěkně naplno.

Nevim jak vypada implementace require. Ale prislo mi, ze je to jen funkce. A javascript uz koncept funkce ma, takze nic nemuzel pridavat. Kdyby museli upravit jazyk kvuli necemu, co jde implementovat pouhou funkci, pak ano, bylo by to pridani nadbytecneho cukru.

Marketingove dduvody, aby to pouzivalo vic lidi, jsou dost presne vyjadreni situace. Javascript mel prototypy vychazejici ze Selfu. To je presne co tady popisuju. Prolinkovany dicty. Nic vic. Nekdo ted pridal cukr na classy. Proc? Za me je odpoved marketing.

Pouzivas pojem marketing jako sproste slovo, ale marketing je o uspokojovani potreb. Protoze marketing == protoze to je velmi zadana vlastnost.

Syntakticky cukr neni nadbytecny. Syntakticky cukr zjednodusuje pouzivani jazyka, umoznuje psat kratsi, jednodusi, pochopitelnejsi a prehlednejsi kod. Take to muze umoznit rychlejsi beh programu.

operator

Re:Co si myslíte o OOP?
« Odpověď #1232 kdy: 23. 01. 2019, 06:31:46 »
Ja chapu potrebu schovavat. Akorat debaty o OO navrhu zacinaji tim, co schovat, zapouzdrit a zdedit, nez tim, co je vysledkem vyreseni problemu.

Kdyz jsi sam, kdo pouziva program, tak je fajn, ze si muzes vybrat tridu nebo modul nebo package nebo cokoliv k tomu ucelu. Jenze kdyz pracujes s indem, tak on si vybere jedno a ty druhy. Ja bych na to mel radsi jen jeden koncept.

V Selfu zjistili, ze je lepsi povazovat atribut stejne jako metodu. Jinak jestli se nekdo rozhoduje, jestli schovat nebo ne podle toho, co mu umoznuje jazyk, pak je otazka, jestli nema prilis svazujici jazyk.

Uvedomujes si, ze si protirecis?

Vadi ti syntakticky cukr a zaroven ti vadi, ze ind si vybere modul nebo tridu. Kdyz budes mit jazyk, kde si budes muset objekty implementovat sam z dictu, tak ten ind je bude zarucene implementovat jinak nez ty a tech moznych implementaci nebude jen trida nebo modul, bude jich prakticky nekonecne mnoho. Modul nebo trida,vto jsou ruzne abstrakce a ma smysl je mit. Ale mit nekonecne mnoho implementaci te same abstrakce, to smysl nedava. To je jeden z duvod, proc v pythonu pouzivas standardizovanou abstrakci class a ne vlastni reseni postavene nad dicty i kdyz muzes. Aby ses jednoduseji domluvil. Vsechno co ti zjednodusuje pouziti jazyka je uzitecne, nikoliv nadbytecne.


Inkvizitor

Re:Co si myslíte o OOP?
« Odpověď #1233 kdy: 23. 01. 2019, 09:53:03 »
Problem je mozna v tom, ze OOP neni programovaci paradigma, ale vypocetni model. Podobny Petriho sitim. System, kde si mnozina objektu posila zpravy, muzu naimplementovat v cemkoliv. Muzu k tomu pouzit dokonce i C++ nebo Javu, tedy jazyky s dvoji koncepci modulu, tj. modul a trida.


The AlanKay definition of OO is largely that given by CarlHewitt for the ActorsModel which is a model of computation, not a programming paradigm. AlanKay has acknowledged explicitly this derivation.

http://wiki.c2.com/?AlanKaysDefinitionOfObjectOriented

Jakkoliv nesouhlasim s nekterymi Tvymi zavery, libi se mi, ze jsi od sebe rozseknul veci, ktere se obycejne spojuji. Moduly+interfacy poskutuji elegantni reseni vetsiny veci, ktere slibuje resit OOP, jak se obycejne chape. Actor je neco (uz to tady nakousnul Mirek), co mi dava smysl jako "oklestene" vnimani objektoveho modelu. Co je opravdu z principu samostatne, necht je objekt. Zalozit celou aplikaci na "posilani zprav" mezi "objekty", to se moc neuchytilo a IMO jsou k tomu dobre duvody.

operator

Re:Co si myslíte o OOP?
« Odpověď #1234 kdy: 23. 01. 2019, 10:35:38 »

To s tím Javascriptem je docela dobrá paralela. Protože díky tomu, že Javascript neměl žádný zvláštní cukr na vytváření objektů, vzniklo pár zajímavejch článků na toto téma. Díky tomu (a taky proto, že jsem si to zkusil :-) ) je mi jasné, že v tom Pythonu je objekt opravdu jen převlečený slovník. S jednou výjimkou. Ta výjimka souvisí s dědičností a s dynamičností Pythonu - že můžeš už vytvořenému objektu přidat metodu tak, že přidáš metodu do jeho předka. A vzhledem k tomu, že něco takového opravdu, ale opravdu nechci, tak se mi to scvrkne na "objekt = dict".

To se ti scvrkava spatne. Dict je object, ale object neni dict. Jedna se o dve ruzne abstrakce, ktere dokonce ani nejsou na stejne urovni.  Objekty pouzivaji dict pro ulozeni interniho stavu, ale to neznamena, ze se sobe rovnaji.
Lisi se nejen svou abstrakci, ale i svou funkcionalitou. Pokud to nechapes, zkus pomoci dictu implementovat tyto objekty 'a', 'b' a 'c'  typu 'A' a 'B' a provest s nimi predvedene operace.

Porovname si pracnost, rychlost a prehlednost vysledku a pak pochopite, nejen ze od dictu k objektu je to hodne daleko, ale i to, ze ten synktaticky cukr je uzitecny a potrebny.

Kód: [Vybrat]
    1 class X():
    2     counter = 5                                                                               
    3
    4     def __init__(self, x=0):
    5         if  self.__class__.counter < 0:
    6             raise RuntimeError('Overflow maximum allowed instances.')
    7         self.__id = self.__class__.counter
    8         self.__class__.counter -= 1
    9         self.__x  = x
   10
   11     @property
-- 12     def x(self):                                                                               
   13         return self.__x
   14
   15     @property
-- 16     def id(self):
   17         return self.__id
   18
   19     def __iadd__(self, val):
   20         self.__x += val
   21         return self
   22
   23     def __add__(self, val):
   24         if  isinstance(val, type(self)):
   25             return self.__class__(val.x + self.__x)
   26         raise TypeError(f"unsupported operand type(s) for +: " + \
   27                         f"'{type(self).__name__}' and '{type(a).__name__}'")
   28
   29     def __repr__(self):
   30         return f'{self.__x} of type: {type(self).__name__} and id: {self.__id}'
   31
-- 32 class A(X):
   33     pass
   34
-- 35 class B(X):
   36     pass
   37
   38 # vytvoreni objektu 'a', 'b' a 'c' a operace s nimi
-- 39 a = A()
-- 40 b = B(7)
   41
   42 print(a.x)    # 0
   43 print(a.id)   # 5
   44 print(a)      # 0 of type: A and id: 5
   45 print(b)      # 7 of type: B and id: 5
   46
   47 a += 10
-- 48 c = a + a
   49 print(c)      # 20 of type: A and id: 4
   50 print(a + c)  # 30 of type: A and id: 3
   51
>> 52 a.id = 1      # AttributeError, zakaz zapisu do atributu
-- 53 a + b         # Type error, secist lze jen objekty stejneho typu
   54 a += a        # Type error, pridat jde jen int hodnota
-- 55


operator

Re:Co si myslíte o OOP?
« Odpověď #1235 kdy: 23. 01. 2019, 12:01:12 »
Problem je mozna v tom, ze OOP neni programovaci paradigma, ale vypocetni model. Podobny Petriho sitim. System, kde si mnozina objektu posila zpravy, muzu naimplementovat v cemkoliv. Muzu k tomu pouzit dokonce i C++ nebo Javu, tedy jazyky s dvoji koncepci modulu, tj. modul a trida.


The AlanKay definition of OO is largely that given by CarlHewitt for the ActorsModel which is a model of computation, not a programming paradigm. AlanKay has acknowledged explicitly this derivation.

http://wiki.c2.com/?AlanKaysDefinitionOfObjectOriented
OOP je programovaci paradigma. Je to abstrakce, ktera ti umoznuje se na program divat/uvazovat jinym zpusobem. To jestli jde nebo nejde simulovat jinymi prostredky je nepodstatne. Pokud reknes, me abstrakce nezajima, pak se muzes vratit ke strojovemu kodu, protoze vsechno ostatni je vice ci mene pokrocila abstrakce nad nim a v nem jde pouzit/udelat vsechno, akorat to bude dost neprehledne.

gll

  • ****
  • 429
    • Zobrazit profil
    • E-mail
Re:Co si myslíte o OOP?
« Odpověď #1236 kdy: 23. 01. 2019, 12:57:55 »
S jednou výjimkou. Ta výjimka souvisí s dědičností a s dynamičností Pythonu - že můžeš už vytvořenému objektu přidat metodu tak, že přidáš metodu do jeho předka. A vzhledem k tomu, že něco takového opravdu, ale opravdu nechci, tak se mi to scvrkne na "objekt = dict".

to v Pythonu nejde. To si asi pleteš s Javascriptem.
Ty jo, zaváhal jsem, ale:
Kód: [Vybrat]

class A:
pass

class B (A):
def boo(self):
return 'B'

def goo(self):
return 'C'

b = B()
print(dir(b))
A.goo = goo
print(dir(b))
print b.goo
print b.goo()

máš pravdu. Nejde to jen u vestavěných typů, kde se to občas hodilo.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Co si myslíte o OOP?
« Odpověď #1237 kdy: 23. 01. 2019, 13:33:51 »
v mém scénáři začnu se strukturovaným AST (podmínky + cykly, fakt strom) a přeložím ho na seznam příkazů se skokama (tohle jsem měl původně na mysli, když jsem psal AST) a tady už jsou cykly kdy se příkaz skoku odkazuje na jiný příkaz ve stejném seznamu

To bude ono. Já tam žádné skoky ani cykly neměl.
Díky.

Kadet

Re:Co si myslíte o OOP?
« Odpověď #1238 kdy: 23. 01. 2019, 13:45:33 »
javascript donedávna neměl ani třídy ani moduly a nechyběly. Byly přidány hlavně z marketingových důvodů. Vše bylo objekt/slovník. Stále je, nová syntax je jen nadbytečný cukr.
Platí tedy i věta, že require, který načítá modul, byl přidán z marketingových důvodů a je to jen nadbytečný syntax sugar? A ty "marketingové důvody" znamenají, "Chceme aby to používalo více lidí, kteří nevědí, co je pro ně dobré."? Já jen aby to zaznělo pěkně naplno.

Nevim jak vypada implementace require. Ale prislo mi, ze je to jen funkce. A javascript uz koncept funkce ma, takze nic nemuzel pridavat. Kdyby museli upravit jazyk kvuli necemu, co jde implementovat pouhou funkci, pak ano, bylo by to pridani nadbytecneho cukru.

Marketingove dduvody, aby to pouzivalo vic lidi, jsou dost presne vyjadreni situace. Javascript mel prototypy vychazejici ze Selfu. To je presne co tady popisuju. Prolinkovany dicty. Nic vic. Nekdo ted pridal cukr na classy. Proc? Za me je odpoved marketing.

Pouzivas pojem marketing jako sproste slovo, ale marketing je o uspokojovani potreb. Protoze marketing == protoze to je velmi zadana vlastnost.

Syntakticky cukr neni nadbytecny. Syntakticky cukr zjednodusuje pouzivani jazyka, umoznuje psat kratsi, jednodusi, pochopitelnejsi a prehlednejsi kod. Take to muze umoznit rychlejsi beh programu.

Sproste slovo.. to zalezi na pohledu pozorovatele. Ja hovorim neutralne pokud mozno.

Syntakticky cukr je tady jako kafe nebo jako droga. Kafe ti umozni zustat vzhuru dele dneska, ale na ukor spanku zitra. Cukr ti umozni pochopit jazyk driv dneska ale na ukor toho, ze kdyz budes chtit udelat neco slozitejsiho, tak to nepujde, protoze jazykove bozstvo rozhodlo, ze se budou pouzivat classy a ne nic jinyho.

Kadet

Re:Co si myslíte o OOP?
« Odpověď #1239 kdy: 23. 01. 2019, 13:53:39 »
Ja chapu potrebu schovavat. Akorat debaty o OO navrhu zacinaji tim, co schovat, zapouzdrit a zdedit, nez tim, co je vysledkem vyreseni problemu.

Kdyz jsi sam, kdo pouziva program, tak je fajn, ze si muzes vybrat tridu nebo modul nebo package nebo cokoliv k tomu ucelu. Jenze kdyz pracujes s indem, tak on si vybere jedno a ty druhy. Ja bych na to mel radsi jen jeden koncept.

V Selfu zjistili, ze je lepsi povazovat atribut stejne jako metodu. Jinak jestli se nekdo rozhoduje, jestli schovat nebo ne podle toho, co mu umoznuje jazyk, pak je otazka, jestli nema prilis svazujici jazyk.

Uvedomujes si, ze si protirecis?

Vadi ti syntakticky cukr a zaroven ti vadi, ze ind si vybere modul nebo tridu. Kdyz budes mit jazyk, kde si budes muset objekty implementovat sam z dictu, tak ten ind je bude zarucene implementovat jinak nez ty a tech moznych implementaci nebude jen trida nebo modul, bude jich prakticky nekonecne mnoho. Modul nebo trida,vto jsou ruzne abstrakce a ma smysl je mit. Ale mit nekonecne mnoho implementaci te same abstrakce, to smysl nedava. To je jeden z duvod, proc v pythonu pouzivas standardizovanou abstrakci class a ne vlastni reseni postavene nad dicty i kdyz muzes. Aby ses jednoduseji domluvil. Vsechno co ti zjednodusuje pouziti jazyka je uzitecne, nikoliv nadbytecne.

Mohl bys mi ukazat konkretni dve teze ve kterych si protirecim?

Ta spoluprace s indem je organizacni problem. Pokud ho nedokazu vyresit na urovni lidi tak me zadna trida nebo modul nespasi jinak pozdrav panbu. Vratim se k moji starsi tezi. Praseci kod a vic lidi co na nem pracuje? Vyres nejdriv problem praseciho kodu nez budes hledat nastroj co omezi ostatni cleny tymu tak aby neudelaly radsi zadnou chyby a taky zadny pokrok.

Ja v pythonu classy ani pokud mozno nepouzivam btw. Pro me je python jen host language pro vytvoreni lepsiho jazyka (embedded dsl), napr. proto ze python ma dobrej ekosystem knihoven.

Kadet

Re:Co si myslíte o OOP?
« Odpověď #1240 kdy: 23. 01. 2019, 13:59:10 »
Problem je mozna v tom, ze OOP neni programovaci paradigma, ale vypocetni model. Podobny Petriho sitim. System, kde si mnozina objektu posila zpravy, muzu naimplementovat v cemkoliv. Muzu k tomu pouzit dokonce i C++ nebo Javu, tedy jazyky s dvoji koncepci modulu, tj. modul a trida.


The AlanKay definition of OO is largely that given by CarlHewitt for the ActorsModel which is a model of computation, not a programming paradigm. AlanKay has acknowledged explicitly this derivation.

http://wiki.c2.com/?AlanKaysDefinitionOfObjectOriented

Jakkoliv nesouhlasim s nekterymi Tvymi zavery, libi se mi, ze jsi od sebe rozseknul veci, ktere se obycejne spojuji. Moduly+interfacy poskutuji elegantni reseni vetsiny veci, ktere slibuje resit OOP, jak se obycejne chape. Actor je neco (uz to tady nakousnul Mirek), co mi dava smysl jako "oklestene" vnimani objektoveho modelu. Co je opravdu z principu samostatne, necht je objekt. Zalozit celou aplikaci na "posilani zprav" mezi "objekty", to se moc neuchytilo a IMO jsou k tomu dobre duvody.

Moje zavery nejsou zavery ale pouze tvrzeni ktera jsou pokud mozno vyvratitelna (falsifiability). Jinak receno jdu s kuzi na trh a usnadnuju vam ostatnim mi moje tvrzeni lehceji vyvratit.

Rad bych aby mi moje tvrzeni lidi zacali rozebirat na padrt a konstruktivne vyvracet. Casto moje 'zavery' zde ale ocividne lidi urazi.

Aplikace postavena na posilani zprav. To je pohled na vec, ne vec implementace. Kdyz mam distribuovany system z vic pocitacu, tak mi nezbyde nez mezi nimi skutecne poslat pres sit nejakou zpravu. Kdyz se podivam dovnitr jedny masiny nebo dovnitr konkretniho programu, muzu rict, ze zavolani metody je taky poslani zpravy.

Kadet

Re:Co si myslíte o OOP?
« Odpověď #1241 kdy: 23. 01. 2019, 14:04:04 »
Problem je mozna v tom, ze OOP neni programovaci paradigma, ale vypocetni model. Podobny Petriho sitim. System, kde si mnozina objektu posila zpravy, muzu naimplementovat v cemkoliv. Muzu k tomu pouzit dokonce i C++ nebo Javu, tedy jazyky s dvoji koncepci modulu, tj. modul a trida.


The AlanKay definition of OO is largely that given by CarlHewitt for the ActorsModel which is a model of computation, not a programming paradigm. AlanKay has acknowledged explicitly this derivation.

http://wiki.c2.com/?AlanKaysDefinitionOfObjectOriented
OOP je programovaci paradigma. Je to abstrakce, ktera ti umoznuje se na program divat/uvazovat jinym zpusobem. To jestli jde nebo nejde simulovat jinymi prostredky je nepodstatne. Pokud reknes, me abstrakce nezajima, pak se muzes vratit ke strojovemu kodu, protoze vsechno ostatni je vice ci mene pokrocila abstrakce nad nim a v nem jde pouzit/udelat vsechno, akorat to bude dost neprehledne.

Ja jsem nekde rek, ze me nezajima abstrakce?

Kdyz jsme u strojoveho kodu. Kod 'nizke urovne abstrakce' a strojovy kod moderniho cpu pripominaji uz spis python nebo neco vysokourovnovyho.

https://queue.acm.org/detail.cfm?id=3212479

operator

Re:Co si myslíte o OOP?
« Odpověď #1242 kdy: 23. 01. 2019, 14:13:58 »
Sproste slovo.. to zalezi na pohledu pozorovatele. Ja hovorim neutralne pokud mozno.

Syntakticky cukr je tady jako kafe nebo jako droga. Kafe ti umozni zustat vzhuru dele dneska, ale na ukor spanku zitra. Cukr ti umozni pochopit jazyk driv dneska ale na ukor toho, ze kdyz budes chtit udelat neco slozitejsiho, tak to nepujde, protoze jazykove bozstvo rozhodlo, ze se budou pouzivat classy a ne nic jinyho.
Marketing je pozitivni, jeho smyslem je efektivne investovat zdroje. V pripade jazyka by tedy mel vest k vyvoji smerem, po kterem je nejvetsi poptavka, ktery ten jazyk nejlepe zhodnoti. Pokud je to jinak, neni to kvuli marketingu, ale jeho absenci. V lepsim pripade jsou zdroje promarneny, v horsim to jazyk pokazi a bude opusten.

Syntakticky cukr neni ani jako kafe ani jako cukr. Ani jedno neni zavedeni zjednodusujici abstrakce, ani jedno z toho nesnizuje slozitost systemu. Python neni Haskell, tam ti zadne bozstvo neprikazalo pouzivat classy a nic jineho. A u toho Haskelluv tu bezela teze, ze jeho striktni funkcionalita a nic jineho je pro tve blaho, protoze te to donuti ji pouzivat a pochopit. S cimz se osobne neztotoznuji, ja jsem zastance flexibility a co mozna nejsirsich prostredku k vyjadreni.

Inkvizitor

Re:Co si myslíte o OOP?
« Odpověď #1243 kdy: 23. 01. 2019, 14:17:08 »
Moje zavery nejsou zavery ale pouze tvrzeni ktera jsou pokud mozno vyvratitelna (falsifiability). Jinak receno jdu s kuzi na trh a usnadnuju vam ostatnim mi moje tvrzeni lehceji vyvratit.

Rad bych aby mi moje tvrzeni lidi zacali rozebirat na padrt a konstruktivne vyvracet. Casto moje 'zavery' zde ale ocividne lidi urazi.

Aplikace postavena na posilani zprav. To je pohled na vec, ne vec implementace. Kdyz mam distribuovany system z vic pocitacu, tak mi nezbyde nez mezi nimi skutecne poslat pres sit nejakou zpravu. Kdyz se podivam dovnitr jedny masiny nebo dovnitr konkretniho programu, muzu rict, ze zavolani metody je taky poslani zpravy.

No jak mam polemizovat s tim, ze objekt je dict a trida zbytecny syntakticky cukr? Jako zjednoduseni to nejaky smysl dava, prehlednou syntaxi mam vysoko v osobnich prioritach, proc se o to hadat v situaci, kdy je Tvuj nazor dost minoritni a vyvoj jde jinudy (podobne v kauze prototypy, kde Self a spol. evolucne prohravaji).

Zpravu ja si predstavuju ve smyslu pozdni vazby - mam nejaky dohodnuty protokol a pres obecny komunikacni kanal poslu zpravu a doufam, ze ji prijemce porozumi. Volani funkce v situaci, kdy mi to validuje kompilator nebo linter, je trosku neco jineho. Nemam potrebu se na to divat jako na komunikaci autonomnich objektu, protoze funkcim vidim pod prsty. Predstavovat si to muzeme ruzne, o tom zadna.

operator

Re:Co si myslíte o OOP?
« Odpověď #1244 kdy: 23. 01. 2019, 14:29:24 »
Ja jsem nekde rek, ze me nezajima abstrakce?

Kdyz jsme u strojoveho kodu. Kod 'nizke urovne abstrakce' a strojovy kod moderniho cpu pripominaji uz spis python nebo neco vysokourovnovyho.
Doslova, ne, ale neprimo jo. Tebou neustale odmitany syntakticky cukr neni nic jineho, nez implementace vyssi abstrakce do jazyka. Zajima te to?

Ja nevim, jestli si nepletes pojmy. Strojovy kod je rada cisel v pameti. At je instrukce sebepokrocilejsi, porad je to z hlediska kodu jen cislo v pameti. Cim ti to pripomina kod Pythonu? Muzes mi nasledujici priklad prepsat do strojoveho kodu moderniho procesoru?
Citace
import sys
print(sys.argv[::2])