Metody (úvod)
Metoda patří mezi nejčastěji používané nástroje (téměř) každého programovacího jazyka. Představuje samostatnou část programu konající nějakou specializovanou funkci. Metody jsou umístěny mimo hlavní program, mohou být spouštěny z main() nebo z jakékoliv jiné metody. Metodu zpravidla voláme se seznamem parametrů, kterým předáváme hodnoty potřebné pro výpočet, metoda většinou vrací nějaký výsledek. Existují i metody, kterým nepředáváme žádné údaje, nebo naopak žádné výsledky nevrací. Výhodou jejich používání je zjednodušení struktury programu či možnost opakovaného provádění výpočtů (tj. Nemusíme psát znovu celý kód, pouze zavoláme příslušnou metodu). Z hlediska OOP lze metody chápat jako zprávy zaslané instancím nebo třídám. Metody bývají někdy označovány jako funkce či podprogramy, ale toto označení není přesné.Metody dělíme do dvou skupin:
Nejprve se seznámíme s první skupinou metod.
Metody třídy
Metody třídy představují představují zprávy zaslané třídě jako celku, nelze je volat pro konkrétní instanci. Mohou být používány v případech, kdy ještě neexistuje žádná instance třídy. Metody třídy bývají označovány jako statické metody. Ve statických metodách lze používat pouze statické proměnné nebo lokální proměnné, nemohou v nich být používány proměnné instance. Statické metody jsou v Javě používány při matematických výpočtech: např. Math.sin(x) představuje statickou metodu třídy Math.Deklarace a volání metody
Deklarace metody je tvořena hlavičkou metody a tělem metody. Hlavička obsahuje informaci o jménu metody, typu návratové hodnoty, seznam formálních parametrů. Jméno metody je zpravidla psáno malými písmeny, mělo by vyjadřovat činnost metody. Tělo metody tvoří výkonný kód umístěný uvnitř složených závorek. Metody třídy jsou deklarovány s klíčovým slovem static. Uveďme, že na rozdíl od jazyka C++ nemusíme vytvářet prototyp funkce. V Javě není podstatné, zda volání metody předchází její deklaraci či naopak. Podívejme se poněkud podrobněji na problematiku parametrů metod. Často se setkáváme spojmy formální parametry metod a skutečné parametry metod. Formální parametry nalezneme v deklaraci metody v její hlavičce. Stejně jako jakékoliv jiné proměnné musí být i formální parametry deklarovány
s uvedením datového typu a názvu.
Skutečné parametry používáme při volání metody, s jejich hodnotami metodu voláme. Skutečné parametry by měly být stejného datového typu jako parametry formální. Nejsou -li, je provedena implicitní konverze (pokud je to možné).
Předávání hodnot skutečných parametrů parametrům formálním je prováděno při volání metody. Hodnoty jsou předávány postupně, tj. hodnotě prvního formálního parametru je předána hodnota prvního skutečného parametru, hodnotě druhého formálního parametru hodnota druhého skutečného parametru, atd...
V Javě jsou tedy předávány parametry primitivních datových typů hodnotou. Formální parametr představuje kopii skutečného parametru. Jakákoliv změna hodnoty formálního parametru neovlivní hodnotu skutečného parametru. Pokud metoda nevrací žádnou hodnotu, je její návratový typ void. Má -li metoda návratovou hodnotu (tj. její návratová hodnota je jiného typu než void), musí metoda obsahovat klíčové slovo return s uvedením hodnoty či výrazu, který bude metoda navracet jako výsledek. Dále již nesmí následovat žádný kód, byl by nedostupný, tzv. unreachable kód. Metoda v Javě je schopna vrátit nejvýše jednu hodnotu. Nelze tedy vytvořit metodu, která by přímo vracela dvě hodnoty. Toto omezení lze obejít předáváním parametrů odkazem (viz dále).
Podívejme se na následující příklad, metoda obvod() slouží k výpočtu obvodu kruhu.
static double obvod (double r)// formalni parametr r
{
return 2*Math.PI*r;
}
Pokud je tělo metody krátké, lze metodu zapsat do jednoho řádku static double obvod (double r){return 2*Math.PI*r;}
Metoda má jeden formální parametr typu double, vrací také hodnotu typu double: za klíčovým slovem return následuje výpočet 2r. Metodu voláme z hlavního programu uvedením jejího názvu a seznamu skutečných parametrů v kulatých závorkách.
public class kruh
{
//deklarace metody obvod
static double obvod (double r)
{
return 2*Math.PI*r;
}
//deklarace metody main
public static void main (String [] args)
{
double pol=50;
//volani metody obvod se skutecnym parametrem pol
double obv=obvod(pol);
System.out.println(obv);
}
}
V Javě existuje možnost předávání parametrů odkazem. Týká se pouze neprimitivních datových typů, tj. polí a objektů. V takovém případě změna hodnoty formálního parametru způsobí změnu hodnoty skutečného parametru. Při předávání nevzniká kopie pole či objektu, ale kopie odkazu na pole či objekt. S výše uvedeným postupem se seznámíme později.
Lokální proměnné. V metodách mohou být deklarovány lokální proměnné. Princip deklarace je stejný, jako by se jednalo o běžnou proměnnou. Lokální proměnné vznikají při volání metody a zanikají po jejím ukončení. Na rozdíl od datových položek třídy není prováděna jejich automatická inicializace, kompilátor však kontroluje, zda lokální proměnná byla inicializována. Hodnoty lokálních proměnných z předchozích volání metod se neuchovávají.
Autor: Filip Koval