Dědičnost dnes

Re:Dědičnost dnes
« Odpověď #165 kdy: 18. 01. 2017, 18:31:50 »
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.).


Kiwi

Re:Dědičnost dnes
« Odpověď #166 kdy: 18. 01. 2017, 19:03:19 »
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í.

JS

Re:Dědičnost dnes
« Odpověď #167 kdy: 18. 01. 2017, 19:14:39 »
Třída není realizátorem zapouzdření, tím je viditelnost metod a vlastností. Třída je realizátorem vytváření objektů.

Nejsem si jisty, co tim chces rict. Co ja chci rict je, ze zapouzdreni lze treba v Jave realizovat dvema zpusoby - viditelnosti v ramci tridy a viditelnosti v ramci modulu (package). Ale k cemu je dobre mit dve varianty stejne abstrakce? Nestacil by na to jen modul? Je to proste neortogonalni navrh jazyka.

Citace
To jako že by se podědilo a všechny metody přepsaly znovu? Čeho by se tím dosáhlo?

Prave ze pri datovem dedeni nemusis nic prepisovat, funkce ktere s temi daty pracuji dokonce ani nemusi byt polymorfni (tedy v ramci typoveho systemu mozna ano, ale ne realne). Coz je taky duvod, proc dedeni dat a polymorfismus jsou dve ruzne veci.

Treba vezmi si to Go - kdyz si definujes strukturu a podedis ji v jine (jenom jednonasobna dedicnost je mozna), tak pak metody (je to uz chvile co jsem se Go ucil, takze jsem to pozapomnel) mohou obdrzet tu zdedenou strukturu misto puvodni, ale to je proto, ze skutecne realne bude pracovat s pointerem na tu strukturu jako kdyby to byl pointer na tu puvodni. Bude stacit jen jedna varianta dane metody, takze ta metoda (vnitrne, nikoli z hlediska typoveho systemu) neni jen polymorfni ve svem argumentu, ale je to doslova ta stejna funkce.

Dedicnost dat je i v nekterych databazich, treba Postgres, ktere dovoluji podedit tabulku a tak ji jakoby rozsirit o ruzne dalsi sloupce. Ted tedy nevim jestli dotaz nad tou puvodni tabulkou zahrnuje i jeji potomky, ale asi ano, jinak by to moc nedavalo smysl.

Citace
Polymorfismus je zprostředkován protokolem objektu, na vnitřní struktuře metod a stavů je nezávislý.

Takze v pripade dedeni dat je to opacne, nez pises - tam se prave vyhneme polymorfismu, ale spolehame na spolecnou strukturu predka. Proto take data (tridy) neni vhodne dedit vicenasobne, protoze vznika problem diamantu (chceme tam tataz data vickrat ze dvou ruznych predku se spolecnym potomkem?), naopak pri dedeni interfacu, coz je zpusob polymorfismu, tenhle problem nevznika.

Z techto duvodu je praktictejsi nad dedenim a polymorfismem uvazovat separatne, nez je kombinovat. Jinak zase vznika vyse problem neortogonalniho navrhu jazyka, treba v Jave museli pridat interfacy (coz je relativne ciste), ktere v podstate castecne duplikuji funkcionalitu trid, ktera je nedostatecna (neni dovolena vicenasobna dedicnost) proto, ze se polymorfismus micha s datovou dedicnosti. (A z toho pak vyplyvaji ruzne zbytecne otazky, moje oblibena je: Kdy je lepsi pouzit interface a kdy abstraktni tridu?)

Citace
A nemá to s děděním v OOP společný jen název?

Prestan se chytat detailu a zamysli se nad tim - jsou to opravdu tri ruzne koncepty, ktere se v tridach smesuji, a trochu pravda problematicka terminologie na tom nic nemeni.

Cikada_

Re:Dědičnost dnes
« Odpověď #168 kdy: 18. 01. 2017, 20:17:50 »
Odkdy je čtverec (či obdélník)  prostorový útvar??!!! Zpátky na základku! (Proč mluvíte o obsahu?? Proč o dvou nezávislých proměnných?? Mimochodem to, že velikost strany a je stejná jako velikost strany b neznamená, že jsou to nějaké závislé proměnné. Tohle jsou základy matematiky, to by měl každý programátor znát!)

Vhodná definice pojmu (resp. třídy) čtverec se může v závislosti na kontextu dost lišit. Dovedu si představit problémy, pro které se hodí snad všechny varianty třídy Čtverec a jejích vztahů k třídě Obdélník, které zde byly zmíněny. A pokud bude Čtverec součástí množiny tříd pro reprezentaci 3D scény, může být chápán jako prostorový útvar odvozený z Kružnice (která je odvozená z třídy Bod). Zároveň může být Čtverec bázovou třídou pro obdélník i krychli.

[/quote]

Naneštěstí pro vás nemluvil o o třídě, ale o pojmu čtverec a ten je poněkud jasně vymezený. To, že si to v kódu naprasíte odtrženě od jakékoliv vazby na ten pojem, nic nemění. Čtverec je rovinný útvar a vaše představy na tom nic nezmění. (Upřímně pořád tajně doufám, že jen trollíte...)

Čtverec je speciální případ obdélníku, který má shodou okolností všechny strany stejně dlouhé. Tečka. Tohle se učí na ZŠ...

...a teprve v matematických předmětech na vysoké škole se člověk dozví, že ty "pravdy" ze ZŠ jsou většinou zjednodušení platná jen za specifických podmínek.

Ano, pokud chceme generalizovat. Nicméně bavili jsme se o čtverci, takže bych rád viděl nějaký smysluplný důkaz o tom, že čtverec není rovinným tělesem a není speciálním případem obdélníku (respektive na které vysoké škole vám tvrdili, že toto neplatí? nebo prostě jen plácáte?).

spasitel

Re:Dědičnost dnes
« Odpověď #169 kdy: 18. 01. 2017, 20:48:59 »


kutr

Re:Dědičnost dnes
« Odpověď #170 kdy: 19. 01. 2017, 06:48:30 »
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.

n

Re:Dědičnost dnes
« Odpověď #171 kdy: 19. 01. 2017, 07:34:29 »
...Ctverec je specialni pripad obdelniku, ale opravdu od sebe nemohou dedit.

Platí vše, co pro obdélník, též pro čtverec?

No ctverec je specialni pripad obedlniku, ktery ma stejne hrany. Nicmene obdelnik muze mit ruzne dlouhe hrany, narozdil od ctverce, ktery nesmi mit ruzne dlouhe hrany, protoze by pak nebyl ctvercem. Pokud tedy mas moznost menit hrany, tak je tento rozpor problematicky. Je otazka pohledu co s tim bude clovek delat. Jak uz nekdo psal, je treba navrhovat podle ucelu. Problem je, ze ucel se casto muze zmenit,  casem nekdo prijde a zmeni pozadavky na system, coz muze vest k celemu prepisu vseho, nebo k ruznym ochcavkam. Pri vyvoji je casto potreba najit nejaky kompromis mezi prilis komplikovanym a robustnim navrhem(ktery stejne nemusi stacit, protoze v budoucnu nekdo nastavi nejaky "absurdni pozadavek" na system) a mezi slepenym hovnem, ktere je uplne nahouby jeste driv, nez je system dokonceny.

Re:Dědičnost dnes
« Odpověď #172 kdy: 19. 01. 2017, 09:56:12 »
Ř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ý.

Na tom, že OOP zahrnuje více konceptů, se shodneme. Jeden z těch konceptů je implementován v jazyce Smalltalk, jiný v C++ a Javě. Ten druhý pochází ze Simuly, která vznikla před Smalltalkem. Já jsem výraz "původní OOP" pochopil jako "první v čase", nikoliv "co bylo jako OOP poprvé nazvané". Přijde mi, že možné jsou v češtině oba významy. Stačí vyjasnit si nedorozumění a věcně odpovědět na otázku...

Inkvizitor

Re:Dědičnost dnes
« Odpověď #173 kdy: 19. 01. 2017, 10:21:13 »
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.

gll

Re:Dědičnost dnes
« Odpověď #174 kdy: 19. 01. 2017, 10:33:46 »
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.

milan:1

Re:Dědičnost dnes
« Odpověď #175 kdy: 19. 01. 2017, 10:56:24 »
ja som sa nieco pytal a na mna sa s prepacenim vysrali. hlavne ze riesili stvorce a obdlzniky. a pytal som sa len na radu

balki

Re:Dědičnost dnes
« Odpověď #176 kdy: 19. 01. 2017, 11:20:43 »
ja som sa nieco pytal a na mna sa s prepacenim vysrali. hlavne ze riesili stvorce a obdlzniky. a pytal som sa len na radu

Spytajte sa este raz, ja som imho odpovedal :)

milan:1

Re:Dědičnost dnes
« Odpověď #177 kdy: 19. 01. 2017, 11:32:05 »
ja som to implementoval v style:

Kód: [Vybrat]
public class Base {
 
   public void ConnectionChanged() {}

}

public class Class1 : Base
{
    private Obj1 _field;

    public Class1(){
      _field = Factory.Get(IObj1);
      _field.ConnectionChanged += OnConnectionChanged;
    }

     private void OnConnectionChanged() {  base.ConnectionChanged; }
}

tak este raz :)

gll

Re:Dědičnost dnes
« Odpověď #178 kdy: 19. 01. 2017, 12:21:29 »
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

balki

Re:Dědičnost dnes
« Odpověď #179 kdy: 19. 01. 2017, 12:41:13 »
ja som to implementoval v style:

Kód: [Vybrat]
public class Base {
 
   public void ConnectionChanged() {}

}

public class Class1 : Base
{
    private Obj1 _field;

    public Class1(){
      _field = Factory.Get(IObj1);
      _field.ConnectionChanged += OnConnectionChanged;
    }

     private void OnConnectionChanged() {  base.ConnectionChanged; }
}

tak este raz :)

Ja odpoviem, ze zavisi od situacie.  Ak je to teda C# a nepokazi vam to hierarchiu dedenia, spravit nadtriedu so spolocnym spravanim je uplne legitimny pristup. Dalej je mozne pouzit navrhovy vzor adapter, v ktorom je vyuzita delegacia na povodnu triedu + pridane nejake metody. (Vo vzorovych prikladoch sa neda povodny objekt menit, ale spravil by som "mutanta" medzi adapterom a strategy. V strategy sa da delegat menit). C# neovladam, takze vam to tu nenakodim, ale hadam pri troche googlenia sa da pochopit, na co myslim :)