Omezená dědičnost (je něco lepšího než OOP?)

JSH

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #60 kdy: 01. 09. 2015, 11:35:03 »
Rozumím. Já jsem předpokládal, že ta specifikace nadtřídy je korektní.
Nejsem zrovna dobrý teoretik. Co přesně znamená že je specifikace korektní? Co je nekorektní na specifikaci, že nějaká metoda/funkce vrací vždy lichý výsledek?
Citace
Je možná tedy lepší používat tu první definici LSP (tu používá i autor BPravidel):

If for each object o1 of type S there is another object o2 of type T such that for all programs P defined in terms of T, the behavior of P is unchanged when o1 is substituted for o2, then S is a subtype of T.

Já ji nicméně nemám tak rád, neboť tato definice pracuje se všemi chováními - nejen těmi ve specifikaci - což je někdy zbytečně omezující. Nicméně se nemusí řešit správnost specifikace a ani to, co znamená něco dokázat ze specifikace (v tom článku je to definováno - začátek strany 14 - We view each type specification as a theory presentation, i.e., a set of symbols, rules for forming well-formed formula..., ale pochybuji, že se tím v praxi bude někdo řídit).
Podle téhle definice ale nejede při dokazování že Set je podtyp Bag. Pokud Set na rozdíl od Bag vyháže duplicity, tak změní výsledek hodně programů. Vlastně teď marně přemýslím nad Bagem který by nebyl jen kopie Setu, a u kterého by ty podmínky byly splněné.


Radek Miček

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #61 kdy: 01. 09. 2015, 14:04:37 »
Rozumím. Já jsem předpokládal, že ta specifikace nadtřídy je korektní.
Nejsem zrovna dobrý teoretik. Co přesně znamená že je specifikace korektní? Co je nekorektní na specifikaci, že nějaká metoda/funkce vrací vždy lichý výsledek?

Korektní jsem měl na mysli to, že je v souladu s tím programem.

Citace
Citace
Je možná tedy lepší používat tu první definici LSP (tu používá i autor BPravidel):

If for each object o1 of type S there is another object o2 of type T such that for all programs P defined in terms of T, the behavior of P is unchanged when o1 is substituted for o2, then S is a subtype of T.

Já ji nicméně nemám tak rád, neboť tato definice pracuje se všemi chováními - nejen těmi ve specifikaci - což je někdy zbytečně omezující. Nicméně se nemusí řešit správnost specifikace a ani to, co znamená něco dokázat ze specifikace (v tom článku je to definováno - začátek strany 14 - We view each type specification as a theory presentation, i.e., a set of symbols, rules for forming well-formed formula..., ale pochybuji, že se tím v praxi bude někdo řídit).
Podle téhle definice ale nejede při dokazování že Set je podtyp Bag. Pokud Set na rozdíl od Bag vyháže duplicity, tak změní výsledek hodně programů. Vlastně teď marně přemýslím nad Bagem který by nebyl jen kopie Setu, a u kterého by ty podmínky byly splněné.

Jeho třída Set je podtyp té třídy Bag, jelikož i instance třídy Bag se mohou chovat tak, že budou vyhazovat duplicity (stačí jim předat vhodné funkce v konstruktoru).

Radek Miček

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #62 kdy: 01. 09. 2015, 14:55:28 »
stačí jim předat vhodné funkce v konstruktoru

Chyba (tohle bylo u tvarů) - tady se předává FBag bez duplikátů.

Můžeme to zkusit dle definice:

If for each object o1 of type S there is another object o2 of type T such that for all programs P defined in terms of T, the behavior of P is unchanged when o1 is substituted for o2, then S is a subtype of T.

Pro každý o1 typu FSet (bez duplikátů) existuje o2 typu FBag bez duplikátů (to je zřejmé). To, že se chování programů nezmění, když místo o1 použijeme o2 ukážeme například pro put: put vezme neměnný spojový seznam z o1 nebo o2 (je to jedno), přidá na jeho začátek daný prvek a vrátí nový FBag.

Vit

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #63 kdy: 03. 09. 2015, 07:35:20 »
Řekněme, že chci mít objekty čtverec, obdélník, kosočtverec a rovnoběžník. Je jasné, že s jednoduchou dědičností se daleko nedostanu. Proto obecný dotaz: existuje nějaké jiné paradigma, ve kterém lze vztahy mezi objekty vyjádřit lépe? Pokud ano, na jaký jazyk bych se měl podívat?
Preco chces vlastne dedit? Nestacia ti 4 structury bez dedicnosti?

nula

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #64 kdy: 03. 09. 2015, 17:37:12 »
Všichni, kdož jste na takto položený dotaz odpověděli jinak, než že na něj nelze dát uspokojivou odpověď, byste se měli vys..t na programování a raději se věnovat něčemu jinému.
....

Každý návrh se odvíjí od účelu. Nesmí být ani zbytečně abstraktní, ani zbytečně omezující. Odhadnutí správné míry je právě to, co dělá z relativně mechanické, kuchařkovité práce umění. Které ovšem 99% lidí v IT neovládá.


Amen(doufam, ze to neni rouhani).
Konecne nekdo ...


Inkvizitor

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #65 kdy: 03. 09. 2015, 19:10:07 »
Všichni, kdož jste na takto položený dotaz odpověděli jinak, než že na něj nelze dát uspokojivou odpověď, byste se měli vys..t na programování a raději se věnovat něčemu jinému.
....

Každý návrh se odvíjí od účelu. Nesmí být ani zbytečně abstraktní, ani zbytečně omezující. Odhadnutí správné míry je právě to, co dělá z relativně mechanické, kuchařkovité práce umění. Které ovšem 99% lidí v IT neovládá.


Amen(doufam, ze to neni rouhani).
Konecne nekdo ...

Jak konečně? To už bylo v první odpovědi (Ondřej Nekola). Kromě toho je Tebou adorovaný příspěvek vnitřně nekonzistentní - jestliže 99% programátotů jsou nemyslící lamy a měli by toho nechat, zbyl by v branži zlomek původního počtu. O tom, kolik má být zaměstnáno programátorů, rozhoduje trh a protože většina programátorů není geniálních a dokonalých, existují poučky a procesy, které umožňují uvařit aspoň něco a dodat na trh produkt s lidmi kteří jsou.

Tudíž se ten příspěvek sice tváří děsně prakticky, ale ve skutečnosti nic ne(vy)řeší kromě vlastního ega autora. Další věc je, že lidi, kteří jsou jenom umělci (praktici) a nemají žádný přesah do teoretické CS, nemohou obor nikam posunout, takže ta povýšenost je dost k ničemu. Debaty o principech dávají šanci třídit myšlenky a trochu si rozšířit obzor. Neznamená to, že kdo se jich účastní, není schopen banální odpovědi typu "někdy ano, jindy ne".

nula

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #66 kdy: 03. 09. 2015, 22:55:42 »
...

Jak konečně? To už bylo v první odpovědi (Ondřej Nekola). Kromě toho je Tebou adorovaný příspěvek vnitřně nekonzistentní - jestliže 99% programátotů jsou nemyslící lamy a měli by toho nechat, zbyl by v branži zlomek původního počtu. O tom, kolik má být zaměstnáno programátorů, rozhoduje trh a protože většina programátorů není geniálních a dokonalých, existují poučky a procesy, které umožňují uvařit aspoň něco a dodat na trh produkt s lidmi kteří jsou.

1) Ze to napsal Ondrej Nekola jsem si nevsim. Omlouvam se, psal to opravdu prvni.
2) Precti si laskave: https://cs.wikipedia.org/wiki/Hyperbola_(literatura) a nemel tady nesmysly.

Tudíž se ten příspěvek sice tváří děsně prakticky, ale ve skutečnosti nic ne(vy)řeší kromě vlastního ega autora. Další věc je, že lidi, kteří jsou jenom umělci (praktici) a nemají žádný přesah do teoretické CS, nemohou obor nikam posunout, takže ta povýšenost je dost k ničemu. Debaty o principech dávají šanci třídit myšlenky a trochu si rozšířit obzor. Neznamená to, že kdo se jich účastní, není schopen banální odpovědi typu "někdy ano, jindy ne".

Staci tedy zminit tuto pravdu. Nebo ji dat nejak najevo. A ne tady mlet polovinu vlakna(At uz tohoto, nebo podobnych) pi*oviny o getterech a setterech.
O tom presahu je to totalni blabol, ze vsech moznych stran. To nebudu ani rozebirat.

Kit

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #67 kdy: 03. 09. 2015, 23:37:20 »
... pi*oviny o getterech a setterech.

Hele, neotírej si hubu o něco, čemu nerozumíš.

Inkvizitor

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #68 kdy: 04. 09. 2015, 08:02:04 »
1) Ze to napsal Ondrej Nekola jsem si nevsim. Omlouvam se, psal to opravdu prvni.

Nejde o to, kdo to napsal první, ale jelikož už to někdo v diskusi napsal, bylo zbytečné to opakovat a debata šla dál.

2) Precti si laskave: https://cs.wikipedia.org/wiki/Hyperbola_(literatura) a nemel tady nesmysly.

To si číst nemusím. Právě proto, že jsem to vzal jako nadsázku, napsal jsem, že těch lidí by zbyl zlomek a ne že by jich zbylo pouhé procento. Bylo mi úplně jasné, že mě někdo chytí za slovo a bude mi to chtít otlouct o hlavu.

Staci tedy zminit tuto pravdu. Nebo ji dat nejak najevo. A ne tady mlet polovinu vlakna(At uz tohoto, nebo podobnych) pi*oviny o getterech a setterech.

Viz výše - "pravda" byla zjevena, netřeba ji opakovat.

O tom presahu je to totalni blabol, ze vsech moznych stran. To nebudu ani rozebirat.

Bez urážky - je tady pár lidí, od kterých bych podobnou reakci vzal, ale ti kupodivu v diskusi používají argumenty. Ty s tímto přístupem nikam nedojdeš.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #69 kdy: 09. 09. 2015, 14:18:07 »
Řekněme, že chci mít objekty čtverec, obdélník, kosočtverec a rovnoběžník. Je jasné, že s jednoduchou dědičností se daleko nedostanu. Proto obecný dotaz: existuje nějaké jiné paradigma, ve kterém lze vztahy mezi objekty vyjádřit lépe? Pokud ano, na jaký jazyk bych se měl podívat?
Preco chces vlastne dedit? Nestacia ti 4 structury bez dedicnosti?

To je dost nesmysl, bo code reuse. Jasně, šlo by to přes rozšíření (třeba výpočet obsahu), ale to je mimo původní otázku.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #70 kdy: 09. 09. 2015, 14:21:24 »
stvorec extends obdlznik je standardny fail lebo liskov substitutuion principle

Tak v tomto případě LSP perfektně funguje, máš v tom zmatek.

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #71 kdy: 09. 09. 2015, 14:26:44 »
stvorec extends obdlznik je standardny fail lebo liskov substitutuion principle

Tak v tomto případě LSP perfektně funguje, máš v tom zmatek.

Funguje jenom za dalsich okolnosti. Viz vyse, uz se to tu rozebiralo.

perceptron

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #72 kdy: 09. 09. 2015, 17:06:28 »
@zboj
urcite nie
behavior fail

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #73 kdy: 09. 09. 2015, 17:43:21 »
To je dost nesmysl, bo code reuse.

Prakticky každá firma (co jsem viděl), která měla zoufale neudržitelný kód ho měla zoufalí proto, že dědily kůli code reuse. Takže za mě fakt ne!

Re:Omezená dědičnost (je něco lepšího než OOP?)
« Odpověď #74 kdy: 09. 09. 2015, 17:57:13 »
To je dost nesmysl, bo code reuse.

Prakticky každá firma (co jsem viděl), která měla zoufale neudržitelný kód ho měla zoufalí proto, že dědily kůli code reuse. Takže za mě fakt ne!

Jako by to neslo delat jak spatne, tak dobre... (rikam jako clovek, co inklinuje spis ke kompozici a typicky DI)