...a tomu se, milé děti, říká "znovupoužitelnost kódu v OOP"
To je ale překvápko. Z různých zadání vypadla různá řešení
Možná jsem naivní ale mám pocit, že ta bublina nekritického obdivu OOP začíná trochu splaskávat. Jsem zvědavý, co za stříbrnou kulku přijde teď.
Nicméně já bych se vrátil k původnímu dotazu a podpořil bych Kit-a: stude, koukni se na jazyky, kde se na dědičnost nehraje a místo toho se používají volně kombinovatelné protokoly. Největší šanci na mainstreamovost má asi Go.
Nicméně já bych se vrátil k původnímu dotazu a podpořil bych Kit-a: stude, koukni se na jazyky, kde se na dědičnost nehraje a místo toho se používají volně kombinovatelné protokoly. Největší šanci na mainstreamovost má asi Go.Různé implementace podobného principu:Go: https://tour.golang.org/methods/5Elixir: http://elixir-lang.org/getting-started/protocols.htmlHaskell: https://www.haskell.org/tutorial/classes.htmlRust: https://doc.rust-lang.org/book/traits.html
Zrovna Go to má takhle: "Dědí" se jenom interface, nejsou virtuální metody a předek tak nemůže zavolat metodu z potomka. Pomůže to k něčemu ?
Citace: LSP 10. 09. 2015, 16:49:42Zrovna Go to má takhle: "Dědí" se jenom interface, nejsou virtuální metody a předek tak nemůže zavolat metodu z potomka. Pomůže to k něčemu ?Nedědí se nic. Předek nemůže volat metodu potomka, protože žádný předek a potomek neexistuje. Pomůže to k tomu, že se nebudou vést nekonečné debaty, jestli je čtverec potomek obdélníka nebo obdélník předem čtverce.
Nedědí se nic. Předek nemůže volat metodu potomka, protože žádný předek a potomek neexistuje. Pomůže to k tomu, že se nebudou vést nekonečné debaty, jestli je čtverec potomek obdélníka nebo obdélník předem čtverce.
Citace: Ondra Satai Nekola 09. 09. 2015, 18:25:13Projed si historii diskuse. Problem nastane, kdyz mas mutable objekty.To je vše o tom, že si někdo myslí, že čtverec je obdélník. Když pak zjistí, že některé vlastnosti na to nepasují, zavrhne dědění jako celek - s vaničkou vyleje i dítě. Přitom kdyby neudělal chybu v počátečním předpokladu, že čtverec == obdélník, tak by věděl, že tyto dvě třídy od sebe dědit nemohou.
Projed si historii diskuse. Problem nastane, kdyz mas mutable objekty.
Citace: Kit 09. 09. 2015, 20:10:30Citace: Ondra Satai Nekola 09. 09. 2015, 18:25:13Projed si historii diskuse. Problem nastane, kdyz mas mutable objekty.To je vše o tom, že si někdo myslí, že čtverec je obdélník. Když pak zjistí, že některé vlastnosti na to nepasují, zavrhne dědění jako celek - s vaničkou vyleje i dítě. Přitom kdyby neudělal chybu v počátečním předpokladu, že čtverec == obdélník, tak by věděl, že tyto dvě třídy od sebe dědit nemohou.Nebo dědit mohou, ale musí být na to objektový systém připraven, příkladem být může CLOS.
Proč tady musí být zatvrzelí odpůrci versus zatvrzelí zastánci dědičnosti? Je tak těžké pochopit, že někdy se dědičnost hodí a jindy ne?
Citace: BoneFlute 09. 09. 2015, 17:43:21Citace: zboj 09. 09. 2015, 14:18:07To 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!To je lidma, ne děděním.
Citace: zboj 09. 09. 2015, 14:18:07To 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!
To je dost nesmysl, bo code reuse.
Někteří diskutující by z obavy před porušením LSP nejraději tyhlety dědičnosti úplně zakázali a vyhodili z OOP.
Citace: Kit 10. 09. 2015, 19:52:02Proč tady musí být zatvrzelí odpůrci versus zatvrzelí zastánci dědičnosti? Je tak těžké pochopit, že někdy se dědičnost hodí a jindy ne? Protože code reuse. Mít čtyři různé objekty je teoreticky správné, ale prakticky nežádoucí a kontraproduktivní. Stejně ty čtyři různé objekty budou jenom boiler plate pro volání funkcí společných pro všechny čtyři varianty.
Přesně! Tady nejde o zatvrzelé odpůrce dědičnosti, ale o zatvrzelé zastánce dědičnosti pro nevhodná použití. Dědičnost na code reuse se používá proto, že máme blbý jazyky, který to lépe neuměj.