Dědičnost dnes

Questor

Re:Dědičnost dnes
« Odpověď #180 kdy: 19. 01. 2017, 13:00:24 »
Jenže pojem OOP v době Simuly neexistoval. Ten zavedl až Alan Kay v souvislosti se Smalltalkem.

To, že se zavede nějaký pojem, ještě neznamená, že pod něj nelze zahrnout něco, co existovalo už předtím. Už proto, že Alan Kay nestavěl na zelené louce. Ano, můžeme OOP chápat omezeně tak, jak funguje ve Smalltalku. Alternativně můžeme pod OOP zahrnout i využití stejných nebo podobných principů v jiných jazycích trochu jiným způsobem. Myslím, že programování není o dogmatickém dodržování nějakých oblíbených naučených teoretických principů, ale o pragmatickém hledání fungujícího řešení (kde pod pojem "fungující" zahrnuji podle okolností i srozumitelnost, rozšiřitelnost, dodržení smysluplných konvencí, aj.).

Řeč byla o tom, co to je "původní OOP". Pojem OOP použil poprvé Alan Kay, a to v souvislosti se Smalltalkem. Byl jsi to ty, kdo tu začal slovíčkařit o tom, co to je "původní OOP". Řekl bych, že my ostatní tak nějak chápeme, že OOP zahrnuje více konceptů (sám jsem to tu už zmínil). A proto odkazuje-li někdo na ten smalltalkovský, tak obrat "původní OOP" je tedy zcela na místě a srozumitelný. I z toho důvodu, že narozdíl od Simuly se Smalltalk jako první objektový jazyk začal používat i v praxi a používá se dodnes.
Že se Smalltalk inspiroval (mimo jiné) i Simulou tu nikdo nezpochybňuje. Ale protestanti tu jsou taky až od Luthera, přestože se inspirovali (mimo jiné) i husity. Ačkoli jsou husité dnes často řazeni mezi protestantská hnutí, tak hovořit o nich jako o "původních protestantech" by bylo přinejmenším zavádějící.

Lenze povodne OOP sa nepresadilo... zato to moderne, ktore nevychadza zo smalltalku, ale zo Simuly 67 ano. Smalltalkovske OOP je dnes mrtve. Posledny kliniec do rakvy bol jazyk swift ktory pochoval Objective C.

Slova postupom casu zvyknu menit zmysel. Ved napriklad kedysi sa slovom mini-pocitac oznacovali pocitace ktore sa zmestili sa do jednej miestnosti, dnes za mini pocitace povazujeme vselico od single board PC cez laptopy az po nettopy ale rozhodne nie toto https://en.wikipedia.org/wiki/Minicomputer#/media/File:Pdp-11-40.jpg

Aj pod pojmom OOP dnes ludia chapu skor objektovy model z C++, Javy a C# a malokto z beznych programatorov vobec vie o nejakom Smalltalku alebo posielani sprav.


gll

Re:Dědičnost dnes
« Odpověď #181 kdy: 19. 01. 2017, 13:10:40 »
Jenže pojem OOP v době Simuly neexistoval. Ten zavedl až Alan Kay v souvislosti se Smalltalkem.

To, že se zavede nějaký pojem, ještě neznamená, že pod něj nelze zahrnout něco, co existovalo už předtím. Už proto, že Alan Kay nestavěl na zelené louce. Ano, můžeme OOP chápat omezeně tak, jak funguje ve Smalltalku. Alternativně můžeme pod OOP zahrnout i využití stejných nebo podobných principů v jiných jazycích trochu jiným způsobem. Myslím, že programování není o dogmatickém dodržování nějakých oblíbených naučených teoretických principů, ale o pragmatickém hledání fungujícího řešení (kde pod pojem "fungující" zahrnuji podle okolností i srozumitelnost, rozšiřitelnost, dodržení smysluplných konvencí, aj.).

Řeč byla o tom, co to je "původní OOP". Pojem OOP použil poprvé Alan Kay, a to v souvislosti se Smalltalkem. Byl jsi to ty, kdo tu začal slovíčkařit o tom, co to je "původní OOP". Řekl bych, že my ostatní tak nějak chápeme, že OOP zahrnuje více konceptů (sám jsem to tu už zmínil). A proto odkazuje-li někdo na ten smalltalkovský, tak obrat "původní OOP" je tedy zcela na místě a srozumitelný. I z toho důvodu, že narozdíl od Simuly se Smalltalk jako první objektový jazyk začal používat i v praxi a používá se dodnes.
Že se Smalltalk inspiroval (mimo jiné) i Simulou tu nikdo nezpochybňuje. Ale protestanti tu jsou taky až od Luthera, přestože se inspirovali (mimo jiné) i husity. Ačkoli jsou husité dnes často řazeni mezi protestantská hnutí, tak hovořit o nich jako o "původních protestantech" by bylo přinejmenším zavádějící.

Lenze povodne OOP sa nepresadilo... zato to moderne, ktore nevychadza zo smalltalku, ale zo Simuly 67 ano. Smalltalkovske OOP je dnes mrtve. Posledny kliniec do rakvy bol jazyk swift ktory pochoval Objective C.

Slova postupom casu zvyknu menit zmysel. Ved napriklad kedysi sa slovom mini-pocitac oznacovali pocitace ktore sa zmestili sa do jednej miestnosti, dnes za mini pocitace povazujeme vselico od single board PC cez laptopy az po nettopy ale rozhodne nie toto https://en.wikipedia.org/wiki/Minicomputer#/media/File:Pdp-11-40.jpg

Aj pod pojmom OOP dnes ludia chapu skor objektovy model z C++, Javy a C# a malokto z beznych programatorov vobec vie o nejakom Smalltalku alebo posielani sprav.

V čem se zásadně liší smalltalk od dynamických OOP jazyků jako javascript?

Inkvizitor

Re:Dědičnost dnes
« Odpověď #182 kdy: 19. 01. 2017, 14:14:41 »
Nad "programátorskými" diskuzemi na rootu nezbývá než kroutit hlavou. Z toho by se skoro dal založit nový lamer. Jenom doufám, že nikdo z vás neprogramuje a jen si honíte ego v diskuzi.

Ja bych zase byl radeji, kdyby cast lidi, kteri do teto diskuse prispeli, byla vzorem pro ostatni "programatory". Lepicu bez mozku je na trhu vice nez dost.

V reálném programu je jedno, jestli je obdélník čtverec. Hlavně že funguje efektivně, je to stručné a čitelné. BTW, když se tady někdo zeptá na řešení konkrétní úlohy, tak mu místní architekti nejsou schopni poradit. např. https://forum.root.cz/index.php?topic=13363.0

Program ma dve strany. Jedna je, jak realne funguje a druha je, jak se k te implementaci doslo a jestli se v ni nekdo i v budoucnu vyzna.

Je jasne, ze otazka, zda je ctverec specialnim pripadem obdelnika nebo ne (a zda tedy ma byt jeho podtridou v OOP) je dost umela. Ale za kazdym slusne napsanym programem by mel byt nejaky rozumny myslenkovy model a idealne by v nem mel byt rozpoznatelny. A jsem presvedcen, ze nekteri lide pisi programy ad hoc a mozna tem lepsim z nich i dost dobre funguji. Pak jsou jini vyvojari, kteri vzdycky za kodem vidi nejakou (z hlediska lidskeho uvazovani) konzistentni strukturu, ktera je dulezitou soucasti navrhu a implementace.

Kiwi

Re:Dědičnost dnes
« Odpověď #183 kdy: 19. 01. 2017, 15:20:02 »
Jenže pojem OOP v době Simuly neexistoval. Ten zavedl až Alan Kay v souvislosti se Smalltalkem.

To, že se zavede nějaký pojem, ještě neznamená, že pod něj nelze zahrnout něco, co existovalo už předtím. Už proto, že Alan Kay nestavěl na zelené louce. Ano, můžeme OOP chápat omezeně tak, jak funguje ve Smalltalku. Alternativně můžeme pod OOP zahrnout i využití stejných nebo podobných principů v jiných jazycích trochu jiným způsobem. Myslím, že programování není o dogmatickém dodržování nějakých oblíbených naučených teoretických principů, ale o pragmatickém hledání fungujícího řešení (kde pod pojem "fungující" zahrnuji podle okolností i srozumitelnost, rozšiřitelnost, dodržení smysluplných konvencí, aj.).

Řeč byla o tom, co to je "původní OOP". Pojem OOP použil poprvé Alan Kay, a to v souvislosti se Smalltalkem. Byl jsi to ty, kdo tu začal slovíčkařit o tom, co to je "původní OOP". Řekl bych, že my ostatní tak nějak chápeme, že OOP zahrnuje více konceptů (sám jsem to tu už zmínil). A proto odkazuje-li někdo na ten smalltalkovský, tak obrat "původní OOP" je tedy zcela na místě a srozumitelný. I z toho důvodu, že narozdíl od Simuly se Smalltalk jako první objektový jazyk začal používat i v praxi a používá se dodnes.
Že se Smalltalk inspiroval (mimo jiné) i Simulou tu nikdo nezpochybňuje. Ale protestanti tu jsou taky až od Luthera, přestože se inspirovali (mimo jiné) i husity. Ačkoli jsou husité dnes často řazeni mezi protestantská hnutí, tak hovořit o nich jako o "původních protestantech" by bylo přinejmenším zavádějící.

Lenze povodne OOP sa nepresadilo... zato to moderne, ktore nevychadza zo smalltalku, ale zo Simuly 67 ano. Smalltalkovske OOP je dnes mrtve. Posledny kliniec do rakvy bol jazyk swift ktory pochoval Objective C.

Slova postupom casu zvyknu menit zmysel. Ved napriklad kedysi sa slovom mini-pocitac oznacovali pocitace ktore sa zmestili sa do jednej miestnosti, dnes za mini pocitace povazujeme vselico od single board PC cez laptopy az po nettopy ale rozhodne nie toto https://en.wikipedia.org/wiki/Minicomputer#/media/File:Pdp-11-40.jpg

Aj pod pojmom OOP dnes ludia chapu skor objektovy model z C++, Javy a C# a malokto z beznych programatorov vobec vie o nejakom Smalltalku alebo posielani sprav.

A co Python? Ruby? To, co je v původním OOP hračka, se v těch jazycích typu C++ musí pracně řešit různými oklikami a serepetičkami skrytými pod pojmem "design patterns".
Původní OOP je založeno na velmi pozdní vazbě a tento koncept rozhodně není mrtvý. Spíše si lidé dnes více a více uvědomují, že bez toho se rozumně objektově programovat nedá.

Co se týče minipočítačů, tak je mi vcelku jedno, co si pod tím představují laici a amatéři. Profík ví, že se tím označují počítače typu PDPček apod. z přelomu 60. a 70. let.

balki

Re:Dědičnost dnes
« Odpověď #184 kdy: 19. 01. 2017, 15:55:47 »
Uz to tu nepozeram, zasa sa tu slovickari meraju sa penisy.


gll

Re:Dědičnost dnes
« Odpověď #185 kdy: 19. 01. 2017, 16:59:53 »
Uz to tu nepozeram, zasa sa tu slovickari meraju sa penisy.

penis si tu poměřujete vy

Pouzitie dedicnosti na odstranenie duplicity kodu je fakt uchylnost, takym koderom treba nakopat zadok, zbytocne to zneprehladnuje kod a da sa to riesit aj inak :)

Můžete napsat podle mého názoru je to špatně, nebo podle této knihy a tohoto autora je to špatně, ale nemůžete napsat, že je to špatně a urážet lidi s jiným názorem. V tomto oboru neexistuje absolutní pravda.

balki

Re:Dědičnost dnes
« Odpověď #186 kdy: 19. 01. 2017, 17:24:02 »
Uz to tu nepozeram, zasa sa tu slovickari meraju sa penisy.

penis si tu poměřujete vy

Pouzitie dedicnosti na odstranenie duplicity kodu je fakt uchylnost, takym koderom treba nakopat zadok, zbytocne to zneprehladnuje kod a da sa to riesit aj inak :)

Můžete napsat podle mého názoru je to špatně, nebo podle této knihy a tohoto autora je to špatně, ale nemůžete napsat, že je to špatně a urážet lidi s jiným názorem. V tomto oboru neexistuje absolutní pravda.

Ale existuju best practices, prosim netykajte mi.

gll

Re:Dědičnost dnes
« Odpověď #187 kdy: 19. 01. 2017, 17:33:33 »
Ale existuju best practices, prosim netykajte mi.

Best practices nejsou jen jedny. Každých pár let je za best practices považováno něco jiného. Kde vám tykám?

balki

Re:Dědičnost dnes
« Odpověď #188 kdy: 19. 01. 2017, 17:48:35 »
Ale existuju best practices, prosim netykajte mi.

Best practices nejsou jen jedny. Každých pár let je za best practices považováno něco jiného. Kde vám tykám?

Prepacte, netykate mi, zle som pozeral. Ale Pouzitie dedenia miesto delegacie pri duplicite kodu nebola best practice snad nikdy. Da sa to tak robit, iba ak podobne dedenie dava zmysel. Tu je relevantna litertura https://www.google.sk/search?q=compsition+over+inheritancehttps://en.wikipedia.org/wiki/Delegation_pattern.   

Typicky z vlasy pritiahnuty priklad je, ked osoba ma Usta s metodou papaj().  Potom ale clovek poterebuje tiez jest a tak  moze nastat  Clovek extends Usta.  Podobne je to pritiahnute s vynimanim duplikovaneho kodu do parenta. Ano, da sa to, len to sposobuje problemy.

gll

Re:Dědičnost dnes
« Odpověď #189 kdy: 19. 01. 2017, 18:39:45 »
Ale existuju best practices, prosim netykajte mi.

Best practices nejsou jen jedny. Každých pár let je za best practices považováno něco jiného. Kde vám tykám?

Prepacte, netykate mi, zle som pozeral. Ale Pouzitie dedenia miesto delegacie pri duplicite kodu nebola best practice snad nikdy. Da sa to tak robit, iba ak podobne dedenie dava zmysel. Tu je relevantna litertura https://www.google.sk/search?q=compsition+over+inheritancehttps://en.wikipedia.org/wiki/Delegation_pattern.   

Typicky z vlasy pritiahnuty priklad je, ked osoba ma Usta s metodou papaj().  Potom ale clovek poterebuje tiez jest a tak  moze nastat  Clovek extends Usta.  Podobne je to pritiahnute s vynimanim duplikovaneho kodu do parenta. Ano, da sa to, len to sposobuje problemy.

To je jeden příklad špatného použití, ale i správná použití dědičnosti slouží k odstranění duplicity.

https://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)#Code_reuse

Je otázka, jak moc je ten váš příklad špatný. Uživatele té třídy by nemělo zajímat, jak k té metodě přišla. Dejme tomu, že je to v některých jazycích špatné použití, ale například v pythonu se dědičnost používá k implementaci mixinů podobným způsobem jako ve vašem příkladu.

balki

Re:Dědičnost dnes
« Odpověď #190 kdy: 19. 01. 2017, 19:00:37 »
Ale existuju best practices, prosim netykajte mi.

Best practices nejsou jen jedny. Každých pár let je za best practices považováno něco jiného. Kde vám tykám?

Prepacte, netykate mi, zle som pozeral. Ale Pouzitie dedenia miesto delegacie pri duplicite kodu nebola best practice snad nikdy. Da sa to tak robit, iba ak podobne dedenie dava zmysel. Tu je relevantna litertura https://www.google.sk/search?q=compsition+over+inheritancehttps://en.wikipedia.org/wiki/Delegation_pattern.   

Typicky z vlasy pritiahnuty priklad je, ked osoba ma Usta s metodou papaj().  Potom ale clovek poterebuje tiez jest a tak  moze nastat  Clovek extends Usta.  Podobne je to pritiahnute s vynimanim duplikovaneho kodu do parenta. Ano, da sa to, len to sposobuje problemy.

To je jeden příklad špatného použití, ale i správná použití dědičnosti slouží k odstranění duplicity.

https://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)#Code_reuse

Je otázka, jak moc je ten váš příklad špatný. Uživatele té třídy by nemělo zajímat, jak k té metodě přišla. Dejme tomu, že je to v některých jazycích špatné použití, ale například v pythonu se dědičnost používá k implementaci mixinů podobným způsobem jako ve vašem příkladu.

Co som pozeral zbezne na pythonove mixiny, tak nezatazuje sa hierarchia dedicnosti, ale sa mixin vytvori zlepenim dvoch tried. Predstavit si BezustyClovek  a Usta a potom ich zlepit, to je tiez trosku sialene, ale aspon to neimplikuje, ze clovek je specializaciou Ust. Skor by som to nazval asi potom Clovek a KonzumacnyAspekt. :)

Literatura: https://pypi.python.org/pypi/mixin/1.1

gll

Re:Dědičnost dnes
« Odpověď #191 kdy: 19. 01. 2017, 19:10:27 »
Co som pozeral zbezne na pythonove mixiny, tak nezatazuje sa hierarchia dedicnosti, ale sa mixin vytvori zlepenim dvoch tried. Predstavit si BezustyClovek  a Usta a potom ich zlepit, to je tiez trosku sialene, ale aspon to neimplikuje, ze clovek je specializaciou Ust. Skor by som to nazval asi potom Clovek a KonzumacnyAspekt. :)

Literatura: https://pypi.python.org/pypi/mixin/1.1

Tohle je knihovna, která implementuje mixiny pomocí dekoráturu třídy. V podstatě jen přiřadí atributy mixinu dekorované třídě. Běžně se k implementaci mixinů používá i dědičnost.

http://stackoverflow.com/questions/533631/what-is-a-mixin-and-why-are-they-useful

balki

Re:Dědičnost dnes
« Odpověď #192 kdy: 19. 01. 2017, 20:54:47 »
Co som pozeral zbezne na pythonove mixiny, tak nezatazuje sa hierarchia dedicnosti, ale sa mixin vytvori zlepenim dvoch tried. Predstavit si BezustyClovek  a Usta a potom ich zlepit, to je tiez trosku sialene, ale aspon to neimplikuje, ze clovek je specializaciou Ust. Skor by som to nazval asi potom Clovek a KonzumacnyAspekt. :)

Literatura: https://pypi.python.org/pypi/mixin/1.1

Tohle je knihovna, která implementuje mixiny pomocí dekoráturu třídy. V podstatě jen přiřadí atributy mixinu dekorované třídě. Běžně se k implementaci mixinů používá i dědičnost.

http://stackoverflow.com/questions/533631/what-is-a-mixin-and-why-are-they-useful

Je to divne. Aj ked vlastne uvazujem, ze v jazyku, kde sa pouziva duck typing to ani tak vadit nemusi.  Ta libka, co som ju nasiel a myslel som si, ze je default sa mi pozdava viac.

SB

Re:Dědičnost dnes
« Odpověď #193 kdy: 20. 01. 2017, 08:28:16 »
...tak čtverec najednou bude mít taky dvě proměnné, což je špatně, protože redundance, neelegance atd. A tento problém žádné přímočaré řešení nemá (aspoň v současných jazycích), ledaže člověk funkce rozčlení do rozhraní, což se právě čím dál více rozmáhá. Pak dědičnost jako taková zmizí, ale zůstane sdílený kód a stejná množina relevantních proměnných, byť implementovaných různě...

Na redundanci sere pes, ta se objevuje i jinde, to podstatné je, aby třída čtverce zajistila shodnou délku stran, což je triviální. Rozhodující je, zda chcete čtverec modelovat pomocí obdélníku, nebo ne. Není důvod, aby to nešlo.
Jedním řešením vámi uvedeným je rozhraní. U jazyků bez podtypového polymorfismu se nepoužívá.
Jak "rozdělení funkcí do rozhraní" vede ke sdílenému kódu??? Rozhraní z podstaty věci žádný kód neobsahuje.

SB

Re:Dědičnost dnes
« Odpověď #194 kdy: 20. 01. 2017, 08:30:59 »
Někdo totiž může říct, že obdelník může být speciální případ cltverce...

Obdélník nesplňuje shodnou délku stran čtverce, proto nejde o specializaci. Při specializaci obdélník -> čtverec jsou všechna pravidla zachována a jedno přibývá. Co je na tom nejasného?