Autor: | Miroslav Beneš |
---|---|
Organizace: | Katedra informatiky FEI VŠB-TU Ostrava |
Popis: | Cílem tohoto cvičení je základní seznámení s třídami a objekty. |
Třída Zlomek obsahuje dvě instanční proměnné, citatel a jmenovatel. Tyto proměnné jsou označeny klíčovým slovem private, takže jsou přístupné pouze uvnitř třídy Zlomek. Ostatní třídy mohou volat veřejné metody getCitatel() a getJmenovatel() pro čtení obou promenných, jejich hodnotu však měnit nemohou (pojmenování těchto přístupových metod je dáno jistou konvencí, takže se musíme smířit s jinak nevhodnou kombinací angličtiny a češtiny). Můžeme se tedy spolehnout na to, že je hodnota zlomku vždy normalizovaná, neboť toto pravidlo metody třídy Zlomek dodržují a nikdo jiný nemůže s privátními proměnnými manipulovat.
Operace nad zlomky jsou zastoupeny sčítáním a násobením. Tyto operace jsou ale implementovány různě. Operace krat(z) je metodou instance třídy Zlomek; musí se tedy volat na konkétní zlomek, který je předán jako hodnota proměnné this. Ve volání z1.krat(z2) tedy proměnná z1 představuje hodnotu this a proměnná z2 je přiřazena parametru z. Pokud nemůže dojít ke konfliktu se jmény parametrů nebo lokálních proměnných, nemusíme uvnitř instanční metody this uvádět, jak ukazuje třeba metoda normalizuj() nebo toString(). Metoda krat() nevrací žádný výsledek (je typu void), protože pouze modifikuje obsah zlomku reprezentovaného proměnnou this.
Naproti tomu statická metoda plus(z1, z2) dostane jako parametry dva objekty typu Zlomek a vrátí nový objekt typu Zlomek reprezentující součet obou zlomků. Tato metoda je statická, tj. jedná se o metodu třídy, se kterou není sdružena žádná proměnná this. Taková metoda může používat pouze statické členy třídy Zlomek, neboť není svázána s žádnou její instancí.
Metoda toString() je standardní metodou, kterou každá třída dědí ze společné bázové třídy java.lang.Object. Tato metoda realizuje převod objektu na textovou reprezentaci, která je pak užitečná např. ve volání metody print nebo println standardního výstupního souboru System.out, případně při spojování řetězců s objekty operátorem +. V těchto případech totiž dochází k internímu převodu objektu na řetězec, tedy právě k volání metody toString(). Standardní implementace této metody pouze vypíše jméno třídy a šestnáctkové číslo, které nám o konkrétním objektu příliš mnoho neřekne. Zkuste celou metodu toString() zakomentovat a uvidíte, jak se výstup změní.
Jako domácí úkol můžete rozšířit třídu Zlomek o další operace a implementovat je buď jako instanční metody nebo jako statické metody třídy. V rámci cvičení se ale nejprve pusťte do následujícího příkladu.
Uvedené tři varianty konstruktoru představují příklad přetížené operace, která se liší pouze počtem nebo typy parametrů. Jiným příkladem přetěžování jsou operace print() nebo println() standardního výstupního souboru System.out. Odpovídá jim řada metod rozlišených typem parametru, jehož hodnota se má vypsat. Navíc existuje i metoda println() bez parametrů, která pouze odřádkuje.