PROGRAMIRANJE Amir Hajdar Teme 2 Klase i objekti u Javi Primjer kroz klasu Krug Atributi i metode Inicijalizacija objekata (konstruktori) Polymorphism Statičke varijable i metode This
Klase i objekti u Javi Java je potpun OO jezik za programiranje i sve je bazirano na klasama Sve što želimo uraditi mora imati definisano svoje stanje i način ponašanja Objekti se kreiraju od klasa koje definišu logičku grupu podataka i metoda koje se mogu vršiti nad podacima Klasa: Krug Krug centar poluprecnik obim() povrsina()
Klase (Krug) class ImeKlase [extends ImeSuperKlase] { [atributi] [metode] public class Krug { // implementacija Krug klase Atributi ( fields ) public class Krug { public double x, y; //koordinate centra public double r; //poluprecnik Atributi su instance varijable
Metode Klase bez metoda nemaju veliku svrhu nemogu vršiti interakciju sa sistemom Metode su definisane odmah nakon definisanih atributa public class Krug{ public double x, y; // centar kruga public double r; // poluprecnik kruga public double obim(){ return 2*3.14*r; public double povrsina(){ return (3.14*r^2); Primjena klase Krug Specifikacijom klase Krug, definisiali smo novi data tip ( data abstraction ) i možemo kreirati objekte i koristiti ih u aplikaciji Definicija se vrši preko: Krug KrugA; Krug KrugB; KrugA i KrugB još uvijek ne postoje ( null reference )
Primjena klase Krug KrugA i KrugB nastaju kada ih kreiramo uz pomoć ključne riječi new KrugA=new Krug(); KrugB=new Krug(); 1 2 Primjena klase Krug Garbage collection: KrugA = new Krug; KrugB = new Krug; KrugA = KrugB; KrugA KrugB 1 2 Krug 1 će biti naknadno uništen putem mehanizma garbage collection jer se više ne koristi
Pristupanje atributima i metodama ImeObjekta.ImeVarijable; ImeObjekta.ImeMetode(parametri); Krug KrugA = new Krug(); KrugA.x = 1.0; KrugA.y = 0.0; KrugA.r = 2.0; Pristupanje atributima i metodama Zadatak: Izračunati obim kružnice i povrsinu kruga poluprečnika 2.... Krug KrugA = new Krug(); double povrsinakruga; double obimkruga;... KrugA.r = 2.0; povrsinakruga = KrugA.povrsina(); obimkruga = KrugA.obim();...
Klasa Krug Kako bi zaštitili atribute klase, najčešće koristimo metode da mijenjamo vrijednosti atributa, kao i da ih upotrebljavamo (SET i GET metode) Upotrebljavamo SET i GET metode za Krug klasu: KrugA.setX(1.0); KrugA.getR(); Kada kreiramo objekte, inicijalna vrijednost se treba pretpostaviti da je nepoznata, tj. trebamo inicijalizirati objekt Klasa Krug metode SET i GET public class Krug{ public double x,y,r; public double setx(double inx){x = inx; public double sety(double iny){y = iny; public double setr(double inr){r = inr; public double getx(){return x; public double gety(){return Y; public double getr(){return r;
Klasa Krug Krug x:double y:double r:double getx():double gety():double getr():double setx(double) sety(double) setr(double) obim():double povrsina():double Klasa Krug public class Krug { public double x,y,r; public double setx(double inx){x = inx; public double sety(double iny){y = iny; public double setr(double inr){r = inr; public double getx(){return x; public double gety(){return Y; public double getr(){return r; public double obim(){ return 2*3.14*r; public double povrsina(){ return (3.14*r^2);
Klasa Krug public static void main(string [] argc){ Krug KrugA = new Krug(); double povrsinakruga; double obimkruga; KrugA.setX(1.0); KrugA.setY(1.5); KrugA.setR(2.0); obimkruga = KrugA.obim(); povrsinakruga = KrugA.povrsina(); System.out.println( Obim kruga poluprecnika + KrugA.getR() + = + obimkruga); System.out.println( Povrsina kruga poluprecnika + KrugA.getR() + = + povrsinakruga); Inicijaliziranje objekata Objekte je često potrebno inicijalizirati i to vršimo preko konstruktora ( constructors ) Konstruktor je specijalna metoda koja se automatski poziva kod kreiranja objekata Konstruktor ima isto ime kao i klasa i ne vraća vrijednost koristeći return komandu Klasa može imati jedan ili više konstruktora ali se moraju razlikovati po broju ili tipu parametara
Konstruktor - primjer public class Krug{ public double x,y,r; public Krug(){ x=0.0; y=0.0; r=1.0; public Krug(double inx, double iny){ x = inx; y = iny; public Krug(double inx, double iny, double inr){ x = inx; y = iny; r = inr; Krug KrugA = new Krug(1.0, 1.5, 2.0); Krug KrugB = new Krug(1.0, 1.3); Krug KrugC = new Krug(); Konstruktor - primjer Krug x:double y:double r:double Krug() Krug(double, double) Krug(double, double, double) getx():double gety():double getr():double setx(double) sety(double) setr(double) obim():double povrsina():double
Polymorphism Polymorphism definisanje metoda sa istim imenom a različitim (tipovima) argumentima Npr. Konstruktori Koncept poznat kao method overloading Logika je različita jer se koriste različiti argumenti Primjer: Napisati program koji nalazi maksimum 2 broja ili teksta (string-a). Napisati 2 metode za svaku od operacija. Polymorphism - primjer class Uporedi{ public static int max(int a, int b){ if(a > b) return a; else return b; public static String max(string a, String b){ if(a.compareto(b) > 0) return a; else return b;
Polymorphism - primjer public static void main(string args[]){ String s1 = Kompjuter ; String s2 = Telefon ; int a = 10; int b = 20; System.out.println(max(a, b)); System.out.println(max(s1, s2)); Izvršenje: 20 Telefon This ključna riječ This se može koristiti u slučaju da parametri funkcije imaju isto ime kao i atributi klase Primjer: public class Krug{ public double x,y,r; public Krug(double x, double y){ this.x = x; this.y = y; public Krug(double x, double y, double r){ this.x = x; this.y = y; this.r = r;
Statičke varijable Static varijable se (najčešće) kreiraju u slučaju potrebe za zajedničkom varijablom za sve kreirane objekte Statičkim varijablama se pristupa: ImeKlase.ImeVarijable Primjer: public class Krug{ public double x,y,r; public static int brojkrugova=0; public Krug(double x, double y, double r){ this.x = x; this.y = y; this.r = r; brojkrugova++; public static void main(string args[]){ Krug KrugA = new Krug(1.2, 1.5, 3.0); Krug KrugB = new Krug(1.0, 1.3, 2.0); System.out.println(Krug.brojKrugova) //broj krugova je 2! Statičke metode Static metode (najčešće) grupišu metode koje ne zavise od varijabli klase (eg. Matematičke funkcije) Statičkim metodama se pristupa: ImeKlase.ImeMetode([paramteri]) Primjer: Math.sin(ugao) Ograničenja: Statička metoda može pozivati samo statičku metodu Statička metoda ima pristup samo statičkim varijablama Statička metoda ne može koristiti ključne riječi this i super