Čtvrtý díl o výuce objektově orientovaném programování se zabývá metodami tříd. Stejně jako v předchozích dílech i zde naleznete vyčerpávající popis a několik názorných sejmutých obrazovek. Pro lepší orientaci jsme tento díl rozdělili do několika kapitol.
1.4 Metody třídy
Někdy potřebujeme zaslat zprávu, která se netýká jedné konkrétní instance, ale týká se celé třídy. Rodičovská třída totiž své instance neopouští, ale uchovává informace, které jsou pro všechny její instance společné a které mohou její instance kdykoliv využít. Zároveň také často poskytuje metody, které umožňují tyto informace ovlivnit nebo vykonat jinou akci, jež není svázána s žádnou její konkrétní instancí.
Podívejme se např. na náš předchozí příklad s geometrickými tvary. Na příkaz presunXXX() se obrazce přesunou o předem stanovený počet obrazových bodů směrem XXX. Velikost tohoto kroku je přitom pro všechny instance dané třídy stejná – je to právě ten druh informace, kterou instance sdílejí prostřednictvím své rodičovské třídy. Rozhodneme-li se proto velikost tohoto implicitního přesunu změnit, musíme poslat zprávu celé třídě.
Podívejte se znovu na obrázek 1 . Ve střední části místní nabídky třídy Obdelnik si můžete všimnout dvou položek, jejichž zadáním posíláme zprávu celé třídě. Zasláním zprávy getKrok() se třídy zeptáte na současnou velikost kroku, zasláním zprávy setKrok(int) nastavíte novou velikost tohoto kroku. Tato velikost pak bude platit pro všechny instance dané třídy, tj. i pro ty, které vznikly předtím, než jsme nastavili novou velikost kroku, a které proto doposud používaly velikost původní.
Úkol 1: Otevřete místní nabídku některé třídy a zadejte v ní příkaz void setKrok(velikost). V následně otevřeném dialogovém okně zadejte novou velikost kroku – dejme tomu 100 bodů – a vyzkoušejte, jak budou jednotlivé instance reagovat. Všimněte si, že se krok změnil pro všechny (staré i nové) instance dané třídy, avšak instance jiných tříd na něj vůbec nereagují a dál se přesouvají původně nastavenou velikostí kroku.
Zkuste znovu změnit velikost kroku, avšak tentokrát pro jinou třídu. Nastavte jí krok např. na 5 bodů a znovu vše vyzkoušejte.
Úkol 2: Velmi užitečnou metodou třídy bude pro vás při vašich experimentech metoda smaz() třídy Plátno. Po našich předchozích pokusech máte již plátno jistě zaplněné několika grafickými tvary. Zavolejte proto tuto metodu z místní nabídky třídy plátno a budete mít plátno čisté.
Poznámka: Metoda smaz() smaže opravdu pouze plátno, tj. „natře“ je na bílo. V žádném případě neodstraňuje objekty z paměti – pouze smaže obrázek, který jste na plátno nakreslily. Můžete se o tom přesvědčit tak, že kterýkoliv z objektů, na nějž máte odkaz, požádáte, aby se znovu nakreslil, tj. zadáte v jeho místní nabídce příkaz void kresli(). |
Poznámka_pro_šťouraly: Metoda smaz() třídy Platno není pravou metodou třídy. Měla by to být správně metoda konkrétního plátna. Protože však víme, že toto plátno je jedináček, je z jistého úhlu pohledu jedno, jak metodu deklaruji. V našem programu je definována jako metoda třídy proto, abyste k ní měli snadný přístup a nemuseli kvůli smazání plátna pracně získávat odkaz na jeho instanci. Přiznávám, že z hlediska správného programování je to nečisté, ale pro naše praktické účely je to výhodné. |
Rudolf Pecinovský
0 komentářů:
Okomentovat