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.Metoda bez návratové hodnoty
V praxi jsou tyto metody poměrně často používány často, bývají nazývány procedurami. Jejich návratový typ je void. Takové metody slouží např. pro realizaci vstupních či výstupních operací (tj. tiskové výstupy).static void tisk ()
{
System.out.println(Obvod je:+obv+ m);
}
Metody s více parametry
Metodě lze předat více než jeden parametr, parametry navíc mohou být různého datového typu. Jejich počet by však neměl být příliš velký, taková metoda se stává nepřehlednou. Na první pohled do ní vstupuje takové množství heterogenních dat, že přestane být patrné, co metoda vykonává. Podívejme se na příklad provádějící výpočet odvěsny v pravoúhlém trohúhelníku za použití Pythagorovy věty.static double pythagoras (double a , double b)
{
return Math.sqrt(a*a+b*b);
}
Metodu pythagoras() lze volat např. takto
double prepona=pythagoras(odvesna1, odvesna2);
Implicitní a explicitní konverze.
Podívejme se podrobněji na problematiku implicitní a explicitní konverze mezi skutečnými a formálními parametry. Pokud je návratový typ metody odlišný od typu návratové hodnoty, je prováděna buď implicitní konverze (rozšiřující konverze) nebo explicitní konverze (zužující konverze). Implicitní konverze je prováděna kompilátorem automaticky, viz následující příkladstatic double pythagoras (int a , int b)
{
double vysledek;
vysledek=Math.sqrt(a*a+b*b);//rozsirujici konverze
return vysledek;
}
Explicitní konverze musí být provedena uživatelem (možnost ztráty přesnosti dat), jinak nebude možno zdrojový kód zkompilovat.
static int pythagoras (double a , double b)
{
double vysledek;
vysledek=Math.sqrt(a*a+b*b);
return (int) vysledek; //zuzujici konverze
}
Metody rekurzivní
Rekurze je schopnost metody volat sebe sama. Tento přístup se často uplatňuje při řešení některých typů problémů: teorie her, zpracování dat, atd... Takovým typům problémů se říká dekomponovatelné, můžeme je rozložit na pod úlohy realizující ty samé výpočty, ale pouze s jinými daty. Rekurzivně lze volat každoumetodu s výjimkou metody main().
Rekurze nemůže probíhat do nekonečna, musí existovat podmínka, za které je ukončena. Poté jsou zpětně dopočítávány hodnoty z předchozích volání metod. Typickým příkladem výpočtu za použití rekurze představuje faktoriál.
static int fakt(int n)
{
if (n>1) return n*fakt(n-1);
else return 1;
}
Metodu lze volat např. takto:
int cislo=10;
int faktorial=fakt(cislo);
Přetěžování metod
Přetěžování metod je jedním ze základních rysů OOP. Umožňuje deklarovat více metod stejného názvu, které se mohou lišit různým počtem, typem argumentů popř. jejich pořadím. Postup se používá nejčastěji u metod provádějících stejné činnosti, ale s různými typy dat. Pokud zavoláme přetíženou metodu, kompilátor na základě typu parametrů, jejich pořadí či počtu vybere správnou metodu. Podívejme se na přetíženou metodu vzdalenost(), provádějící výpočet vzdálenosti mezi body zadané pravoúhlými souřadnicemi, souřadnicovými rozdíly popř. kombinací.static double vzdalenost(double x1, double y1, double x2, double y2)
{
return Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
}
static double vzdalenost(double dx, double dy)
{
return Math.sqrt(dx*dy+dy*dy);
}
static int vzdalenost(int x1, int y1, int x2, int y2)
{
return Math.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
}
Pokud budeme volat metodu vzdalenost() s následujícícmi parametry
double vzd=vzdalenost(1.0,0.0,6.0,0.0);
obdržíme výsledek 5.0, bude provedena první metoda. Pokud budeme volat
metodu vzdalenost() s následujícícmi parametry
double vzd=vzdalenost(1,0,6,0);
obdržíme výsledek 5, bude provedena třetí metoda. Pokud budeme volat metodu
vzdalenost() s následujícícmi parametry
double vzd=vzdalenost(5.0,0.0);
bude provedena druhá metoda, obdržíme výsledek 5.0.
Autor: Filip Koval