Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 10. diel - Aréna s mágom (dedičnosť a polymorfizmus)

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
Kit
Tvůrce
Avatar
Odpovedá na Jan Vargovský
Kit:23.7.2013 20:27

Správně. Degraduje to třídy na pouhé pascalovské struktury. Programátor se pak hrabe z vnějšku přímo v objektech, přímo modifikuje jejich atributy. To znamená, že musí znát strukturu objektu, tedy nejen rozhraní, ale i implementaci.

David Hartinger Nejde o způsob zápisu, ale o rozhraní, které je v obou případech totožné a stejně špatné.

Odpovedať
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovedá na Kit
David Hartinger:23.7.2013 20:55

Ano, takže na to gettery a settery vůbec nemají vliv.

Odpovedať
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovedá na David Hartinger
Kit:23.7.2013 21:31

Jistě, vliv na to nemají. Takže je tam to {get; set;} jenom proto, aby se vlk nažral (tvářilo se to jako OOP) a koza zůstala celá (programátoři stále používají imperativní způsob manipulace s atributy objektů). To není řešení problému, ale jeho obcházení.

Odpovedať
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovedá na Kit
David Hartinger:23.7.2013 21:33

Ale gettery tohle řešit nemají, je to pouze standardizace přístupu k datům objektu, abys nemusel přemýšlet jestli je tam public proměnné nebo getter, případně pak přepisovat půlku aplikace protože jsi se rozhodl dát atribut read-only.

Odpovedať
New kid back on the block with a R.I.P
Avatar
Kit
Tvůrce
Avatar
Odpovedá na David Hartinger
Kit:23.7.2013 21:46

Jistě, takže pokud v C# potřebuješ veřejně přístupnou proměnnou, uděláš

public int Sekundy;

Pokud chceš omezit přístup, tak uděláš jednoduchou úpravu

public int Sekundy {get; private set;}

Rozhraní třídy se kromě omezení práva nezmění.

Pokud chci dodržovat nějaké konvence a chci atributy privat/public, stačí je rozlišovat tímto klíčovým slovem a velikostí písmene. Klauzule {get; set;} je v této podobě zcela zbytečná. Nemá na nic vliv, je to vlastně jen komentář.

public int Sekundy;

pro veřejné versus

private int sekundy;

pro soukromé.

Editované
Odpovedať
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovedá na David Hartinger
Kit:23.7.2013 21:52

Zjednodušeně řečeno: Když napíšeš

public int Sekundy;

nadeklaroval jsi atribut Sekundy s veřejným getterem i setterem. Ty dvě metody tam jsou, i když jsem je tam explicitně neuvedl.

Odpovedať
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Michal Dvorak
Nevyplnené
Avatar
Michal Dvorak:30.7.2013 13:49

Jsem zmateny z Magovy metody NastavZpravu(), ano chapu ze je verejna a tudiz zdedena z tridy Bojovnik, ale promenna 'zprava' je private a tudiz by k ni instance gandalf nemela mit pristup ani skrze public metodu. Nebo public metoda ma pristup i ke zdedenym private promennym?
Omlouvam se jestli je to hloupy dotaz jen mi to nejak nejde pres hlavu.

Avatar
Odpovedá na
Michal Žůrek - misaz:30.7.2013 13:56

není to hloupý dotaz, public metoda může ovlivňovat private členy a to i když je zděděná (teda alespoň si to tak myslím, že by to tak mělo být).

Když dědíš tak existují i ty private, ale můžeš s nimi pracovat jen pomocí předka. Potomek se k ním nedostane.

Avatar
Michal Dvorak
Nevyplnené
Avatar
Odpovedá na Michal Žůrek - misaz
Michal Dvorak:30.7.2013 14:02

Jo takhle, takze kdybych vytvoril ve tride Mag metodu NastavMagZpravu(), tak s ni bych se k promenne 'zprava' nedostal ale protoze NastavZpravu je od predka tak tam ten pristup je. Jestli to tak je tak moc dekuji, to by davalo smysl.

Avatar
Kit
Tvůrce
Avatar
Odpovedá na
Kit:30.7.2013 14:10

Instance gandalf používá metodu NastavZpravu z rodičovské třídy Bojovnik. Ta metoda se při dědění nekopíruje, zůstává dál metodou třídy Bojovník a zachovává si stejná práva k objektům uvnitř.

Můžeš to také vidět tak, že gandalf je instancí dvou tříd - Mag a Bojovnik. Používá metody obou, ale pokud dojde ke kolizi jmen (překrytí), dá vždy přednost metodě třídy Mag. Metoda NastavZpravu se však vyskytuje pouze ve třídě Bojovnik a proto je použita její metoda s jejími právy ve třídě Bojovnik.

Odpovedať
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 138.