Rudolf Pecinovský: Učíme OOP (9) - Kvalifikace a klíčové slovo this, metody vracející hodnotu

Friday, March 21, 2003 ·

Seriál o výuce objektově orientovaného programování postupuje k podkapitolám 2.10 Kvalifikace a klíčové slovo this a 2.11 Metody vracející hodnotu. V minulém díle jsme si probrali definici atributů a definování vlastní metody.

2.10 Kvalifikace a klíčové slovo this

Název proměnné následovaný tečkou je označován jako kvalifikace metody, protože blíže určuje (kvalifikuje), o čí metodu se jedná, tj. které instance je ta metoda (které instanci posíláme zprávu). Technicky vzato, volanou metodu musíme mimo jiné kvalifikovat i proto, že potřebujeme, aby mohla pracovat s atributy metod dané instance. Kdybychom metodu nekvalifikovali, nebylo by jasné, s jakými atributy má pracovat. 

Nyní hned trochu vyvrátím to, co jsem právě řekl. Překladač totiž ví, že volat nekvalifikovanou metodu instance je nesmysl, takže pokud tak učiním, tj. pokud v programu zavolám nekvalifikovanou metodu instance, pokusí se ji kvalifikovat tou instancí, jejíž metodu právě překládá. Podaří-li se mu to, je spokojen. Nepodaří-li se mu to, tj. není-li tato metoda pro danou instanci definována, ohlásí chybu překladu. 

Ukažme si to na příkladu. V minulé kapitole jsme definovali metodu posunVpravo(int). Aby byla souprava metod symetrická, zkusme doplnit i metodu posunVlevo(int). Vzhledem k tomu, že posun vlevo je záporně zadaný posun vpravo, může být řešení velice jednoduché: 

/**

 *  Posune stromek o zadany pocet bodu vlevo,

 *  pri zapornem parametru vpravo.

 * 

 *  @param bodu  pocet bodu, o ktere se smrcek posune

 */

public void posunVlevo( int bodu )

{  //Pro posun vlevo musime zadat zapornou hodnotu

  posunVpravo( -bodu );

}//public void posunVlevo( int bodu )


Příkaz v těle metody bychom mohli „převyprávět“: zavolej metodu posunVpravo(int) té instance, kterou já mám posunout vlevo. 

Situaci, kdy si překladač kvalifikaci domyslí, označujeme jako implicitní kvalifikace, na rozdíl od explicitní kvalifikace, při níž programátor kvalifikuje metodu (nebo jinou část programu) sám. 

Řada programátorů nerada vidí používání nekvalifikovaných (přesněji implicitně kvalifikovaných) atributů a metod a dává přednost důsledné explicitní kvalifikaci. K té slouží klíčové slovo this, které vždy zastupuje tu instanci, v jejíž metodě toto klíčové slovo použijeme. S použitím klíčového slova this bychom předchozí metodu zapsali:

public void posunVlevo( int bodu )

{  //Pro posun vlevo musime zadat zapornou hodnotu

  this.posunVpravo( -bodu );

}//public void posunVlevo( int bodu )


Klíčové slovo this nám umožňuje kvalifikovat nejenom metody, ale i atributy. Při definici metod s parametrem se např. často stane, že nám jako nejvhodnější název parametru připadá název atributu, jehož hodnotu tento parametr nastavuje. V definici metody je pak ale třeba rozhodnout, o který z obou objektů se v tom kterém případě jedná. 

Překladač se rozhoduje podle hesla „Bližší košile než kabát“. Při výběru objektu, který daný identifikátor označuje, dá přednost parametru před atributem, protože parametr byl definován „právě tady“ v hlavičce metody, kdežto atribut je definován kdesi zcela mimo metodu. 

Budeme-li chtít překladač přesvědčit, že v tomto případě máme na mysli atribut, musíme atribut kvalifikovat klíčovým slovem this. Kdybychom v naší třídě měli např. atribut x, mohli bychom jeho nastavovací metodu definovat následovně: 

public void setX( int x )

{ 

  this.x = x;

}//public void setX( int x )



Rudolf Pecinovský

0 comments:

Články dle data



Učitelské listy

Nabídka práce

Česká škola - portál pro ZŠ a SŠ

Česká škola poskytuje svým čtenářům diskusní prostor k vyjádření názorů na školskou problematiku. Tyto příspěvky se nemusí shodovat se stanoviskem redakce České školy a jsou uveřejňovány jako podnět k dalším diskusím.

Obsah článků nemusí vyjadřovat stanovisko redakce nebo vydavatele Albatros Media, a.s.


Všechna práva vyhrazena.

Tento server dodržuje právní předpisy
o ochraně osobních údajů.

ISSN 1213-6018




Licence Creative Commons

Obsah podléhá licenci Creative Commons Uveďte autora-Neužívejte dílo komerčně-Nezasahujte do díla 3.0 Česká republika, pokud není uvedeno jinak nebo nejde-li o tiskové zprávy.



WebArchiv - archiv českého webu



Tyto webové stránky používají k poskytování služeb, personalizaci reklam a analýze návštěvnosti soubory cookie. Informace o tom, jak tyto webové stránky používáte, jsou sdíleny se společností Google. Používáním těchto webových stránek souhlasíte s použitím souborů cookie.