NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
S účinností od 26. 3. jsme aktualizovali Zásady zpracování osobních údajů – doplnili jsme informace o monitorování telefonických hovorů se zájemci o studium. Ostatní části zůstávají beze změn.

Diskuze – Lekce 8 - Dědičnost a polymorfismus

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:5. května 10:30

"Atributy
private a metody jsou chápány jako speciální logika konkrétní
třídy, která je potomkovi utajena, i když ji vlastně používá, nemůže
ji měnit"

To není úplně přesné a je to spíš zavádějící.

Potomek prostě NEMŮŽE ani použít privátní atributy/metody předka. Private atributy/metody může skutečně použít jen ta jedna třída, kde je to definováno.

Celkově i dědičnost funguje abstraktně natolik, že na pozadí se vytváří objekt předka (proto je potřeba při jeho vytvoření i konkretizovat jeho konstruktor, aby se vytvořil někde na pozadí Javy objekt předka).

V podstatě dědičnost není nic jiného, než zkrácená verze toho, že bychom měli dva objekty (tak bychom to dělali ručně, kdyby neexistovala dědičnost).

Když si vezmu konkrétní příklad z článku, tak bez dědičnosti by to vypadalo "ručně" takto:
Vytvořím objekt Uživatel.
Potom vytvořím objekt Administrátor (který má v sobě referenci na dřív vytvořeného uživatel).
Administrátor bude mít stejně pojmenované metody, které v sobě obsahují jediný příkaz:

uzivatel.nazev stejné metody

A celá dědičnost je jen o tom, že toto automaticky funguje na pozadí v Javě.
Pokud používám metodu předka, tak Java vyhledá metodu se stejným názvem a stejným typem a počtem parametrů. Tu automaticky provolá.

Ale potomek (stejně jako každá jiná třída) nemůže u předka ani použít, ani zavolat ani upravovat atributy/metody modifikátoru přístupu private.

Potom je samozřejmě u dědičnosti důležitá teorie, protože je skutečně potřeba zvážit, jak a kdy ji použít (to je analytická část, která z nás dělá programátory), ale to už je i v článku zmíněno.

Jen jsem chtěl poukázat na tuhle nepřesnost, kterou by někdo mohl pochopit špatně, že potomek by snad mohl použít private atributy/metody předka. Nic takového neexistuje.

Odpovědět
5. května 10:30
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:5. května 11:02

"A hlavně - když změníme jediný atribut v mateřské třídě, automaticky se tato změna všude podědí."

Tady bych možná jen v rámci edukace v článku doplnil, že toto je právě podstata, která je na dědičnosti velmi důležitá a která představuje podstatné výhody a zároveň i závažné nevýhody.

Pokud se někdo zblázní a bude dědit ze všeho (aby ušetřil kód), tak potom se může stát, že nepatrná změna někde v jednom z jeho předků rozmr... pardon pokazí celý systém :)

Takže super článek, dobře popsaný, ale určitě bych zde doplnil i případy, kdy se dědičnost naopak raději nepoužívá a hlavně, že ta největší práce je na tom zvážit, zda-li dědičnost použít nebo ne.
To ani AIčko mnohdy neporadí správně. To nemůže obecně totiž říct nikdy nikdo! Závisí to na projektu.

Osobně v tomto vidím jednu z velkých krás programování. Je to to samé, jako dělník s nářadím. Mám několik různých kladiv. Na malý hřebík asi nepoužiju velké betonové kladivo, naopak u velkých hřebíků mi malinké kladívko těžko vystačí.
U programování je to úplně to samé - máme k dispozici spoustu mechanik a prostředků, jak docílit zadanému zadání.
A my jako programátoři musíme rozlišit, kdy je co vhodné.
A hlavně žádné řešení není vždy správně, žádné není vždy špatně. Já tady vymyslím řešení pro nějaký příklad, pak přijde jiný programátor a najde o mono efektivnější řešení.
Naopak efektivnější řešení je sice skvělé, ale třeba může jít o aplikaci, kde bude záležet na každé milisekundě, takže méně abstrakce je v takovém případě to lepší řešení.

Tady na tomto článku bych se i snažil povzbudit lidi v tom, že oni budou ty mozky, ne nějaké hloupé AI. (pozitivně motivovat :) )

Odpovědět
5. května 11:02
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 52.