Lekce 3 - Atributy a metody v Javě Nové
V minulé lekci, První objektová aplikace v Javě - Hello object world, jsme si ukázali jak OOP funguje, vysvětlili jsme si pojmy třída a metoda. Naprogramovali jsme si naši první objektovou aplikaci.
V dnešní lekci Javy si uvedeme parametry metod, naučíme se používat atributy a tím dokončíme naši první objektovou aplikaci. Nakonec si ukážeme využití komentářů.
Parametry metody
Dejme nyní naší metodě pozdrav()
parametr
jmeno
, aby dokázala pozdravit konkrétního uživatele. Přejdeme
do souboru Zdravic.java
a takto kód upravme:
public void pozdrav(String jmeno) { System.out.printf("Ahoj uživateli %s%n", jmeno); }
Vidíme, že syntaxe parametru metody je stejná, jako syntaxe proměnné.
Kdybychom chtěli parametrů více, oddělujeme je čárkou. Upravíme nyní
naši metodu main()
v souboru HelloObjects.java
:
{JAVA_OOP} {JAVA_MAIN_BLOCK} Zdravic zdravic = new Zdravic(); zdravic.pozdrav("Karel"); zdravic.pozdrav("Petr"); {/JAVA_MAIN_BLOCK} {/JAVA_OOP}
{JAVA_OOP} public class Zdravic { public void pozdrav(String jmeno) { System.out.printf("Ahoj uživateli %s%n", jmeno); } } {/JAVA_OOP}
A výsledek:
Konzolová aplikace
Ahoj uživateli Karel
Ahoj uživateli Petr
Náš kód je nyní v metodě a my ho můžeme jednoduše pomocí parametrů volat znovu s různými parametry. Nemusíme 2x opisovat "Ahoj uživateli...". Kód budeme odteď dělit logicky do metod.
Atributy třídy
Třídě přidáme nějaký atribut, nabízí se atribut text
,
kde bude uložen text pozdravu. Atributy se definují stejně, jako proměnné.
Jako u metod platí, že před ně píšeme modifikátor přístupu. Pokud
modifikátor nenapíšeme, bude atribut přístupný v rámci daného balíčku
(package
), ale mimo něj už nikoliv. K čemu přesně
modifikátory přístupu slouží si řekneme dále v kurzu. Upravme naši
třídu Zdravic
:
public class Zdravic { public String text; public void pozdrav(String jmeno) { System.out.printf("%s %s%n", text, jmeno); } }
Text nyní musíme pochopitelně nastavit vytvořené instanci v
HelloObjects.java
:
{JAVA_OOP} {JAVA_MAIN_BLOCK} Zdravic zdravic = new Zdravic(); zdravic.text = "Ahoj uživateli"; zdravic.pozdrav("Karel"); zdravic.pozdrav("Petr"); zdravic.text = "Vítám tě tu programátore"; zdravic.pozdrav("Richard"); {/JAVA_MAIN_BLOCK} {/JAVA_OOP}
{JAVA_OOP} public class Zdravic { public String text; public void pozdrav(String jmeno) { System.out.printf("%s %s%n", text, jmeno); } } {/JAVA_OOP}
Výsledek:
Konzolová aplikace
Ahoj uživateli Karel
Ahoj uživateli Petr
Vítám tě tu programátore Richard
Návratová hodnota metody
Vzhledem k objektovému návrhu není nejvhodnější, aby si každý objekt
ovlivňoval vstup a výstup, jak se mu zachce. Pochopitelně narážíme na
naše vypisování do konzole. Každý objekt by měl mít určitou kompetenci a
tu by neměl překračovat. Pověřme náš objekt pouze sestavením pozdravu a
jeho výpis si zpracujeme již mimo, v našem případě v metodě
main()
. Výhodou takto navrženého objektu je vysoká
univerzálnost a znovupoužitelnost. Objekt doposud umí jen psát do konzole,
my ho však přizpůsobíme tak, aby daná metoda text pouze vracela a bylo na
jeho příjemci, jak s ním naloží. Takto můžeme pozdravy ukládat do
souborů, psát na webové stránky nebo dále zpracovávat.
Jelikož chceme, aby metoda vracela hodnotu String
, změníme
její dosavadní typ void
na String
. K návratu
hodnoty použijeme příkaz return
. Příkaz return
metodu ukončí a navrátí hodnotu. Jakýkoli kód v těle metody po příkazu
return
se již neprovede! Upravme obě třídy:
Metoda pozdrav()
v souboru Zdravic.java
:
public String pozdrav(String jmeno) { return String.format("%s %s", text, jmeno); }
Tělo metody main()
v souboru
HelloObjects.java
:
{JAVA_OOP} {JAVA_MAIN_BLOCK} Zdravic zdravic = new Zdravic(); zdravic.text = "Ahoj uživateli"; System.out.println(zdravic.pozdrav("Karel")); System.out.println(zdravic.pozdrav("Petr")); zdravic.text = "Vítám tě tu programátore"; System.out.println(zdravic.pozdrav("Richard")); {/JAVA_MAIN_BLOCK} {/JAVA_OOP}
{JAVA_OOP} public class Zdravic { public String text; public String pozdrav(String jmeno) { return String.format("%s %s", text, jmeno); } } {/JAVA_OOP}
Nyní je náš kód dle dobrých praktik.
Komentáře
Ještě naši třídu okomentujme, jak se sluší a patří. Komentáře
budeme psát nad název třídy a nad název každého atributu a metody. K
jejich zápisu použijeme /** Popisek */
. Vyplatí se nám
to ve chvíli, když na třídě používáme nějakou metodu, její popis se
nám zobrazí v našeptávači. Zdokumentovaná třída může vypadat např.
takto:
/** * Třída reprezentuje zdravič, který slouží ke zdravení uživatelů */ public class Zdravic { /** * Text pozdravu */ public String text; /** * Pozdraví uživatele textem pozdravu a jeho jménem * @param jmeno Jméno uživatele * @return Text s pozdravem */ public String pozdrav(String jmeno) { return String.format("%s %s", text, jmeno); } }
Znaky /*
začíná víceřádkový komentář a končí
opačnými znaky */
, syntaxe popisků se nazývá
Javadoc.
Nad místem, kde chceme vytvořit dokumentaci (např. nad metodou/atributem)
napíšeme /**
a stiskneme klávesu Enter:

Metodu, atribut či třídu tak jednoduše a rychle popíšeme. Alternativně
můžeme kliknout například metodu pozd|rav()
(|
značí kurzor v názvu metody) a stiskneme klávesy Alt a
Enter.
Klikneme kurzorem na metodu pozdrav()
v metodě
main()
a IDE nám opravdu popisky zobrazí:

Pokud budete své třídy dobře popisovat, programátorskou dokumentaci k aplikaci vytvoříte poté jediným kliknutím. Z Javadoc umí IntelliJ generovat dokumentaci i ve formátu HTML. Kliknete pravým na třídu v záložce Project a zvolíte z hlavního menu položku Tools -> Generate Javadoc....
U metody pozdrav()
nám to vygenerovalo klíčové slovo
@param
, za ním hned název parametru jmeno
. To
značí, že následující popisek bude patřit parametru jmeno
(popisek může pokračovat i na dalším řádku pro větší přehlednost).
Metoda může mít totiž více parametrů a tím se zajistí, že bude mít
každý parametr vlastní popisek. Dále nám IDE vygenerovalo ještě
klíčové slovo @return
, to značí popisek toho, co nám metoda
vrátí.
A jsme u konce. Námi napsaný program má již nějakou úroveň, i když vlastně nic nedělá. Za úkol máte předělat si naši konzolovou kalkulačku do objektů. A teď už můžeme začít pracovat na naší aréně.
V následujícím cvičení, Řešené úlohy k 3. lekci OOP v Javě, si procvičíme nabyté zkušenosti z předchozích lekcí.
Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 6x (11.73 kB)
Aplikace je včetně zdrojových kódů v jazyce Java