NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!

Diskuze – Lekce 10 - Aréna s mágem (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
Martin Horáček:16.3.2013 19:41

Zdravím,
chci poděkovat za tenhle parádní tutoriál.
Jediné, co mi nejde, je spustit program s ASCIIart. Píše to: Unrecognized escape sequence.
Díky za radu.

 
Odpovědět
16.3.2013 19:41
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Martin Horáček
David Hartinger:16.3.2013 19:50

To je zpětnými lomítky, napiš před ten string zavináč, takhle:

string s = @"/----\.... atd";

On si jich poté nevšímá a bere je jako obyčejné znaky. V seriálu to někde popisuji, dojdeš k tomu pokud jsi to nepřehlédl.

Odpovědět
16.3.2013 19:50
New kid back on the block with a R.I.P
Avatar
Martin Horáček:16.3.2013 19:55

Díky, funguje.

 
Odpovědět
16.3.2013 19:55
Avatar
Libor Šimo (libcosenior):9.6.2013 9:28

V časti "Konstruktor potomka" je poznámka:

"Pozn. stejně můžeme volat i jiný konstruktor v té samé třídě (ne předka), jen místo base použijeme this.

Nerozumiem ako to použiť. Poradí niekto?

Odpovědět
9.6.2013 9:28
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Jiří Košata - kosata50:9.6.2013 10:58

Například část třídy Kostka ze 3. dílu by mohla vypadat takto:

class Kostka
{
    private int pocetSten;
    private Random random;

    public Kostka(int pocetSten)
    {
        this.pocetSten = pocetSten;
        random = new Random();
    }

    public Kostka(): this(6)
    {
    }
}
 
Odpovědět
9.6.2013 10:58
Avatar
Libor Šimo (libcosenior):9.6.2013 11:32

To znamená, že inštancia Kostka kostka = new Kostka(); má 6 stien?

Odpovědět
9.6.2013 11:32
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Michael Olšavský:9.6.2013 11:55

Přesně tak. Vytvoříš bezparametrový konstruktor, který zavolá svůj konstruktor s parametrem. ;-) Je to v dalších tutoriálech (nebo alespoň myslím).

 
Odpovědět
9.6.2013 11:55
Avatar
Martin Gabriel
Tvůrce
Avatar
Martin Gabriel:11.7.2013 16:02

Trochu jsem si hrál a vytvořil si třídu Drak.
Chtěl jsem dědit z třídy Mág, jelikož Drak používá stejné vlastnosti a metody (místo many dech, místo magickéhoÚtoku ohnivýÚtok, atd), ale když jsem se o tom bavil se kamarádem programátorem, tak mi řekl, že to dělat nemám, protože od Mága bych měl dědit jen pokud je Drak speciální případ Mága, což není (šlo by to např pokud by to byl frost mage / fire mage / arcane mage).
Pokud bych teda postavil kód na tom, že mám hlavní třídu Bojovník, tak bych draka psal téměř stejně jako Mága a vznikal by mi zbytečně duplicitní kód.

Co je teda podle OOP správně?

Editováno 11.7.2013 16:04
Odpovědět
11.7.2013 16:02
"Be the change you want to see in the world" - Michael Scofield
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Martin Gabriel
Kit:11.7.2013 17:18

Pokud by třídy Drak a Mág obsahovaly mnoho společných vlastností, můžeš jim definovat společného předka. Tím může být Bojovník nebo MagickýBojovník:Bo­jovník.

Další možností je použití vzoru Dekorátor. Tím by odpadla dědičnost.

Odpovědět
11.7.2013 17:18
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Honza
Neregistrovaný
Avatar
Honza:20.7.2013 8:50

Super návod, jen mi pořád do hlavy nejde jedna věc. Měl jsem za to, že modifikátor private u proměnné znamená, že s ní lze pracovat pouze v rámci třídy a u potomka už to není možné. Přitom se v mágovi v rámci metody Utoc volá metoda NastavZpravu, ktera je sice protected, ale v jejím těle proběhne změna proměnné zprava, která je v předkovi nastavena na private. Přesto to funguje. Může mi někdo vysvětlit proč?

 
Odpovědět
20.7.2013 8:50
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 10 zpráv z 138.