Dědičnost dnes

gll

Re:Dědičnost dnes
« Odpověď #255 kdy: 20. 01. 2017, 23:58:39 »
Citace
In prototype-based languages there are no explicit classes. Objects inherit directly from other objects through a prototype property. The prototype property is called prototype in Self, proto in Io and __proto__ in JavaScript. There are two methods of constructing new objects: ex nihilo ("from nothing") object creation or through cloning an existing object. The former is supported through some form of object literal, declarations where objects can be defined at runtime through special syntax such as {...} and passed directly to a variable. While most systems support a variety of cloning, ex nihilo object creation is not as prominent.[4]

jako zdroj je uveden nějaký pseudovědecký článek o hovně. Nepsal jste ho vy? Jasně, že lze objekty i klonovat. Ale zrovna v JS to není nejběžnější způsob jejich vytváření a s prototypy to nemá nic společného. Object.create(foo) nic neklonuje.

Uz ste zmenili stanovisko z "nepise sa tam" na "pseudovedecky clanok o hovne". Ja som to nepisal, mna prototype-based programming zaujimalo len okrajovo ako moznost lepenia aspektov symetrickym sposobom.  Clanok nie je pseudovedecky, vyzera, ze je to z publikacie ktora vysla u springera o prototype-based programming, ale uznavam, ze dost davno v roku 1999. Predpokladam, ze ste odvtedy napisali clanok, ktory nezmysly vyvracia.

u JS příkladu na wikipedii je napsáno, že se jedná o způsob "ex nihilo". Vy jste tvrdil, že se jedná o klonování.


balki

Re:Dědičnost dnes
« Odpověď #256 kdy: 21. 01. 2017, 00:15:15 »
Citace
In prototype-based languages there are no explicit classes. Objects inherit directly from other objects through a prototype property. The prototype property is called prototype in Self, proto in Io and __proto__ in JavaScript. There are two methods of constructing new objects: ex nihilo ("from nothing") object creation or through cloning an existing object. The former is supported through some form of object literal, declarations where objects can be defined at runtime through special syntax such as {...} and passed directly to a variable. While most systems support a variety of cloning, ex nihilo object creation is not as prominent.[4]

jako zdroj je uveden nějaký pseudovědecký článek o hovně. Nepsal jste ho vy? Jasně, že lze objekty i klonovat. Ale zrovna v JS to není nejběžnější způsob jejich vytváření a s prototypy to nemá nic společného. Object.create(foo) nic neklonuje.

Uz ste zmenili stanovisko z "nepise sa tam" na "pseudovedecky clanok o hovne". Ja som to nepisal, mna prototype-based programming zaujimalo len okrajovo ako moznost lepenia aspektov symetrickym sposobom.  Clanok nie je pseudovedecky, vyzera, ze je to z publikacie ktora vysla u springera o prototype-based programming, ale uznavam, ze dost davno v roku 1999. Predpokladam, ze ste odvtedy napisali clanok, ktory nezmysly vyvracia.

u JS příkladu na wikipedii je napsáno, že se jedná o způsob "ex nihilo". Vy jste tvrdil, že se jedná o klonování.

Este raz, existuju 2 sposoby vytvorenia objektu v prototype-based programming. Ex nihilo, alebo klonovanie. Ex nihilo znamena "z nicoho", teda, ze sa nadefinuje cely objekt a nic sa nepouzije znova. Klonovanie znamena, ze sa spravi reuse prototypu.

Naco je potom prototyp, ked sa podla vas vytvara "z nicoho", to nedava logiku.

čumil

Re:Dědičnost dnes
« Odpověď #257 kdy: 21. 01. 2017, 01:04:30 »
Zas diskuze o klonování? To už jsme tady měli ...
JS ma oop systém hodně zprasenej, takže je tam hodně výkladů co je a není klon.
Obecně se ale bere za klon deep copy + shallow copy prototypu.
Jak tady někdo říkal, nejlíp by chtělo udělat deep copy i prototypu, to by zase ale rozbylo instanceof protože to se orientuje podle referencí a ne jmen construktorů v chainu...
Radim to nehrotit, JS není moc clone friendly, takže tak ...
Nejlíp neklonovat, ale ne vždy to jde.
Leckdy ale může pomoct udělat nějaký handle nebo proxy objekt, pokud je cílem originál nějak odstínit...
Vlastně JS ma ty prototypy tak zprasený,  že nejlíp je nepoužívat vubec a jet na delegační pattern.
Popřípadě pomocí klonovací knihovny a objektových literalu si udělat ten oop systém vlastní ...

Deep copy sa nerobi kvoli tomu, ze graf referencii nemusi byt zrovna jednoduchy, moze tam byt cyklus, alebo sa vytvorit klon privelkeho poctu objektov.  Nie je sposob, ako to spravne implementovat.
Nesmysl.
Cykli nejsou problem.
Velký graf je problem programatora, ne filozofie.
Klonují se jen objekty kde to dává smysl, nikdo nebude klonovat root objektn např.
Klonování je třeba pro prototype based oop protože skrz klonování se v něm originálně tvoří objekty.
Ex nihilo je jen pomocná metoda.

čumil

Re:Dědičnost dnes
« Odpověď #258 kdy: 21. 01. 2017, 01:13:41 »
Citace
In prototype-based languages there are no explicit classes. Objects inherit directly from other objects through a prototype property. The prototype property is called prototype in Self, proto in Io and __proto__ in JavaScript. There are two methods of constructing new objects: ex nihilo ("from nothing") object creation or through cloning an existing object. The former is supported through some form of object literal, declarations where objects can be defined at runtime through special syntax such as {...} and passed directly to a variable. While most systems support a variety of cloning, ex nihilo object creation is not as prominent.[4]

jako zdroj je uveden nějaký pseudovědecký článek o hovně. Nepsal jste ho vy? Jasně, že lze objekty i klonovat. Ale zrovna v JS to není nejběžnější způsob jejich vytváření a s prototypy to nemá nic společného. Object.create(foo) nic neklonuje.

Uz ste zmenili stanovisko z "nepise sa tam" na "pseudovedecky clanok o hovne". Ja som to nepisal, mna prototype-based programming zaujimalo len okrajovo ako moznost lepenia aspektov symetrickym sposobom.  Clanok nie je pseudovedecky, vyzera, ze je to z publikacie ktora vysla u springera o prototype-based programming, ale uznavam, ze dost davno v roku 1999. Predpokladam, ze ste odvtedy napisali clanok, ktory nezmysly vyvracia.

u JS příkladu na wikipedii je napsáno, že se jedná o způsob "ex nihilo". Vy jste tvrdil, že se jedná o klonování.

Este raz, existuju 2 sposoby vytvorenia objektu v prototype-based programming. Ex nihilo, alebo klonovanie. Ex nihilo znamena "z nicoho", teda, ze sa nadefinuje cely objekt a nic sa nepouzije znova. Klonovanie znamena, ze sa spravi reuse prototypu.

Naco je potom prototyp, ked sa podla vas vytvara "z nicoho", to nedava logiku.
Dava to logiku. Prototyp je možno brát i jako defaultni delegat pro nezname zpravy (tak je to v selfu pokud se nepletu).
Ex nihilo a klonovani je strategie tvorby objektu, pricemz v případě klonování je klonovaný prototyp svého klona.
Všechny přístupy je možno libovolně míchat, koneckonců jsou to jen objekty s nějakými sloty, nic víc, žádný třídní balast.

Obávám se že tuto problematiku jsi zatím plně neovlád, tak prosím nemať čtenáře, zrovna tohle vlákno je extrémně zajímavé.

balki

Re:Dědičnost dnes
« Odpověď #259 kdy: 21. 01. 2017, 01:55:35 »
Citace
In prototype-based languages there are no explicit classes. Objects inherit directly from other objects through a prototype property. The prototype property is called prototype in Self, proto in Io and __proto__ in JavaScript. There are two methods of constructing new objects: ex nihilo ("from nothing") object creation or through cloning an existing object. The former is supported through some form of object literal, declarations where objects can be defined at runtime through special syntax such as {...} and passed directly to a variable. While most systems support a variety of cloning, ex nihilo object creation is not as prominent.[4]

jako zdroj je uveden nějaký pseudovědecký článek o hovně. Nepsal jste ho vy? Jasně, že lze objekty i klonovat. Ale zrovna v JS to není nejběžnější způsob jejich vytváření a s prototypy to nemá nic společného. Object.create(foo) nic neklonuje.

Uz ste zmenili stanovisko z "nepise sa tam" na "pseudovedecky clanok o hovne". Ja som to nepisal, mna prototype-based programming zaujimalo len okrajovo ako moznost lepenia aspektov symetrickym sposobom.  Clanok nie je pseudovedecky, vyzera, ze je to z publikacie ktora vysla u springera o prototype-based programming, ale uznavam, ze dost davno v roku 1999. Predpokladam, ze ste odvtedy napisali clanok, ktory nezmysly vyvracia.

u JS příkladu na wikipedii je napsáno, že se jedná o způsob "ex nihilo". Vy jste tvrdil, že se jedná o klonování.

Este raz, existuju 2 sposoby vytvorenia objektu v prototype-based programming. Ex nihilo, alebo klonovanie. Ex nihilo znamena "z nicoho", teda, ze sa nadefinuje cely objekt a nic sa nepouzije znova. Klonovanie znamena, ze sa spravi reuse prototypu.

Naco je potom prototyp, ked sa podla vas vytvara "z nicoho", to nedava logiku.
Dava to logiku. Prototyp je možno brát i jako defaultni delegat pro nezname zpravy (tak je to v selfu pokud se nepletu).
Ex nihilo a klonovani je strategie tvorby objektu, pricemz v případě klonování je klonovaný prototyp svého klona.
Všechny přístupy je možno libovolně míchat, koneckonců jsou to jen objekty s nějakými sloty, nic víc, žádný třídní balast.

Obávám se že tuto problematiku jsi zatím plně neovlád, tak prosím nemať čtenáře, zrovna tohle vlákno je extrémně zajímavé.

Ah, co tu este robim, bavte sa tu bezo mna, tu nie je nadej na rozumnu debatu.


balki

Re:Dědičnost dnes
« Odpověď #260 kdy: 21. 01. 2017, 02:02:55 »
Pre cumila. Tu je literatura, prosim hladajte ex nihilo a vzdelavajte sa:

http://www.lirmm.fr/~dony/postscript/proto-book.pdf

balki

Re:Dědičnost dnes
« Odpověď #261 kdy: 21. 01. 2017, 02:21:56 »
Pre cumila. Tu je literatura, prosim hladajte ex nihilo a vzdelavajte sa:

http://www.lirmm.fr/~dony/postscript/proto-book.pdf

Ok uz som si pozrel viac zdrojov. V prototype based porgramovani je mozno vytvorit objekt troma sposobmi
  • Ex nihilo - vytvori sa novy objekt
  • Delegaciou  - spravi sa shallow copy prototypu
  • Klonovanim  - spravi sa deep copy prototypu

Co mi tu gll a cumil motali ze ex nihilo obsahuje prototyp bola samozrejme hlupost. Dakujem, aspon som si ozrejmil veci, ze tam pristupuje este delegacia. (Pricom v niektorej literature este aj tu delegaciu povazuju za klonovanie)

gll

Re:Dědičnost dnes
« Odpověď #262 kdy: 21. 01. 2017, 11:46:00 »
Pre cumila. Tu je literatura, prosim hladajte ex nihilo a vzdelavajte sa:

http://www.lirmm.fr/~dony/postscript/proto-book.pdf

Ok uz som si pozrel viac zdrojov. V prototype based porgramovani je mozno vytvorit objekt troma sposobmi
  • Ex nihilo - vytvori sa novy objekt
  • Delegaciou  - spravi sa shallow copy prototypu
  • Klonovanim  - spravi sa deep copy prototypu

Co mi tu gll a cumil motali ze ex nihilo obsahuje prototyp bola samozrejme hlupost. Dakujem, aspon som si ozrejmil veci, ze tam pristupuje este delegacia. (Pricom v niektorej literature este aj tu delegaciu povazuju za klonovanie)

Každý, kdo prakticky programuje v JS, si pod klonováním představuje něco jiného než kopii prototypu. Kopírují se vlastnosti samotného objektu, prototyp se většinou jen předává.

Žádná shallow copy prototypu při vytváření nevzniká. To je princip prototypového OOP.

Z vašich odpovědí je jasné, že javascript neznáte. Zkuste si místo vědeckých článků přečíst tutoriál od Mozilly a vyzkoušejte si příklady v browseru.

gll

Re:Dědičnost dnes
« Odpověď #263 kdy: 21. 01. 2017, 11:51:32 »
Pre cumila. Tu je literatura, prosim hladajte ex nihilo a vzdelavajte sa:

http://www.lirmm.fr/~dony/postscript/proto-book.pdf

Čumil narozdíl od vás ví o čem mluví. Není možné obecně teoretizovat o nějaké skupině jazyků, bez toho, abyste pořádně znal alespoň jeden jazyk z té skupiny a uměl ho prakticky používat.

balki

Re:Dědičnost dnes
« Odpověď #264 kdy: 21. 01. 2017, 16:59:18 »
Pre cumila. Tu je literatura, prosim hladajte ex nihilo a vzdelavajte sa:

http://www.lirmm.fr/~dony/postscript/proto-book.pdf

Čumil narozdíl od vás ví o čem mluví. Není možné obecně teoretizovat o nějaké skupině jazyků, bez toho, abyste pořádně znal alespoň jeden jazyk z té skupiny a uměl ho prakticky používat.

Radim vam, naucit sa citat a pocuvat, dost to pomaha, aj vam aj cumilovi. Ono je kopec fachidiotov, co si idu svoje, lebo to uz robia 100 rokov.

balki

Re:Dědičnost dnes
« Odpověď #265 kdy: 21. 01. 2017, 17:10:24 »
Pre cumila. Tu je literatura, prosim hladajte ex nihilo a vzdelavajte sa:

http://www.lirmm.fr/~dony/postscript/proto-book.pdf

Ok uz som si pozrel viac zdrojov. V prototype based porgramovani je mozno vytvorit objekt troma sposobmi
  • Ex nihilo - vytvori sa novy objekt
  • Delegaciou  - spravi sa shallow copy prototypu
  • Klonovanim  - spravi sa deep copy prototypu

Co mi tu gll a cumil motali ze ex nihilo obsahuje prototyp bola samozrejme hlupost. Dakujem, aspon som si ozrejmil veci, ze tam pristupuje este delegacia. (Pricom v niektorej literature este aj tu delegaciu povazuju za klonovanie)

Každý, kdo prakticky programuje v JS, si pod klonováním představuje něco jiného než kopii prototypu. Kopírují se vlastnosti samotného objektu, prototyp se většinou jen předává.

Žádná shallow copy prototypu při vytváření nevzniká. To je princip prototypového OOP.

Z vašich odpovědí je jasné, že javascript neznáte. Zkuste si místo vědeckých článků přečíst tutoriál od Mozilly a vyzkoušejte si příklady v browseru.

Ok, je tam stale ten delegat, ale jednotlive atributy sa prekryvaju. Cize je to prakticky jedno. Vasa fachidiocia mi fakt uz pripada smiesna.

Kód: [Vybrat]
> a = {}
{}
> a.lala = 5
5
> b = Object.create(a)
{}
> b.lala
5
> a.lala = 6
6
> b.lala
6
> b.lala = 7
7
> a.lala
6

Polymath

Re:Dědičnost dnes
« Odpověď #266 kdy: 21. 01. 2017, 19:24:17 »
Pre cumila. Tu je literatura, prosim hladajte ex nihilo a vzdelavajte sa:

http://www.lirmm.fr/~dony/postscript/proto-book.pdf

Čumil narozdíl od vás ví o čem mluví. Není možné obecně teoretizovat o nějaké skupině jazyků, bez toho, abyste pořádně znal alespoň jeden jazyk z té skupiny a uměl ho prakticky používat.

Radim vam, naucit sa citat a pocuvat, dost to pomaha, aj vam aj cumilovi. Ono je kopec fachidiotov, co si idu svoje, lebo to uz robia 100 rokov.
Vzhledem k jejich způsobu vyjádřování ("analíza", "rozbylo se") bych vypustil předponu "fach-".

SB

Re:Dědičnost dnes
« Odpověď #267 kdy: 22. 01. 2017, 14:11:42 »
Tak pozor, zrovna Javascript je docela blízký Smalltalku - má jmenný polymorfismus, (v podstatě nepoužitelné) zapouzdření a pozdní vazbu. Mimoto velice silnou reflexivitu.

Tak vidíš a jaký je to bastl. Dělají v tom jen lopaty, které nikdy nepochopí programování. Prostě mi přijde divné, proč používáš OOP pro nějaký paskvil, který je mrtvý a zůstal maximálně u skriptovacích jazyků na minivěci.

Takže znakem "pure" OOP je co? Normální OOP totiž vypadá daleko lépe a pure znamená horší, což obvykle bývá naopak.

Bastl? Těžko říct. Nebýt toho zkurveného nefunkčního zapouzdření ve spojení s prototypy, mohl to být docela slušný jazyk. Ale jestli tu chcete protežovat Javu, tak ta čisté OP též nesplňuje.

Vlastnosti čistého OP jsou: Identita, zapouzdření, skládání, delegování, posílání zpráv. Vše ostatní (dědičnost, mixiny, ...) je navíc a původní koncept neovlivňuje.

SB

Re:Dědičnost dnes
« Odpověď #268 kdy: 22. 01. 2017, 14:23:57 »
Pracujete se zmatením pojmů - to, co jste napsal, není rozhraní. Rozhraní je (už z názvu) jen to, co je vidět zvenku, tohleto je jakýsi hybrid zahrnující i implementaci (má to i Java jako rozhraní s default). Ve funkcionálním programování vás za to poplácají po zádech, v objektovém to hodně nerad vidím (obdoba anemického modelu, ale jen s metodami).
Je to defaultní implementace metod rozhraní (v terminologii Swiftu a ObjC protokolů) a v rámci OOP to je nejelegantnější a nejefektivnější způsob řešení zmíněného problému.

Tak já myslím, že termín i význam slova "rozhraní" je dostatečně přímočarý a nezáludný, přičemž v něm nenalézám jakýkoliv náznak implementace. To, co popisujete, vypadá spíše jako trait - že si nějaký jazyk pod "rozhraním" představuje něco jiného, je jeho problém, my bychom se měli bavit v obecné rovině, ne podle toho, jak to kdo kde ubastlil. Takže příště prosím pište rovnou o traitech či mixinech, ušetříme si tím nedorozumění a příspěvky.
Na eleganci a efektivitě jsme se v této diskusi ještě neshodli.

javaman ()

Re:Dědičnost dnes
« Odpověď #269 kdy: 22. 01. 2017, 14:26:54 »
Tak pozor, zrovna Javascript je docela blízký Smalltalku - má jmenný polymorfismus, (v podstatě nepoužitelné) zapouzdření a pozdní vazbu. Mimoto velice silnou reflexivitu.

Tak vidíš a jaký je to bastl. Dělají v tom jen lopaty, které nikdy nepochopí programování. Prostě mi přijde divné, proč používáš OOP pro nějaký paskvil, který je mrtvý a zůstal maximálně u skriptovacích jazyků na minivěci.

Takže znakem "pure" OOP je co? Normální OOP totiž vypadá daleko lépe a pure znamená horší, což obvykle bývá naopak.

Bastl? Těžko říct. Nebýt toho zkurveného nefunkčního zapouzdření ve spojení s prototypy, mohl to být docela slušný jazyk. Ale jestli tu chcete protežovat Javu, tak ta čisté OP též nesplňuje.

Vlastnosti čistého OP jsou: Identita, zapouzdření, skládání, delegování, posílání zpráv. Vše ostatní (dědičnost, mixiny, ...) je navíc a původní koncept neovlivňuje.

Jsou tam nové verze jako v ostatních jazycích? Protože jsem ho znal někdy v roce 98, což na skriptování docela šlo. Pak jsem to zkoušel o něco později a o moc lepší to nebylo.

Java splňuje normání OOP a to tvoje pure nikdo nepotřebuje, ale chtěl jsem vědět, o co přicházím :)

Ahaaa, takže vlastně všechno máme, ne?