You are on page 1of 17

Visoka tehnika kola Ni

Savremene raunarske tehnologije


Internet programiranje (6)

Studijski program:

Osnove klasa u Javi


Prof. dr Zoran Velikovi, dipl. in. el.
Novembar, 2013.

Uvod u klase (1)

Klasa predstavlja logiku konstrukciju (celinu), na kojoj se zasniva programski jezik Java, kojom se definie oblik i nain ponaanja objekata. Klasom se definie novi tip podatka koji se u OO programiranju naziva objekt. Jednom istom klasom se moe formirati vie objekata. Dakle, klasa predstavlja ablon za formiranje objekta, a objekat je samo primerak (nekada se kae instanca) klase. Klasa se deklarie pomou Javine rezervisane rei class. Klasa se sastoji od podataka i programskog koda (koji se u OO programiranju naziva metoda) koji koristi te podatke. Klasa mora da sadri metodu pod nazivom main() samo ako u njoj poinje Java program. Izuzetak od ovog pravila su apleti (posebna vrsta Java programa) koji ne poseduju metodu main().

Opta definicije klase


class imeklase {
tip promenljiva1;
. . .

tip promenljivaN; tip metoda1 { // } . . . tip metodaK { // } (lista parametara) telo metode1

Podaci i promenljive instanci

lanovi klase

Metode (lista parametara) telo metodeK

Kutija - klasa bez metoda (1)


class Kutija { double irina; double visina; double dubina; } Na ovaj nain je formiran ablon za novi tip podataka (objekt) pod nazivom Kutija (trenutno je bez metoda). Na osnovu formirane klase, mogue je inicijalizacija objekta u dva koraka: Kutija mojaKutija = new Kutija(); Korak 2: Dodeljivanje vrednosti promenljivama u objektu: mojaKutija.irina = 100;

Krak 1: Formiranje objekta tipa Kutija:

Kutija - klasa bez metoda (2)


ISKAZ 1) Kutija mojaKutija; Stack MEM null mojaKutija EFEKAT Heap MEM ?

2) mojaKutija = new Kutija();

mojaKutija mojaKutija

irina visina dubina

Formiranje objekta tipa Kutija Dodeljivanje vrednosti deklarisanoj promenljivoj inicijalizacija.

objekt Kutija

Operator new

Operator new dinamiki dodeljuje memoriju objektu: Promenljiva = new imeklase();

Imenom klase iza koga sledi ( ) odreuje se konstruktor. Konstruktor definie ta se tano deava kada se pravi jedan od objekata klase. Ako konstruktora nema, Java obezbeuje podrazumevani konstruktor (kao u prethodno prikazanom primeru). Formiranim objektima se moe pristupiti preko referenci koje su napravljene prilikom kreiranja objekata. Primer formiranja referenci: Kutija b1 = new Kutija(); Kutija b2 = b1;

Reference na objekte

Promenljivoj b2 nije dodeljena kopija objekta b1 ve mu se dodeljuje referenca na isti objekat! Ovo je sutinska razlika izmeu vrednosnih i referencnih tipova podataka. Sada bi trebalo da bude jasno odakle potie naziv ovih tipova!
Reference (stek): b1 Objekt (heap): irina visina b2 dubina objekt klase Kutija

Dodavanje metoda klasi Kutija


class Kutija { double irina; double visina; double dubina;
Prethodna verzija klase Kutija

// Dodavanje metode: zapremina() void zapremina() { System.out.print(Zapremina je:); System.out.print(irina*visina*dubina); } }

Dodato

Dodata metoda zapremina() klasi Kutija

Vraanje vrednosti
class Kutija { double irina; double visina; double dubina; double zapremina () { return irina*visina*dubina; } Rezervisana return re kojom se obezbeuje vraanje vrednosti }
Tip podatka koji se vraa pozivaocu

Klasi Kutija je dodat metoda zapremina() koja vraa vrednost pozivnoj metodi. Ovo je najee koriena verzija metoda.

Konstruktori klasa
class Kutija { double sirina; Konstruktor klase Kutija, inicijalizuje double visina; vrednost pojedinih parametara. Ima isto ime kao i klasa! double dubina; Kutija() { irina=10.0; visina=10.0; zapremina() metoda klase dubina=10.0; } Kutija double zapremina () { return irina*visina*dubina; } }
SCHILDT

Parametarski konstruktori
class Kutija { Kutija(s,v,d), pri inicijalizaciji double irina; definie vrednosti parametara s, v i d double visina; double dubina; Kutija(double s, double v, double d) { irina=s; visina=v; dubina=d; } double zapremina () { return irina*visina*dubina; } SCHILDT }
Parametarski konstruktor

Primer: parametarski konstruktori


class BoxDemo7 { public static void main (String args[]) { Kutija mybox1 = new Kutija (10, 20, 15); Kutija mybox2 = new Kutija (3, 6, 9); double vol; vol = mybox1.zapremina(); System.out.println(" Zapremina je " + vol); vol = mybox2.zapremina(); System.out.println(Zapremina je " + vol); } }
Pristup metodi zapremina() klase Kutija Deklariu se dve instance tipa Box: mybox1 i mybox2. Prva ima parametre 10, 20 i 15, a druga 3, 6 i 9.

SCHILDT

Preklapanje konstruktora (1)


class Kutija { 3-parametra double irina; double visina; double dubina; Kutija(double w, double h, double d) { irina = w; visina = h; dubina = d; } Bez parametara Kutija() { irina = -1; // use -1 to indicate visina = -1; // an uninitialized dubina = -1; // box } 1-parametar Kutija(double len) { irina = visina = dubina = len; } double volume() { return irina * visina * dubina; } } Mogu se definisati dva ili vie konstruktora sa istim imenom sve dok se njihove dekleracije razlikuju.

Ove metode nazivaju se preklopljene (overloaded) metode.

SCHILDT

Preklapanje konstruktora (2)


class OverloadCons { public static void main (String args[]) { Kutija mybox1 = new Kutija(10, 20, 15); Tri poziva Kutija mybox2 = new Kutija(); preklopljenog konstruktora Kutija mycube = new Kutija(7); Kutija. double vol; vol = mybox1.zapremina(); System.out.println(Zapremina mybox1 je " + vol); Koja e se vol = mybox2.zapremina(); metoda System.out.println(" Zapremina mybox2 je " + vol); Kutija pozvati? vol = mycube.zapremina(); System.out.println(" Zapremina mycube je " + vol); } ta je izlaz? }

Preklapanje metoda

Mogu se definisati vie metoda sa istim imenom sve dok im se dekleracija parametara razlikuju! U tom sluaju metodi su preklopljeni (engl. overload). Na osnovu tipa i/ili broja argumenata Java odreuje koja e se metoda zapravo pozvati!

Preklapanje metoda test(1)


class OverloadDemo { void test() { System.out.println("No parameters"); } void test(int a) { System.out.println("a: " + a); } void test(int a, int b) { System.out.println("a and b: " + a + " " + b); } double test(double a) { System.out.println("double a: " + a); return a*a; } }
Metode sa istim imenom, a razliitim potpisom metode brojem parametara!

SCHILDT

Preklapanje metoda test(2)


class Overload { public static void main(String args[]) { OverloadDemo ob = new OverloadDemo(); double result; // poziv svih verzija test() ob.test(); Metode sa razliitim potpisom, ob.test(10); OVERLOAD metode. ob.test(10, 20); result = ob.test(123.25); System.out.println("Result of ob.test(123.25): " + result); } }
SCHILDT

You might also like