260 likes | 443 Views
Programski jezici. proleće/leto 2009. Metodi. Metod u Javi ≈ funkcija u C-u Metod je samostalni blok Java koda (deklaracije i naredbe) koji ima ime i koji se može koristiti (pozvati) u drugom delu koda Gotovi metodi i programerski definisani metodi Pozivanje metoda = slanje poruke. Metodi.
E N D
Programski jezici proleće/leto 2009
Metodi • Metod u Javi ≈ funkcija u C-u • Metod je samostalni blok Java koda (deklaracije i naredbe) koji ima ime i koji se može koristiti (pozvati) u drugom delu koda • Gotovi metodi i programerski definisani metodi • Pozivanje metoda = slanje poruke Programski jezici
Metodi • Prednosti metoda • Manje delove programa (metode) je lakše napisati i testirati • Metodi se mogu nezavisno i paralelno pisati od strane više programera • Metodi se mogu više puta koristiti • Metodi smanjuju ukupnu veličinu programskog koda Programski jezici
Metodi Java program (glavna klasa) main(...) ... metod1(); ... pozivi metoda metod1(...) metod2(); metod2(...) Programski jezici
Metodi • Izvršavanje metoda main() metod1(...) metod2(...) ... metod2(); metod1(); ... Programski jezici
Definisanje metoda • Format: modifikatori tip-rezultata imeMetoda (lista-parametara) //zaglavlje { //telo (niz naredbi) } • Primer: public static void main (String[] args) { //Naredbe ... } Programski jezici
Definisanje metoda • modifikatori dodatno opisuju metod (ko može da ga koristi, da li je instancni ili klasni, da li je apstraktni ili ne, ...) • Modifikator pristupa određuje ko može da koristi (poziva) metod • public (sve klase) • private (samo klasa u kojoj je metod definisan) • protected (klasa u kojoj je metod definisan i izvedene klase) • nije navedeno (samo klase iz istog paketa) Programski jezici
Definisanje metoda • tip-rezultata određuje tip vrednosti koju metod vraća kao rezultat • Metod može vratiti najviše jednu vrednost (objekat) • Ako metod ne vraća nijednu vrednost, tip rezultata je void • Ako metod vraća jednu vrednost, mora imati bar jednu naredbu oblika: return izraz Programski jezici
Definisanje metoda • Naredba return izraz vraća rezultat izraza i kontrolu pozivajućoj metodi • Ukoliko je tip rezultata void, nareba return je opciona Programski jezici
Definisanje metoda • imeMetoda je identifikator (po konvenciji, sve reči osim prve počinju velikim slovom) • lista-parametarasadrži nula ili više parova, razdvojenih zarezima • Parovi su promenljive i njihov tip • Parametri metoda su promenljive koje prihvataju vrednosti argumenata prosleđenih metodu u trenutku njegovog pozivanja Programski jezici
Pozivanje metoda • Prilikom poziva metoda, na mesto formalnih parametara se navode stvarni argumenti • Kod navođenja formalnih parametara u definiciji metoda, za svaki parametar se mora navesti njegov tip, dok se prilikom poziva metoda navode samo stvarni argumenti, bez navođenja njihovog tipa Programski jezici
Pozivanje metoda • Primer public boolean prviJeVeci(int a, int b){ if(a >= b) return true; else return false; } ... int x=20, y=10; ... prviJeVeci(17, 23) ... prviJeVeci(x, y) Programski jezici
Pozivanje metoda • Objektni (instancni) metodi • Odnose se na pojedinačne objekte (instance ) i indirektno kao parametar imaju konkretni objekat klase u kojoj su objektni (instancni) metodi definisani • Pozivaju se samo preko odgovarajućeg konkretnog objekta korišćenjem tačka-notacije • Primer: Programski jezici
public class Krug { private int x, y; // centar private double r; // poluprečnik public double obim() { return 2*Math.PI*r; } public double površina() { return Math.PI*r*r; } public boolean tačkaUKrugu(int a, int b) { double d; d = Math.sqrt((x-a)*(x-a) + (y-b)*(y-b)); if (d < r) return true; else return false; } Programski jezici
public static void main (String[] args) { Krug k1 = new Krug(); k1.x = 4; k1.y = 4; k1.r = 5.2; Krug k2 = new Krug(); k2.x = 0; k2.y = 0; k2.r = 2.0; System.out.println("Povrsina kruga k1 je: " + k1.površina()); System.out.println("Obim kruga k2 je: " + k2.obim()); System.out.println("Tačka (20,30) je u krugu k1: " + k1.tačkaUKrugu(20,30)); } } Programski jezici
Pozivanje metoda • Klasni (statički) metodi • Odnose se na celu klasu, a ne na pojedinačne objekte klase • Sadrže modifikator static • Pozivaju se preko imena klase korišćenjem tačka-notacije (može i kao objektni metodi, ali se ne preporučuje) • Primer: Programski jezici
public class Krug { private int x, y; // centar private double r; // poluprečnik public double obim() { return 2*Math.PI*r; } public double površina() { return Math.PI*r*r; } public boolean tačkaUKrugu(int a, int b) { double d; d = Math.sqrt((x-a)*(x-a) + (y-b)*(y-b)); if (d < r) return true; else return false; } Programski jezici
public static void verzija() { System.out.println("Verzija koda je 1.0"); } public static void main (String[] args) { Krug k1 = new Krug(); k1.x = 4; k1.y = 4; k1.r = 5.2; Krug k2 = new Krug(); k2.x = 0; k2.y = 0; k2.r = 2.0; Krug.verzija(); System.out.println("Povrsina kruga k1 je: " + k1.površina()); System.out.println("Obim kruga k2 je: " + k2.obim()); System.out.println("Tačka (20,30) je u krugu k1: " + k1.tačkaUKrugu(20,30)); } } Programski jezici
Potpis metoda • Klasa može imati više metoda sa istim imenom, ali svaki metod mora imati različiti potpis koji se sastoji od: • Imena metoda • Redosleda, broja i tipa parametara • Primer: public void uradiNešto (int n, double x, boolean test) { // Naredbe ... } Programski jezici
Potpis metoda • Potpis za uradiNešto: uradiNešto (int, double, boolean) • Drugi metod sa istim imenom: uradiNešto (String s) { // Naredbe ... } Programski jezici
Preopterećeni metodi • Potpis dva metoda u klasi mora biti različit, kako bi kompajler mogao da odredi koji metod se poziva • Metodi sa istim imenom, ali različitim parametrima (različitim potpisom) se nazivaju preopterećeni (overloaded) • Primer: Programski jezici
public class Knjiga { private String naslov; private String autor; private int brojStrana; private int godinaIzdanja; . . . public void prikažiKnjigu() { System.out.println("Autor: " + autor); System.out.println("Naslov: " + naslov); System.out.println("Broj strana: " + brojStrana); } public void prikažiKnjigu(boolean saGodIzd) { prikažiKnjigu(); if (saGodIzd) System.out.println("Godina izdanja: " + godinaIzdanja); } . . . } Programski jezici
Oblast važenja imena • Deo teksta programa u kojem se može koristiti definisano ime • Pravilo: ime (identifikator) važi u bloku u kome je definisano Programski jezici
Oblast važenja imena • Primer: public class IgraSaKartama { String pobednik; // globalna promenljiva (polje) ... void odigrajIgru() { String pobednik; // lokalna promenljiva // Ostale naredbe metoda ... } ... } Programski jezici
Oblast važenja imena • Primer: for (int i = 0; i < n; i++) { // Telo petlje } if (i == n) // GREŠKA: ovde ne važi ime i System.out.println("Završene sve iteracije"); Programski jezici
Oblast važenja imena • Primer: void neispravanMetod(int n) { int x; while (n > 0) { int x; // GREŠKA: ime x je već definisano ... } } Programski jezici