You are on page 1of 9

Klasa

Klasa je novi tip podataka


Klasa je ablon za objekte
Objekat je primerak (instanca) klase
Uvod u klase Klase koje se izvravaju imaju metod main

1 2

Klase i datoteke Opti oblik klase (nije kompletan)


Klasa se pie u jednoj datoteci class imeKlase {
tip promenljiva1;
Imena datoteke i klase moraju da budu jednaka
tip promenljiva2;
Ekstenzija datoteke je *.java ...
tip promenljivaN;

tip imeMetoda1(lista_parametara) {
telo_metoda
}
...
tip imeMetodaM(lista_parametara) {
telo_metoda
}
}
3 4
Termini Primer jednostavne klase
Objekat se naziva i instanca klase Klasa za opisivanje kutije za koju su bitne samo
Podaci (promenljive) definisane u klasi nazivaju se polja dimenzije
(takoe se koriste i termini: promenljive instance, atributi
ili lanovi podaci)
Kod se pie u metodima class Kutija {
Metodi i promenljive deklarisane u klasi nazivaju se double sirina;
lanovi klase double visina;
double duzina;
}

5 6

Pravljenje objekta operator new Operator taka "."


Objekat se pravi operatorom new Operator taka slui za pristupanje lanu objekta
Pravljenjem objekta se u memoriji rezervie prostor za Primer za pristupanje poljima:
smetanje tog objekta
k1.sirina = 1;
Primer:
Kutija k1 = new Kutija(); k1.visina = 2;
k1 je referenca koja ukazuje na objekat u memoriji k1.duzina = 3;

k1 sirina
visina
duzina

7 8
Primer 2. sa dva objekta klase Kutija
Primer 1. sa klasom Kutija class PrimerSaDveKutije1 {
public static void main(String args[]) {
class PrimerSaKutijom1 {
Kutija k1 = new Kutija();
public static void main(String args[]) {
Kutija k2 = new Kutija();
Kutija k = new Kutija();
// dodela vrednosti clanovima objekta k1
// dodela vrednosti poljima
k1.sirina = 1; k1.visina = 2; k1.duzina = 3;
k.sirina = 1;
// dodela vrednosti clanovima objekta k2
k.visina = 2;
k2.sirina = 2; k2.visina = 4; k2.duzina = 5;
k.duzina = 3;
// Izraunavanje i ispisivanje zapremina
// Raunanje zapremine kutije
double z = k1.sirina * k1.visina * k1.duzina;
double zapremina = k.sirina * k.visina * k.duzina;
System.out.println("Zapremina k1 je " + z);
System.out.println("Zapremina je " + zapremina);
z = k2.sirina * k2.visina * k2.duzina;
}
System.out.println("Zapremina k2 je " + z);
}
}
Zapremina je 6.0 }
Zapremina k1 je 6.0
9 10
Zapremina k2 je 40.0

Reference i objekti Reference i objekti


Deklaracija promenljive Kutija k1 = new Kutija(); k1 sirina
Kutija k1; k1 je null
Kutija k2; visina
Postoji samo referenca k1, Referenca k2 ne ukazuje na duzina
k2 je null
objekat
a objekat jo nije napravljen

Stvaranje objekta
k1 = new Kutija(); k1 sirina
Operator new kreira objekat, tj. visina k2 = k1; k1 sirina
rezervie prostor u memoriji za duzina
Reference k1 i k2 sad imaju iste visina
uvanje objekta vrednosti, tj. ukazuju na isti objekat duzina
k2
Referenca k1 ukazuje na objekat Kopiranje reference ne kopira
Preko refernce se pristupa objektu objekat

11 12
Reference i objekti - nastavak Opti oblik primene operatora new
k1 sirina
k1 = new Kutija(); ImeKlase promenljiva = new ImeKlase();
visina
Kreiran je jo jedan objekat na koji k2 ImeKlase oznaava tip promenljive
duzina
sad ukazuje referenca k1
ImeKlase() oznaava konstruktor
sirina
visina
duzina Operator new dodeljuje memoriju dinamiki
Koliina memorije je ograniena
k2 = new Kutija();
k1 sirina Ako nema dovoljno memorije da se kreira objekat javlja
Kreiran je trei objekat na koji sad visina
ukazuje referenca k2 se izuzetak
k2 duzina
Na prvi objekat vie ne ukazuje Operator new se ne koristi za proste tipove (byte,
nijedna referenca i njemu ne moe sirina sirina short, int, long, float, double, char,
da se pristupi visina visina boolean).
duzina duzina Promenljive ovih tipova nisu objekti.
13 14

Osnovno o konstruktorima Metodi


Konstruktor definie ta se radi pri stvaranju objekta Opti oblik metoda
tip imeMetoda(lista_parametara) {
Ako u klasi nije napisan konstruktor Java obezbeuje
telo_metoda
podrazumevani konstruktor
}
Klasa moe da ima vie konstruktora tip je tip podatka koji vraa metod; ako metod ne vraa vrednost
tip metoda je void
imeMetoda je identifikator
lista_parametara je niz parova tip identifikator
razdvojenih zarezima, a moe biti prazna
Parametri su promenljive koje prihvataju vrednosti argumenata
prosleenih metodu u trenutku pozivanja
Metod vraa vrednost pomou naredbe return
return vrednost;

15 16
ta je loe u klasi Kutija? Metod za izraunavanje zapremine u klasi Kutija
class Kutija { class Kutija {
double sirina; double sirina;
double visina; double visina;
double duzina; double duzina;
} double zapremina() {
return sirina * visina * duzina;
U klasi Kutija nije ugraeno "znanje" kako se izraunava zapremina, }
pa bi to znanje moralo da se ugradi u svaku klasu koja radi sa
}
klasom Kutija, ako je potrebna zapremina objekta tipa Kutija
Ne postoji dobar nain da se postave poetne vrednosti polja, ili da U metodu zapremina direktno se pristupa poljima poto je i
se promene vrednosti (pristupa se poljima direktno) metod zapremina lan klase Kutija
Tip vrednosti koji vraa metod mora da bude kompatibilan sa tipom
metoda
Tip promenljive koja prihvata vrednost koju vraa metod mora biti
kompatibilan sa tipom metoda
17 18

Primer: klasa Kutija ima metod zapremina


Krai nain pisanja u prethodnom primeru
class PrimerSaDveKutije2 {
public static void main(String args[]) {
Zapremina se izraunavala samo da bi se ispisala na
Kutija k1 = new Kutija();
ekranu, i koriene su dve naredbe
Kutija k2 = new Kutija(); double z = k1.zapremina();
// dodela vrednosti clanovima objekta k1 System.out.println("Zapremina je " + z);
k1.sirina = 1; k1.visina = 2; k1.duzina = 3;
// dodela vrednosti clanovima objekta k2
Prethodne dve naredbe se mogu zameniti jednom
k2.sirina = 2; k2.visina = 4; k2.duzina = 5;
System.out.println("Zapremina je " + k1.zapremina());
// Izraunavanje i ispisivanje zapremina
double z = k1.zapremina();
System.out.println("Zapremina k1 je " + z);
z = k2.zapremina();
System.out.println("Zapremina k2 je " + z);
}
}
19 20
Primer: klasa Kutija ima metod postaviDimenzije
Metod za postavljanje vrednosti polja u klasi Kutija
class PrimerSaDveKutije3 {
class Kutija { public static void main(String args[]) {
double sirina; Kutija k1 = new Kutija();
double visina; Kutija k2 = new Kutija();
double duzina; // dodela vrednosti clanovima objekta k1
double zapremina() { k1.postaviDimenzije(1, 2, 3);
return sirina * visina * duzina; // dodela vrednosti clanovima objekta k2
} k2.postaviDimenzije(2, 4, 5);
void postaviDimenzije(double s, double v, double d){ // Izraunavanje i ispisivanje zapremina
sirina = s; System.out.println("Zapremina k1 je " +
visina = v; k1.zapremina());
duzina = d; System.out.println("Zapremina k2 je " +
} k2.zapremina());
} }
}
21 22

Parametri i argumenti Konstruktori


Parametar je promenljiva deklarisana u listi parametara Konstruktor moe da inicijalizuje objekat odmah posle
metoda i kao promenljiva postoji samo unutar metoda stvaranja objekta, i u tom sluaju ne mora se pozivati
Argument je vrednost koja se prosleuje metodu pri metod za postavljanje vrednosti poljima
pozivanju metoda Konstruktor ima isto ime kao i klasa
Parametar dobija (prihvata) vrednost argumenta Za konstruktore se ne pie tip jer se podrazumeva da
konstruktor vraa tip klase
Ako se ne napie konstruktor, automatski postoji
podrazumevani konstruktor koji svim poljima dodeljuje
vrednost nula
Ako se napie konstruktor ne moe se vie koristiti
podrazumevani konstruktor

23 24
Konstruktor sa parametrima u klasi Kutija
class Kutija {
Konstruktor sa parametrima u klasi Kutija
double sirina;
U klasi Kutija koja ima konstruktor sa parametrima ne
double visina;
mora postojati metod za postavljanje dimenzija, ako se
double duzina;
pretpostavi da objektu Kutija ne treba menjati dimenzije
// Konstruktor sa listom parametara Korienje podrazumevanog konstruktora u ovoj klasi
Kutija(double s, double v, double d) { izaziva greku u prevoenju programa
sirina = s; Moe se napisati vie konstruktora u jednoj klasi
visina = v; (sledee poglavlje)
duzina = d;
}

double zapremina() {
return sirina * visina * duzina;
}
} 25 26

Primer: korienje konstruktora sa parametrima


Rezervisana re this
class PrimerSaDveKutije4 {
public static void main(String args[]) { Koristi se unutar metoda da ukae na objekat za koji je metod pozvan
Kutija k1 = new Kutija(1, 2, 3); Primer za konstruktor klase Kutija:
Kutija k2 = new Kutija(2, 4, 5); Kutija(double s, double v, double d) {
// Izraunavanje i ispisivanje zapremina sirina = s;
System.out.println("Zapremina k1 je " + visina = v;
k1.zapremina()); duzina = d;
System.out.println("Zapremina k2 je " + }
k2.zapremina());
// Gornji konstruktor promenjen tako da se (nepotrebno) koristi this
}
Kutija(double s, double v, double d) {
}
this.sirina = s;
this.visina = v;
this.duzina = d;
}
27 28
Skrivanje polja Sakupljanje smea (Garbage collection)
Ne mogu postojati dve lokalne promenljive sa istim Operator new rezervie (dodeljuje) memoriju objektu
imenom Programer ne mora da vodi rauna o oslobaanju
Lokalna promenljiva ili parametar metoda mogu imati memorije
isto ime kao i polje Oslobaanje memorije
lokalna promenljiva (ili parametar) skriva polje ako vie nijedna referenca ne ukazuje na objekat, taj
polju se moe pristupiti pomou rezervisane rei this objekat vie nije potreban i moe se osloboditi memorija
koju on zauzima
Primer u kojem je korienje this obavezno
oslobaanje memorije radi sakuplja smea koji se
Kutija(double sirina, double visina, double duzina){
povremeno ukljuuje
this.sirina = sirina;
this.visina = visina;
this.duzina = duzina;
}
29 30

Jednostavna klasa ilustracija steka


Metod finalize
class Stack {
int stck[] = new int[10];
Koristi se za oslobaanje resursa koji ne potiu iz Jave,
int vrh;
npr. pokaziva na datoteku, Windows font, ... kad se
unitava objekat koji je rezervisao te resurse
Stack() {
Metod finalize se poziva neposredno pre nego to
vrh = -1; // Inicijalizacija vrha steka
sakuplj smea uniti objekat
}
Metod finalize se ne poziva kad neki objekat izae
iz opsega vaenja // Dodavanje jedne vrednosti na stek
Opti oblik metoda finalize void push(int broj) {
if(vrh == 9)
protected void finalize() {
System.out.println("Stek je popunjen.");
kod_za_finalizaciju else
} stck[++vrh] = broj;
}
31 32
Jednostavna klasa, ilustracija steka nastavak Primer rada jednostavne klase za stek
// Uzimanje jedne vrednosti sa steka class PrimerRadaSteka {
int pop() { public static void main(String args[]) {
if(vrh < 0) { Stack stack1 = new Stack();
Stack stack2 = new Stack();
System.out.println("Stek je prazan.");
// Stavljanje na stek
return 0;
for(int i=0; i<10; i++) stack1.push(i);
}
for(int i=10; i<20; i++) stack2.push(i);
else // Uzimanje sa steka
return stck[vrh--]; System.out.println("Stek stack1:");
} for(int i=0; i<10; i++)
} System.out.println(stack1.pop());
System.out.println("Stek stack2:");
for(int i=0; i<10; i++)
U realnom sluaju umseto naredbe za tampanje koristio
System.out.println(stack2.pop());
bi se izuzetak }
}
33 34

Rezultat
Stek stck1: Stek stck2:
9 19
8 18
7 17
6 16
5 15
4 14
3 13
2 12
1 11
0 10

35

You might also like