You are on page 1of 25

Javai objektno orijent:irano programiranje

6
Objektno orijentirano
program1ran] e

Drugaciji pristup programiranju


Klasa i objekt
Kreiranje objekta iz klase
Nasljeaivanje klasa

75

Drugaciji pristup programiranju


0 va.Znosti i brzini razvoja informati&e tehnologije te potrebe za informatikom, besmisleno je
uopee raspravljati. Da bi informaticari, ponajvise programeri mogli drzati korak sa zah*vnim
potrebama t:rZista, bilo je potrebno zamijeniti neke starije tradicionalne pristupe programiranju.
Osnovna ideja, ovakvog novog programerskog pristupa je: sto je vise moguce koristiti vee
napisani kod u svojim programima. .Kao sto je poznato veCina danasnjih aplikacija ima gumbe,
izbornike,... svaki puta iz pocetka pisati sav kod za rad s takvim elementima programskog sucelja,
uistinu moze biti napomo. Dakle, ideja je da ill koristimo kod za takve elemente koji je vee netko
definirao ill smo ga mi. sami definirali, a onda mi. samo mijenjamo npr. tekst na gumbu, veliCinu
gumba, akciju koja ce se dogoditi klikom na gumb,... Ovakav pristup nam omogucava da nakon
sto jednom napisemo npr. funkciju koja ce provjeravati je li broj prost, vise nikada ne moramo tu
funkciju pisati, cak ju necemo morati niti kopirati u svoje nove programe, vee cemo ju
"zapakirati" i samo pozivati u svojim programima. Ovakav pristup programiranju je osobito
prigodan za ispravljanje gre8aka ill bilo kakve izmjene. Npr. ako smo primijetili da nasa funkcija
koja provjerava je li broj prost ne radi dobro, neeemo morati mijenjati kod svih programa u
kojima smo koristili tu funkciju, jer smo ju tamo samo pozivali. Dovoljno ee biti samo
promijeniti definiciju te funkcije na jednom mjestu i automatski ce ona ispravno raditi i u svim
ostalim programima. Slicno je i s gumbima, ukoliko u jednom trenutku dodu u modu okrugli
gumbi a ne vise pravokutni kao sto su danas, neee bi.ti potrebno mijenjati sve programe koje u
sebi imaju pravokutne gumbe vee eemo jednostavno izmijeniti gotovi kod koji smo koristili za
kreiranje gumba i automatski ee svi gumbi. u svim programima, u kojima smo pozivali taj kod bi.ti
okrugli.
Ovakav pristup programiranju znatno je olakSao rad velikim programerskim kueama. Nairne,
veCina danasnjih programa kreirana je od nezavisnih dijelova koda koji se pozivaju u "glavnom
programu". Ukoliko se ustanovi gre8ka u programu, ona se ispravlja u tocno odredenoj
komponenti koda. Ispravljena komponenta koda posalje se korisniku, koji staru komponentu
zamijeni novom i program radi ispravno.
Upravo gore opisani naCin programiranja osnova je objektno-orijentiranog programiranja.

76

Java i objektno orijentirano programiranje

Klasa i objekt
Motiv za objektno-orijentirano programiranje naveli smo u proslom naslovu, sama ideja
objektno-orijentiranog programiranja potekla je iz naseg, realnog svijeta. Okrenemo se oko sebe
vidjet cemo neke objekte, npr. automobile, avione, zgrade, kuce, motocikle, televizore,... Prilikom
programiranja nerijetko cemo u svojim programima koristiti upravo njih ill neke druge
imaginarne objekte, kao sto su trokut, krug, jednadZba, broj,...
KaZemo li npr. automobil, avian ill trokut, mislimo na Citavu klasu automobila, aviona ill trokuta,
mislimo na sve automobile, avione ill trokute. Medutim Wemo li npr. crveni A3, izbor ce biti vee
malo smanjen, znat eemo da su to samo crveni automobill marke Audi tip A3. Znamo li npr.
jos i registarsku oznaku znat eemo toCn.o koji je to automobil, a ako radimo u policiji, znat eemo sve i
o vlasniku automobila, jaCinu motora, godinu proizvodnje,... Nakon sto znamo sve te detalje, vise
ne govorimo o Citavoj klasi automobila vee o konkretnom automobilu o objektu automobil.
Upravo tako je i u programiranju. Klasa ee biti svojevrstan predlozak za objekt, ona sadrzi
opcenita svojstva. Nakon sto nek.u klasu detaljno opisemo ona postaje objekt odnosno instanca.
Instanca je samo drugi naziv za objekt. Dakle objekt odnosno instanca su konkretizacija
klase. Takva konkretizacija klase, definiranje osnovnih svojstava klase nazivamo kreiranje
(mstanciranje) objekta.
Primjer 6 -1:
Neka osnovna svojstva automobila hila bi: marka, tip, snaga, maksimalna brzina, snaga, boja, broj
sasije, registracijska oznaka. Ukoliko ne znamo sva navedena svojstva ill bar vetinu njih,
govorimo o klasi automobil. Medutim ako kaiemo to je Mazda, 121, snaga je 38 k:w, maksimalna
brzina je 180 km/h plave je boje, klasu smo uvelike smanjill. Znamo li jos i broj sasije ill
registracijsku oznaku znat eemo toCn.o o kojem se automobilu na ulici radi i tada govorimo o tom
automobilu kao objektu.
Osnovna svojstva trok.uta hila hi duljine stranica i mjere kutova. Kazemo li trokut mislim na bilo
koji trokut koji postoji i u tom slucaju je trokut klasa. Medutim, kazemo li trokut Cije su duljine
stranica 3, 4 i 5 em, znamo toeno o kojem se trokutu radi i znamo sve o njemu te govorimo o
objektu trokut Cije su stranice 3, 4 i 5 em.
Do sada smo rekli da klase opcenito imaju neka svojstva. Kod automobila su to bill marka, tip,...
Osim svojstava, nad klasama je moguce izvr8avati odredene radnje. Neke radnje kod automobila
hi bile: upali motor, ubaci u prvu brzinu dodaj gas, pritisni spojku,... Slicno je i u programiranju,
sto znaCi da ee klase moCi imati neka svojstva i neke radnje koje ce se nad klasama moCi
izvrsavati tzv. metode.
Svojstva ce u stvari biti neke globalne varijable, dok ce metode biti funkcije (metode) definirane
unutar neke klase. Opcenito eemo svojstva i metode zvati elementima klase.
Opcenito je cilj klase da njenim svojstvima i metodama mo.Zemo pristupati iz drugih klasa. Npr.
definiramo li klasu koja ce izmedu ostalih sadclavati metodu koja ce provjeravati je li neki broj
prost, tada bismo h*li toj metodi pristupati iz drugih klasa. Opeenito, da bismo svojstvu ill
metodi neke klase mogli pristupati iz druge klase, one trebaju biti deklarirane public Gavne).
Osim public, klasa mo.Ze imati i elemente (svojstva ill metode) koje ce biti samo pomocne za
definiciju public metoda i ne trebaju se moCi pozivati u drugim klasama. Za takve cemo metode
reCi da su private. Npr. u klasi u kojoj se nalazi metoda koja provjerava je li neki broj prost, moze
postojati metoda koja ce brojati koliko neki broj ima djelitelja, ta metoda moze biti pomoena za
metodu koja provjerava je li neki broj prost, no nju ne moramo moCi pozivati iz drugih klasa,
stoga ona maze biti private metoda.

77

SljedeCi vazan pojam kada govorimo o k.lasama je konstruktor k.lase. Konstruktor k.lase je
metoda unutar k.lase) koja ima isto ime kao klasa a ne vraca nikakav tip. Konst:ruktor se izvrlava
prilikom kreiranja objekta. On ne vraca nikakvu vrijednost) a namjena mu je inicijaliziranje
svojstava objekta, postavljanje svojstava na neku pocetnu vrijednost. )edna k.lasa moze imati jedan
ili vise konstruktora. Vee smo rek.li da konstruktor ima isto ima kao k.lasa. Sarna po sebi se namecu
pitanje) koja je namjena vise konstruktora? Kako je moguce da dvije ilivise metoda imaju
isto ime? K.ako ce klasa znati koju metodu tteba izvrSiti? U stvari se radio tome da ako klasa ima
dva ista konsttuktora) onda oni moraju imati razliCiti broj parametara. Vec smo rek.li da je
namjena konsttuktora inicijalizacija svojstava objekta. Mi objekt mozemo kreirati bez da znamo
vrijednosti svih svojstava) u tom slucaju ce se svojstva postaviti na neke inicijalne vrijednosti. U
tom slucaju cemo vrijednosti svojstava definirati kada ih saznamo. Npr. ako imamo klasu auto,
nije nu.Zno da prilikom kreiranja objekta tipa a11to znamo sva njegova svojstva. U tom slucaju
cemo svojstva inicijalizirati na neke pocetne vrijednosti, npr. za maksimalna brzina ce biti 100
km/h ako drugaCije nije receno)"'
Ukoliko prilikom kreiranja objekta znamo vrijednosti svih svojstava klase) mozemo kreirati objekt
s tim svojstvima.
Upravo je to namjena vise konstruktora. U prvom slucaju cemo pozvati konstruktor bez
parametara) koji ce svojstva inicijalizirati na neku pocetnu vrijednost, najce5ce 0 ako se radi o
numerickim vrijednostima odnosno prazan stting ako se radi o tekstualnim vrijednostima) to
definira sam programer k.lase. U drugom slucaju cemo pozvati konsttuktor sa parametrima) koji
ce vrijednosti svojstava postaviti na vrijednosti koje smo proslijedili preko parametara.
Opcenito je slucaj da k.lasa moze imati dvije ili vise metode koje se jednako zovu. U tom slucaju
one moraju imati razliCiti broj parametara ili parametri moraju biti razliCitog tipa) a za takve
metode kaZemo da su preopterecene (overloadane) metode.

Nakon sto smo se upoznali s pojmom klase i svim VaZnijim pojmovima koji dolaze s klasom,
vrijeme je da nauCimo kako kreirati klasu.
Klasu u Javi cemo opcenito kreirati na sljedeCi naCin:

public class

_klase

svojstva_i_metode;
)

Primjer 6 -2:
Definirajmo k.lasu Trokut, Cija ce svojstva biti duljine sttanica trokuta (a, b i c) a metode ce biti
OpsegO i PovrsinaO koje ce vracati opseg i povrlinu trokuta.
Rjesenje:
Ovdje cemo oC.ito imati tri svojstva (duljine stranica a) b i c)) koja ce biti public svojstva jer im
trebamo moCi pristupiti iz drugih k.lasa. Nadalje cemo imati dvije isto tako public metode Opseg

0 i Povrsina 0 za racunanje opsega i povrSine trokuta. Osim toga imat cemo jednu private
metodu Poluopseg 0 koja ce vracati poluopseg trokuta) a koja nam je potrebna za racunanje
povrsine trokuta Heronovom formulom: P = s(s-a)(s-b)(s-c) , pri cemu je s poluopseg:
( a+b+c). OvdJ'e Je 1og:t cno u natl naJ manJ e dva konstruktora:
v

2
prvi konsttuktor bez parametara) koji ce vrijednosti parametara a, b i c postaviti na 0. Drugi
konstruktor ce imati tri parametta i inicijalizirati svojstva a, b i c na vrijednosti parametara.
Ovdje

78

Java i objektno orijentirano programiranje


cak ima smisla staviti i konstruktor koji ce imati jedan parametar a odnosit ce se na
jednakostranicne trokute i on ce vrijednosti parametara a, b i c postaviti na vrijednost
proslijedenog parametra. Konstruktor s dva parametra nema previse smisla, on bi se odnosio na
jednakokracne trokute, no on nije spretan jer hi moglo doCi do zbrke koji je parametar duljina
osnovice jednakokraenog ttokuta a koji duljina kraka ttokuta.
public class Trokut
{

public int a, b, c;
public Trokut ()
{

a =
b

0;
0;

c = 0;
public Trokut(int x, int y, int z)
{

a
b

x;
y;

c = z;
public Trokut

(int X)

a = x;
b

x;

c = x;

private double Poluopseg

()

return

(double)(a + b + c) I 2;

public double Povrsina

()

double s = Poluopseg
return Math.sqrt (s
public int Opseg

();
(s -a)

(s - b)

(s - c));

()

return a + b + c;

Primijetimo da smo kod metode Poluopseg 0 pisali return (double) (a + b + c) I 2. Da


nismo pisali (double) poluopseg ne bi bio tocan. Nairne, kako sua, b i c cijeli brojevi rezultat hi
bio cijeli broj pa bi npr. poluopseg trokuta s duljinama stranica 3, 3 i 3 bio 4 a ne 4.5. Stoga smo
najprije zbroj pretvorili u dot ble pa smo tek onda dijeliti i u tom slucaju ce poluopseg biti do11ble.
Napomena:
Da smo zaglavlje drugog konstruktora:

public Trokut(int x, int y, int z)

pisali kao
public Trokut(int

a, int b, int c)

79

doslo bi do problema jer se svojstva klase i parametri metode zovu jednako. U tim slucajevima bi
definicija ove metode trebala imati. oblik:
public Trokut(int

a, int b, int c)

this.a
this.b
this.c

a;
b;
c;

this u ovom slucaju znaCi da je u nastavku navedeno svojstvo ill metoda klase. Dakle,

interpretacija ovoga hi hila svojstvu a klase u kojoj se nalazim (Trokuf; pridru.Zi vrijednost
parametra a i tune hi bilo nikakvih problema. this mozemo pisati opcenito ispred elemenata
klase, no ako nemamo ovakvog mijdanja parametara metoda s elemenata klase, to nije potrebno.

80

Java i objektno orijentirano programiranje

Kreiranje objekta iz klase


Kao sto smo vee rekli, osnovna namjena klase je koristiti je u drugim klasama, odnosno svojim
programima. Nakon sto smo nauCili kreirati vlastitu klasu, vrijeme je da pokaZemo kako tu klasu
pozivati u drugim klasama, te kako pozivati definirati njena svojstva i pozivati njene metode.
Na klasu mozemo gledati kao na jedan novi tip podataka, koji ce imati neke vrijednosti i nad
kojim cemo moCi izvrsavati neke operacije (pozivati metode).
Kao i svaki drugi tip podataka, klasu trebamo deklarirati. OpCi oblik deklaracije objekta Ciji ce tip
biti neka klasa je:
ime_klase ime_objekta;

Na ovaj naCin smo u stvari samo najavili da cemo koristiti objekt ime_objekta, koji ce biti tipa
ime_klase. Taj objekt jos zapravo ne postoji. S takvim objektom ne mozemo jos nista raditi. Da
bismo mogli ndto raditi nad tim objektom (npr. izvrsavati metode koje smo deflnirali u
pripadnoj klasi) moramo ga instancirati, zaista ga stvoriti. Objekt cemo instancirati na sljedeCi
naCin:
ime_objekta new ime_klase

([parametri]);

Prisjetimo se, kada smo govorili o klasama, rekli smo da klasa moze imati jedan ill vise
konstruktora i to smo nazivali preopterecenje konstruktora, preoptereceni konstruktori su se
razlikovali po broju parametara, odnosnu tipu parametara. Prilikom instanciranja klase, mi u
stvari izvrsavamo odredeni konstruktor i to onaj Ciji broj i tip parametara odgovaraju broju i tipu
parametara koje smo naveli prilikom instanciranja klase.
Cesto cemo posljednje dvije naredbe ujediniti te cemo istovremeno deklarirati i kreirati objekt. To
cemo napraviti sljedecom naredbom:
ime_klase ime_objekta = new ime_klase

([parametri]);

Primjer 6 - 3:
Kolike ce biti duljine stranica trokuta nakon sljedeCih naredbi:

a) Trokut t = new Trokut


b) Trokut t = new Trokut
c) Trokut t
new Trokut

();
(3, 4, 5);
(2);

ako je Trokut klasa koju smo kreirali u primjm4 -2.


Rjesenje:

OCito smo u svakom od prtmJera kreiranjem objekta t koji je tipa Trokut pozivali drugi
konstruktor klase Trokut. Stoga ce duljine stranica biti:
a) a= 0, b = 0, c = 0; u ovom slucaju se izvrSava prvi konstruktor (bez parametara), koji duljine
stranica postavlja na 0.

81

b) a= 3, b = 4, c = 5; izvrsava se drugi konstruktor (s tri parametra), prvi proslijedeni parametar


bit ce duljina stranice a, drugi duljina stranice b, dok ce treCi proslijedeni parametar biti duljina
stranice c.
c) a 2, b = 2, c 2; izvrsava se treCi konstruktor, koji ce duljine svih stranica postaviti na
jedinu proslijedenu vrijednost, koja je u ovom slucaju 2.

Pristup elementima klase


Upravo smo nauCili kako k:reirati objekt iz neke klase. Sto cemo sada s tim objektom?
Vee prije smo prije rekli da svaka klasa ima svoja svojstva i metode tj. neke radnje koje se nad
njom mogu izvrsavati. Pa jedino sto cemo mi raditi s objektima je mijenjati im svojstva i
izvrsavati radnje nad njima (pozivati metode).
To znaCi da npr. kada smo jednom defmirali klasu Trokllt, Cija su svojstva duljine stranica trokuta
a metode raeunaju opseg i povclinu, tada vise nikada necemo morati u svojim programima pisati
formulu za raeunanje povrsine trokuta. Jednostavno cemo kreirati objekt iz klase Trokut, postaviti
mu duljine stranica i jednostavno pozivati metodu Povrsina O, koja nam vraca povclinu tog
trokuta. Dakle, slobodno mozemo zaboraviti na Heronovu formulu Ukoliko ikada itko zakljuCi
da Heronova formula za racunanje povrsine trokuta nije tacna i pojavi se neka nova formula za
raeunanje povrSine trokuta (sto nije vjerojatno), jednostavno cemo izmijeniti svoju metodu
Povrsina 0 u klasi TrokHt i svi programi ce automatski racunati povrsinu trokuta prema novoj
formuli.
Sada kada smo uvidjeli smisao objekta, postavlja se pitanje kako pristupiti elementima objekta
(svojstvima i metodama)? pa pristupat cemo im prema sljedecem principu:
ima_objakta.alamant;

Primjer 6 - 4:
Kreirajmo objekt t koji ce biti instanca klase Trokllt koju smo kreirali u primjeru 4 - 2, pri cemu ce
duljine stranica biti postavljene na 3, 4 i 5, a zatim u varijablu p spremimo povrsinu tog troku.ta.
Rjesenje:
Najprije k:reirajmo objekt t, koji ce biti instanca klase Trokllti Cije ce duljine stranica biti 3, 4 i 5.
Prvi naCin na koji mozemo ovo rijditi je da duljine stranica proslijedimo konstruktoru odmah
prilikom kreiranja objekta:
Trokut t = new Trokut (3, 4, 5);

Isto ovo mogli smo napraviti tako da kreiramo objekt t iz klase Trokut, ali ovaj puta bez
parametara. U tom ce slucaju vrijednosti svojstava a, b i c biti postavljene na 0, a zatim
postavimo vrijednosti svojstava na vrijednosti 3, 4 i 5, sto bi izgledalo ovako:
Trokut t = new Trokut ();
t.a
3;
t.b
t.c

4;

5;

u prvom

ce se slucaju prilikom kreiranja objekta t izvrsavati drugi konstruktor, dok ce se u


drugom slucaju izvrsavati prvi konstruktor.
Nakon sto smo k:reirali objekt tipa Trokllt, trebamo jos u varijablu p spremiti povrSinu tog troku.ta.
To cemo napraviti pozivanjem metode Povrsina O nad objektom t, na sljedeCi naCin:
double p = t.Povrsina ();

82

Java i ohjektno orijentirano programiranje


Napisemo linpr.: Trokut t = new Trokut (3, 4, 5);
U memoriji ce se alocirati prostor za ohjekt Trokut te ce se vrijednosti svojstava (stranice a, b i c
postaviti na vrijednosti 3, 4 i 5) a u varijahlu t ce hiti pohranjena adresa ohjekta u memoriji.
varijabla

\.t

0
G

objekt

Opcenito nad ohjektima nije moguce izvrsavati standardne operacije npr. +, -, ==,... Razmislimo

li malo, to uistinu ima smisla. Sto hi znaCilo t + j ako su t ij dvije instance klase TrokHP. Sto

hi znaCilo zhrojiti dva trokuta?


Operator pridruZivanja (=) nad ohjektima je moguce pozivati, samo on ne radi uvijek ono sto
hismo mazda ocekivali. Pretpostavimo da smo kreirali dvije instance klase Trokut, t ij. Kao na
sljedecoj slici:

0
b0

bG

c0

c
j,

dogodit ce se sljedece:

Izvrsavanjem izraza: t

0
b0

bG

c0

To znaCi da smo samo promijenili referencu i sada t i j pokazuju na isti ohjekt.


Izvrsavanjem izraza: t .a = 4
svojstvo a (duljina sttanice a) objekta j ce takoder imati vrijednost 4.

83

Nasljedivanje klasa
Nasljedivanje je vrlo cest pojam u objektno orijentiranom programiranju. Kao i kod samog
objektno orijenti.ranog programiranja, osnovna ideja nasljedivanja je izbjeCi visesttuko pisanje
istih dijelova koda. !deja je vrlo jednostavna: imamo jednu osnovnu klasu s osnovnim svojstvima
i metodama koje ju opisuju, a onda po potrebi kreiramo nove klase koje ju "nadopunjuju" s
nekim dodatnim svojstvima i metodama. Za takve klase koje "nadopunjuju" osnovnu klasu reCi
cemo da ju nasljeduju.
llustrirajmo nasljedivanje na jednom jednostavnom primjeru:
pretpostavimo da zelimo organizirati svoju kolekciju DVD-a i zelimo napraviti program koji ce
nam to omoguCiti. OCito cemo imati dvije vrste DVD-a: s filmovima i s glazbom. Dakle kreirat
cemo dvije klase s pripadnim svojstvima i metodama:

84

Glazba

Film

naslov

naslov

veliclna
Ul

6'

komentar

6'

izvodac

komentar
trajanje

brojPjesama

reziser

dodajNaslov 0

dodajNaslov 0

vratiNaslov 0

vratiNaslov 0

dodajKomentar 0

dodajKomentar 0

vratiKomcntar 0

veHcina

vratiVelicinu 0
dodajlzvodaca

vratiKomentar 0
vrattVelicinu 0
dodajTrajanje 0

vratilzvodaca 0

vratiTrajanje

dodajBrojPjesama 0

dodajR.e2isera

vratiBrojPjesamaO

vratiRezisera

0
0
0

Kao sto mozemo primijetiti, neka svojstva i metode se nalaze u obje klase i stoga i moramo ih
dva puta definirati.
Problem mozemo rije8iti tak.o da elemente koji se pojavljuju u obje klase definiramo u jednoj
posebnoj klasi DVD:

DVD
naslov
Ul

6'

veHcina
komentar
dodajNaslov 0

vratiNaslov O
dodajKomentar 0
vratiKomentar 0
vratiVelicinu 0

Sad kada imamo definiranu klasu DVD, mozemo kreirati klase Film iGlazba koje nasljeduju klasu
DVD. Nasljedivanjem klase DVD klase Film iGlazba automatski nasljeduju i sva svojstva i
metode klase DVD. Dakle sva ta svojstva i metode ne ttebamo jos jednom definirati.
Opcenito pretpostavimo da imamo neku klasu A, koja ima svoja svojstva i metode. Klasu A
moze naslijediti klasa B, koja ce u tom slucaju imati sva svojstva i metode kao i klasa A, ali
maze imati ijos neka svoja dodatna svojstva i metode. U tom slucaju je A nadklasa klase B,
dok cemo za B reCi da je podklasa od A

Kreiranjem instance klase B moti cemo pozivat:i. sve koje smo definirali u klasi B, alii one
definirane u klasi A, dok cemo kreiranjem instance klase A moo pozivat:i. samo elemente klase A.
Podklasa tako takoder maze bit:i. nadklasa nekoj drugoj klasi ina taj naCin je moguce izgradit:i.
hijerarhiju klasa.

klasaA

ldasa B
ldasa C

.Klasu B koja ce naslijedit:i. klasu A kreirat cemo na sljedeCi naCin:


c1ass B extends A
{

definicija_k1ase;
{

Kod ovakve hijerarhije moze se dogodit:i. da je metoda s ist:i.m imenom kreirana u dvije klase koje
su na razliCitoj razini u hijerarhiji. Npr. pretpostavimo da je u klasi A definirana metoda test 0 i
metoda s ist:i.m imenom je definirana i u klasi B, koja nasljeduje klasu A.

klasaA
public int
test()
{

klasa B
public int test()
{

Kako klasa B nasljeduje klasu A ona nasljeduje i njenu metodu test 0, a isto taka ona ima i svoju
metodu test 0 Kreiramo instancu klase B te pozovemo metodu test 0. nije sasvim jasno koja
metoda test O ce se izvrSiti.
U ovakvim slucajevima izvrsit ce se metoda test O koja je definirana u klasi B i to se zove
prekoracenje (override) metoda.
Opcenito smo mogli imati klasu C, koja nasljeduje klasu B (klasa C nema metodu test (}).
Pozivanjem metode test O nad instancom klase C izvrsit ce se metoda test O iz klase B.
Dakle,
pravilo je takvo da se izvrsava metoda iz prve
nadklase.

86

Java i objektno orijentirano programiranje

Primjer 6 -5:
Kreirajmo klasu Cetverokut, Cija ce svojstva biti duljine sttanica (a, b, c, d) cetverokuta, dok ce
jedina metoda biti Opseg Q, koja ce vracati opseg cetverokuta. Nadalje kreirajmo klasu
Pravokutnik koja nasljeduje klasu Cetverokut te ima jos metode Povrsina Q, koja raeuna
povrsinu pravokutnika i Dijagonala Q, koja vraca duljinu dijagonale pravokutnika.
Rjesenje:
public class Cetverokut
{

public int a, b, c, d;
public Cetverokut()
{

a - b - c - d - 0;
public Cetverokut

(int a, int b, int c, int d)

this.a
this.b
this.c
this.d

a;
b;
c;
d;

public int Opseg

()

return a + b + c + d;

public class Pravokutnik extends Cetverokut


{

public Pravokutnik

()

a - b - c - d - 0;
public Pravokutnik

(int a, int b)

this.a
this.b
this.c
this.d

a;
b;
a;
b;

public int Povrsina

()

return a * b;
public double Dijagonala

()

return Math.sqrt

(a* a+ b *b);

87

aJ BlueJ:

[]gJ

prim jer4-5

Pro;ect Edit Tools View

I
I
I

NewCiass

---

I
I
-

[i]c=J

<1

r-J

Help

t>
View

uses

li2i Inheritance

Napomena:

Svaka klasa moze nasljedivati. samo jednu klasu,klasa moze imati. samo jednu nadklasu. S druge
sttane nek.u klasu moze nasljedivati. bilo koja klasa,klasa moze biti. podklasa.

Java i objektno orijentirano programiranje

Zadaci za vjezbu
1. Objasni razliku izmedu klase i objekta.
2. Navedi nekoliko primjera klasa iz stvamog Zivota, navedite nekoliko njihovih svojstava i
metoda te objasnite sto hi bio pripadni objekt.
3. Sto su po strukturi metode, a sto svojstva?
4. Sto je konstruktor klase?
5. Sto znaCi preopterecenje (overloadanje) metoda?
6. Definriaj klasu krug, Cije ce svojstvo biti polumjer kruga (ry, osim toga imat ce seljedece
metode:
publi.c double povrsi.na () - koja ce vracati povrSinu kruga;
publi.c double oseg () - koja ce vracati opseg kruga.
Potom napisi novu klasu u kojoj cd kreirati instancu klase krug i pozivati njene metode.
7. Definiraj klasu osoba Cija ce svojstva biti ime, pretfme i starost osobe. Nad klasom tteba
definirati i sljedece metode:
publi.c Stri.ng i.spi.s () - vraca ime i prezime osobe;
publi.c Stri.ng i.ni.ci. jali. () - vraca inicijale osobe;
publi.c boolean stari.ji. (osoba o) - vraca true ako je ttenutna
osoba starija od osobe o, inace vraca false;
Potom napisi novu klasu u kojoj cd kreirati instancu osoba krug i pozivati njene metode.
8. Definiraj klasu razlomak Cija ce svojstva biti brojnik i natfvnik nekog razlomka, osim tpoga
imat ce i sljedece metode:
publi.c razlomak krati. () - krati razlomak;
publi.c razlomak zbroj (razlomak r) - vraca zbroj ttenutnog
razlomka i proslijedenog;
publi.c razlomak razli.ka
(razlomak r) - vraca razliku
ttenutnog razlomka i proslijedenog;
publi.c razlomak umnozak (razlomak r) - vraca umozak
ttenutnog razlomka s proslijedenim;
publi.c razlomak kvoci.jent (razlomak r) - vraca kvocijent
ttenutnog razlomka s proslijedenim;
publi.c Stri.ng i.spi.s () - vraca zapis razlomka kao String (npr. 3/4).
Potom napisi novu klasu u kojoj cd kreirati instancu klase razlomaki pozivati njene metode.
9. Objasni pojam nasljedivanje klasa.
10. Navedi nekoliko primjera nasljedivanja klasa iz svakodnevnog zivota.
11. Definiraj klasu trokut Cija ce svojstva biti duljine sttanica ttokuta (a, b, c) a imat ce i dvije
metode:
publi.c double opseg ( ) - vraca opseg ttokuta
publi.c double povrsi.na () - vraca povrsinu ttokuta
Nadalje definiraj klasu jednakokracan koja nasljeduje kl.asu ttokut, ima jos jedan dodatni
konstruktor (koji ima samo jedan parametar) te ima jos metodu:
publi.c double vi.si.na () - vraca visinu jednakosttanienog trokuta
Potom napiSi novu klasu u kojoj cd kreirati instance klasa trokut i jednakokracan i pozivati
njihove metode.

7
Programi u Javi
Klasa i program
Metoda main
Izvrsavanje Java programa iz komandnog
prompta

90

Java i objektno orijentirano programiranje

Klasa i program
Sve sto smo do sada radili svodilo se je na pisanje metoda, koje smo pozivali iz sucelja BlueJ
razvojnog okruZenja. Pomoeu tog okruZenja smo mogli metodi proslijediti parametre ina kraju
vidjeti sto metoda vrata. Nadalje smo nauCili kako kreirati Citave klase. Iz tih klasa smo kreirali
objekte i nad njima izvrsavali metode, ali sve na razini metoda koje smo izvrsavali iz BlueJ
razvojnog okruZenja.
Cilj programiranja je napraviti program koji ce se moCi samostalno izvrsavati na raeunalu
korisnika. Konkretno, htjeli bismo napisati program koji ce se moCi izvrsavati izvan BlueJ
razvojnog okruZenja.
Program u Javi je isto tako jedna klasa. Da bi neka klasa postala program treba irnati jos jednu
metodu koju nazivamo main. Dakle, da bi neka klasa hila program koji cemo moCi izvrsavati
neovisno o Blue] razvojnom okruZenju, ta klasa treba irnati metodu main.
Kada zelimo pokrenuti program napisan u Javi prvo se trazi metoda main i izvrsava se. Ukoliko
zelimo pokrenuti klasu koja nema metodu main, doCi ce do pogrdke i klasa se naravno nece
pokrenuti.
Za one koji su programirali u Pascalu, main je u stvari ekvivalent glavnom programu u Pascalu. U
Pascalu smo isto tako mogli defmirati svoje funkcije i procedure (metode), koje smo pozivali u
glavnom programu. Pokretanjem programa se je u stvari izvrsavao glavni program. Da nismo
irnali glavnom programa, isto taka bi doslo do gre8ke.

91

Metoda main
Vee smo rekli da ee neka klasa biti. program ako izmedu ostalih ima metodu main.
OpCi oblik definicije metode main je:
public static void main (String[] s)
{

definicija_metode;
)

Ova metoda je izuzetno va.Zna stoga eemo ju detaljno objasniti.. Osobito je bitno zaglavlje metode
(prvi red), stoga eemo objasniti. znacenje jedne po jedne rijeCi unutar konteksta metode main.
Rijec s kojom zapoCinje definicija metode main je public. 0 njoj smo vee govorili. Prisjeti.mo se:
public opeenito znaCi da je neki element klase javan i moze mu se pristupiti. i iz drugih klasa.
Osim sto moze biti. public, elementi. klase mogu biti. jos i private iprotected.
Ukoliko je neki element private, tada tom elementu ne mozemo pristupiti. izvan klase u kojoj se
taj element nalazi.
Negdje izmedu public i private elemenata su protected elementi.. Ako je neki objekt
protected, tada takvom elementu mo.Zemo pristupiti u klasi koja nasljeduje doti.cnu klasu, aline
i u ostalim klasama.
U kontekstu metode main, bitno je da je ona public iz razloga sto nju pokreeemo prvu prilikom
pokretanja klase. Nju pokrece Java Virtual Machine.
Sljedeea rijec u nizu je static. Da je neka metoda static znaCi da ju je moguce pozivati na
razini klase. Prisjeti.mo se, kada smo htjeli pozvati metodu Povrsina 0 klase Trokut, morali smo
kreirati. instancu klase Trokut i nad tom instancom pozvati metodu Povrsina 0

Trokut t

double p

new Trokut (a, b, c);


t.Povrsina ();

a nismo mogli pisati

I double p

Trokut .Povrsina

();

s druge strane imamo klasu Math i npr. metodu sqrt 0 koja je definirana nad tom klasom. Zelimo
1i raeunati drugi korijen nekog broja, ne moramo kreirati instancu klase Math i nad njom pozivati
metodu sqrt 0, vee metodu sqrt 0 pozivamo na razini klase Math.

I double

Math. sqrt ( 7);

U prvom slucaju metoda Povrsina O nije hila static i stoga smo ju morali pozivati na razini
objekta koji je bio tipa Trok11t. U drugom slucaju je metoda sqrt O static metoda i ona se moze
pozivati na razini klase.
void znaCi da metoda nista ne vraea. Na kraju metode koja je tipa void nije potrebno pisati.
return.

main je ime metode.

92

Java i objektno orijent:irano programiranje

String U sse odnosi na parametre metode. Metoda main kao parametre ima niz stringova.

Primjer 7 -1:
NapiSimo program koji ce zbrajati dva prirodna broja i ispisivati njihov zbroj.

Rjelenje:
BuduCi da trebamo napisati program koji te zbrajati dva prirodna broja, napisat cemo klasu koja
ce motati sad.rZavati metodu main.Brojeve cemo unijeti kao parametre metode main.
public class Zbroj
{

public static YOid main (String[] s)


{

int
a=
Integer.pareeint(s[OJ); int b
=
Integer.parseint(s[l]);
System.out.println( a+ b);

U s obzirom da su parametri metode main sttebamo ih pretvoriti u cijele brojeve i to


smo napravili naredbom Integer.parseint ().
Rezultat smo ispisali naredbom System.out.prin.tln Q.
Nakon sto smo definirali klasu zbroj te ju uspjdno kompajpreost.aje nam jos pokrenuti
program. Program Cem.o u BlueJ razvojnom okruZenju pokrenuti pozivanjem metode main.
new ZbroiO
void
main(s)
Open Editor
Compile
Remove

Nak.on pozivanja metode main otvorit te nam se okvir gdje cemo unijeti parametre koje
prosljeciujemo metoda main.BuduCi da je parametat niz sttingova, brojeve koje zelimo zbrojiti
zapisat cemo unutar viticastih zagrada, unutar navodnika, medusobno odvojene zarezom:

IJBlueJ:

Method Call

110id main(string[] )

Zbroj.main (

I{"2","3'l

Cancel

Klikom na gumb OKt ce se program i rjesenje

te biti ispisano u posebnom okviru:

93

94

Javai
objektno
programiranje

orijent:irano

Izvrsavanje Java programa iz komandnog prompta


U proslom primjeru smo napravili program, medurim ponovo smo ga pozvali .iz BlueJ razvojnog
o.kruZenja. Na samom pocetku ovog poglavlja rekli smo da nam je cilj pisati programe koji ee se
moCi izvriavati. neovisno o BlueJ razvojnom okruZenju.
U nastavku cemo pokazati .kak.o napisani program pokrenuti. neovisno o BlueJ okruZenju.
Prethodni program je bio primjer jednog progtama pisan za operati.vni sustav DOS, ttv.
konzoJni program. Da bismo poktenuli ovaj program poktenut cemo DOS-ov komandni ekra.n.
To mozemo naptaviti. tak.o da kli.knemo na Start pa na Rgdje upiSemo cm.d
te klik.nemo na

gumbOK:

f:l)

Run

Type the name of a program, folder, document, or


Internet resource, and Windows wil open it for you.
Qpen: [c..:=l

--------------- --v [

OK

I[

Cancel

I[

!l.rowse...

Otvorit ce nam se prozor u kojem zadajemo naredbe upisivanjem. Premjestit cemo se u mapu u
kojoj se nalazi klasa Zbroj, koju smo .k:reimti u primjem 5 - 1. te cemo upisati: java Zbroj 2 3.
Priti.skom na ti.pku enterna ekranu ce se pojaviti. 5 (zbroj brojeva 2 i 3).
c\

C:\W
INDOWS\S

ystem32\cmd.e xe

l!llilI

Primijeti.mo da smo program pokretali naredbom: java Zbtoj 2 3.Java ovdje znaC.i da pozivamo
Javin interpreter, zbroj je .ime kJase (dokument s nastavkom class Zbrf!i.class) dok su 2 i 3
parametri koje prosljedujemo programu odnosno metodi main.

Napomena:
Da bismo mogli pokrenuti. program .iz komandnog prompta, on mora biti. kompajliran tj. mora
postojati. dokument s nastavkom .&lass. Program kompajlliamo u BlueJ-u.

You might also like