Download - Osnove programskega jezika Java - scv.si
Programiranje
Metode
Vsebina
Osnove programskega jezika Java
Programiranje
MetodeUvod
Metode omogočajo lažjo modularno zasnovo programa z
ločevanjem aktivnosti v samostojne programske enote.
Vsebina
Programiranje
Metode, uvod
Najboljši način razvoja in vzdrževanja večjega programa je, da ga izdelamo iz
manjših delov oz. modulov.
Vsebina
Večji problem razbijemo na manjše dele, ki jih rešimo in jih nato povežemo v
celoto. Takšen pristop imenujemo deli in vladaj.
Metoda predstavlja poimenovano zaporedje stavkov, ki predstavlja rešitev
manjšega problema. S klici metod izvajamo isto zaporedje stavkov nad
različnimi podatki. To imenujemo tudi ponovna uporaba kode (angl. code
reuse).
Metode predstavljajo tudi operacije, ki so na voljo nad posameznim objektom.
Programiranje
Metode (void, return)
Ločimo dve vrsti metod:
metode, ki ne vračajo vrednosti (izvršijo aktivnost oz. operacijo brez
vračanja vrednosti),
System.out.println("Metoda println() ne vrača vrednosti");
metode, ki vračajo vrednost (izvršijo aktivnost oz. operacijo in vrnejo
vrednost v kodo na mesto klica).int vecjeStevilo = Math.max(5, 10);
Vsebina
Programiranje
Definicija metode
Metodo ustvarimo z deklaracijo metode, ki jo sestavlja glava (prototip) in telo
metode.
Vsebina
Glava metode vsebuje pomembne informacije: ime metode, področje
dostopnosti, podatkovni tip vrednosti rezultata metode, seznam parametrov …
Telo metode so programski stavki, ki se izvršijo ob klicu metode.
public static void izpisPozdrava()
{
System.out.println("Pozdrav");
}
telo metode
glava metode
Programiranje
Glava metode
Vsebina
<določila
načina dostopa> <podatkovni tip
rezultata> <ime metode>
( [<podatkovni tip> <ime>]
[, … ] )
public static void izpisPozdrava ( )
{
System.out.println("Pozdrav");
}
Določila načina dostopa:
• public - metoda je dostopna iz vseh razredov,
• static - razredna metoda (pripada razredu).
Podatkovni tip rezultata:
• void - metoda ne vrača vrednosti.
Ime metode - ime ki predstavlja opis operacije (aktivnosti).
Okrogli oklepaji - seznam vhodnih parametrov.
Programiranje
Deklaracija metode
Vsebina
public static int vsotaInterval(int odStevila, int doStevila) {
int vsota = 0; /* inicializacija vsote*/
if (odStevila > doStevila) { /* potrebna zamenjava */
int pomozna = odStevila; /* uporabimo pomožno spremenljivko */
odStevila = doStevila;
doStevila = pomozna;
} // if
for (int i = odStevila; i <= doStevila; i++) {
vsota = vsota + i; /* vrednost števca prištejemo vsoti */
} /* for */
return vsota; /* vračanje vrednosti - rezultat (vsota) */
} /* metoda vsotaInterval*/
<ime> parametra<podatkovni tip>
/* glava metode */
<določila načina dostopa> <podatkovni tip rezultata> <ime metode>
( [<podatkovni tip> <ime>] [, <podatkovni tip > <ime>] )
{
/* stavki */
[ return <izraz>; ] /* metode, ki vračajo vrednosti */
} /* konec metode */
telo metode
Programiranje
Klic metode
Vsebina
Metodo izvršimo s klicem metode.
Metoda main se samodejno izvrši ob zagonu programa, ostale metode se
izvedejo ob klicu metode.
Klic metode:
izpisPozdrava( );
Klic metode ne vsebuje določil dostopa in podatkovnega tipa rezultata.
Sintaksa klica oz. izvršitve statične metode:
<ImeRazreda>.<imeMetode> (<argumenti>);
ali klic metode v razredu, v katerem je metoda definirana
<imeMetode> (<argumenti>);
Programiranje
Klic metode
Vsebina
public static int vsotaInterval(int odStevila, int doStevila) {
int vsota = 0; /* inicializacija vsote*/
if (odStevila > doStevila) { /* potrebna zamenjava */
int pomozna = odStevila; /* uporabimo pomožno spremenljivko */
odStevila = doStevila;
doStevila = pomozna;
} // if
for (int i = odStevila; i <= doStevila; i++) {
vsota = vsota + i; /* vrednost števca prištejemo vsoti */
} /* for */
return vsota; /* vrnemo vrednost vsote */
} /* metoda vsotaInterval*/
public static void main(String[] args) {
int intervalOd, intervalDo; /* interval števil */
/* koda */
/* klic metode za izračun vsote */
int vsota = vsotaInterval(intervalOd, intervalDo) ;
/* oblika izpisa */
System.out.printf("Vsota števil iz intervala od %d do %d je %d.", intervalOd, intervalDo, vsota);
} /* main */
klic metode
1
2
23
4
5
6
7
8
Programiranje
Prenos argumentov v metodo
Vsebina
Vrednoti, ki jih posredujemo metodi ob klicu imenujemo argumenti.
System.out.println("Pozdrav");
nizStevilo = "25";
stevilo = Integer.parseInt(nizStevilo);
Podatkovni tip argumenta v klicu metode mora ustrezati deklaraciji
spremenljivke v oklepajih definicije metode (parametrom).
argument
Parameter je spremenljivka, ki je deklarirana v glavi metode in vsebuje
vrednost, ki se prenesejo v metodo.
public static int vsotaInterval(int odStevila, int doStevila)
{ /*…*/ }
Preko parametrov metode prejmejo vrednosti.
parametri
Programiranje
Prenos argumentov v metodo
Vsebina
public class P4_ArgumentiP1 {
public static void izpisStevila(int stevilo) {
System.out.printf("\nVrednost števila: %d", stevilo);
} // izpisStevila
public static void main(String[] args) {
izpisStevila(25);
int stevilo1 = 50;
izpisStevila(stevilo1);
} // main
} // P4_ArgumentiP1
Klic metode izpisStevila(stevilo1); posreduje vrednost argumenta 50 v parameter stevilo.
Vrednost spremenljivke stevilo1 (50) se kopira v vrednost parametra stevilo.
stevilo1
stevilo
50
50
kopija
Programiranje
Kompatibilnost pod. tipov argumentov in parametrov
Vsebina
Ko posredujemo argument metodi, se prepričamo, da je podatkovni tip argumenta
združljiv s podatkovnim tipom parametra.
Ob klicu metode navedemo ime metode in argumente metode.int stevilo1 = 50;
izpisStevila(stevilo1); // <ime metode> - izpisStevila (<argument> - stevilo1)
Argumenti in parametri klicane metode se morajo ujemati v številu in podatkovnem tipu
glede na vrstni red.
public static void izpisStevila(int stevilo)
Argument je lahko vrednost spremenljivke, izraza …
Če argument ni kompatibilen s parametrom, prevajalnik javi napako.double stevilo1 = 50.0;
izpisStevila(stevilo1); // napaka, double vrednosti ne moremo prenesti v int vrednost
Programiranje
Posredovanje več argumentov
Vsebina
V klicu metode posredujemo toliko argumentov, kot ima metoda parametrov.
public static int vsotaInterval(int odStevila, int doStevila) {
int vsota = 0; /* inicializacija vsote*/
if (odStevila > doStevila) { /* potrebna zamenjava */
int pomozna = odStevila; /* uporabimo pomožno spremenljivko */
odStevila = doStevila;
doStevila = pomozna;
} // if
for (int i = odStevila; i <= doStevila; i++) {
vsota = vsota + i; /* vrednost števca prištejemo vsoti */
} /* for */
return vsota; /* vračanje vrednosti - rezultat (vsota) */
} /* metoda vsotaInterval*/
int vsota = vsotaInterval( 1 , 5 ) ;
Vrednost prvega
argumenta (1) se kopira
v parameter odStevila.
Vrednost drugega
argumenta (5) se kopira v
parameter doStevila.
Vrstni red je pomemben.
Programiranje
Argumenti metode se posredujejo po vrednosti
Vsebina
V Javi se vsi parametri osnovnih podatkovnih tipov posredujejo po vrednosti (v
parameter metode se prenese kopija vrednosti argumenta).
Spremenljivke parametrov metode so druge spremenljivke (pomnilniško ločene) od
spremenljivk argumentov v klicu metode.
Če spremenljivko parametra spremenimo znotraj metode, to ne vpliva na posredovani
argument.
Kopija vrednosti argumenta se posreduje v parameter.
public static int vsotaInterval(int odStevila, int doStevila) {
/* … */
int a = 10, b = 20;
int vsota = vsotaInterval( a , b ) ;
10 se kopira v
parameter odStevila.
20 se kopira v
parameter doStevila.
Programiranje
Posredovanje referenc objektov v metodo
Vsebina
Spremenljivka tipa razreda vsebuje naslov na katerem je shranjen objekt v pomnilniku.
Spremenljivko povezano z objektom imenujemo referenčna spremenljivka.
Če je argument objekt razreda (npr. String), se v parameter metode posreduje
referenca (naslov) objekta v pomnilniku. Obe spremenljivki (argument in parameter) se
nanašata na isti objekt.
public static void izpisPozdrava (String besedilo) {
/* … */
String pozdrav = "Zdravo";
izpisPozdrava( pozdrav) ;
Referenca (naslov)
se posreduje v
parameter
Programiranje
Objekti razreda String so nespremenljivi (Immutable)
Vsebina
Objekt razreda String ne moremo spremeniti. Stavek:
imePriimek = "Bojan Sovič";
ne more spremeniti vrednosti objekta, zato ustvari nov objekt.
naslov
naslov
" Marko"
"Bojan Sovič"
Spremenljivka ime vsebuje
naslov objekta String
Spremenljivka imePriimek
vsebuje naslov objekta String
Programiranje
Objekti razreda String so nespremenljivi (Immutable)
Vsebina
Metoda main => ime in priimek: Ana Bor
Metoda spremeniImePriimek => ime in priimek: Bojan Kot
Metoda main po klicu metode spremeniImePriimek => ime in priimek: Ana Bor
public class P4_StringP2 {
public static void spremeniImePriimek(String imePriimek) {
imePriimek = "Bojan Kot";
System.out.printf("\nMetoda spremeniImePriimek => ime in priimek: %s ", imePriimek);
} // spremeniImePriimek
public static void main(String[] args) {
String imePrimekM = "Ana Bor";
System.out.printf("Metoda main => ime in priimek: %s ", imePrimekM);
spremeniImePriimek(imePrimekM);System.out.printf("\nMetoda main po klicu spremeniImePriimek => ime in priimek: %s ", imePrimekM);
} // main
} // P4_StringP2
Pazi: ustvari nov objekt
v pomnilniku
Programiranje
Metode, vračanje vrednosti
Vsebina
Metoda lahko vrne vrednost metode v stavek klica metode.
int stevilo1 = 12;
int stevilo2 = 15;
int vecje = Math.max(stevilo1, stevilo2);
System.out.printf("Večje število (%d, %d): %d.",stevilo1, stevilo2, vecje);
Večje število (12, 15): 15.
Klic metode Math.max(stevilo1, stevilo2) vrne int vrednost 15, ki se shrani v
spremenljivko vecje.
public static int max(int a, int b) {
int result;
/* … */
return result ;
}
podatkovni tip
rezultata
Izraz mora biti istega tipa kot je v glavi
metode podatkovni tip rezultata.
Return stavek konča izvajanje metode
in vrne vrednost v stavek klica metode.
Programiranje
Metode, klic statične metode
Vsebina
Klic metode znotraj razreda v katerem se nahaja metoda:
<imeMetode> (<argumenti>)
Klic metode drugega razreda:
<imeRazreda>.<imeMetode> (<argumenti>)
int stevilo1 = 12;
int stevilo2 = 15;
int vsotaStevil = vsota(stevilo1, stevilo2);
public static int vsota(int a, int b) {
int rezultat = a + b;
return rezultat;
}
12 1527