You are on page 1of 61

Objektno orijentisano programiranje

vebe, kolska 2012/13


Univerzitet u Beogradu, Matematiki fakultet
Biljana Stojanovi

Klase u Javi

Klase u Javi
Klasa je specifikacija svojstava odreene vrste
objekata.
Klasa definie novi tip.
Definicija klase se koristi za kreiranje objekata
tog klasnog tipa.
Kreirani objekti sadre sve komponente koje su
specifikovane u klasi.
Primer: klasa String predstavlja definiciju ili
specifikaciju za String objekte sa svim
operacijama koje se mogu izvravati nad njima.
Kad god se kreira novi objekat klase String, on
ima sve karakteristike koje su definisane u klasi.

Definicija klase
Definicija klase sadri:
promenljive (polja) mogu biti primitivnog
tipa ili mogu da referiu na objekte
proizvoljnog klasnog tipa, ukljuujui i onaj
koji definiemo
Razlikujemo tri vrste promenljivih:

instancne
klasne ili statike (static)
finalne ili konstantne (final)

metode definiu operacije koje se mogu


primeniti nad objektima te klase, obino nad
promenljivim iz klase

Instancne promenljive
Svaka instanca (objekat) klase ima svoju
kopiju instancne promenljive u memoriji.
Instancne promenljive razlikuju objekte
meusobno.
Nazivamo ih i nestatikim promenljivim.
Instancnim promenljivim predstavljene
su najbitnije karaktristike objekata klase,
tj. one koje ih jednoznano identifikuju.

Klasne (statike) promenljive


Vezane

su za klasu i dele ih svi objekti klase.


Postoji samo jedna ovakva promenljiva u memoriji
bez obzira koliko je objekata te klase kreirano.

Napomena: ne kreira se za svaki objekat posebna kopija


ovakve promenljive, ve svi objekti dele jednu istu
promenljivu u memoriji.

Klasna

promenljiva postoji u memoriji ak i kad


nijedan objekat klase nije kreiran.
Deklariu se kljunom reju static.

Finalne promenljive
Deklariu se kljunom reju final.
Ove promenljive imaju konstantnu
vrednost koja se zadaje kao inicijalna
vrednost u deklaraciji.
Obino se koriste za predstavljanje nekih
konstantnih vrednosti koje u nekom smislu
karakteriu objekte klase.
Svaki objekat imae svoju kopiju final
promenljive (osim ako nije deklarisana
pomou static).

Primer

Upotreba statikih promenljivih

Napomena! Najea primena statikih


promenljivih je za uvanje vrednosti koje su
zajednike svim objektima klase.

Primer: ako je potrebno brojati koliko je objekata


neke klase kreirano u programu, najbolje reenje je
da se za to iskoristi statika promenljiva.
Poto ona postoji i kada nijedan objekat klase nije
kreiran, moe da se iskoristi kao broja koji pre
kreiranja objekata ima vrednost 0. Svaki put kada
se instancira primerak klase, vrednost ove
promenljive se uvea za 1. Pristup i promena njene
vrednosti su mogui, jer je ona zajednika za sve
objekte.

Metodi u definiciji klase

Postoje dve vrste metoda:

Instancni metodi mogu se izvravati samo


u odnosu na konkretan objekat klase.
Klasni metodi mogu se izvravati i kada ne
postoji nijedan objekat klase. Deklariu se
kljunom reju static i nazivamo ih i statikim
metodima.

Klasni (statiki) metodi

U definiciji statikih metoda ne smeju se koristiti


instancne promenljive.

Poto statiki metodi mogu da se izvravaju i kada ne


postoje objekti, moe se desiti da se operie nad
promenljivim koje ne postoje u memoriji. U tom sluaju
kod se nee prevesti, dobie se poruka o greci.

Metod main() je uvek deklarisan kao statiki.

Pre nego to neka aplikacija pone da se izvrava, ne


postoji ni jedan kreirani objekat (bilo koje klase) u
memoriji.
Da bi aplikacija mogla da se pokrene, neophodan nam je
metod koji moe da se izvri ak i kada nema objekata,
dakle, statiki metod.

Napomene!

Iako se instancni metodi vezuju za objekat, u memoriji


postoji SAMO JEDNA kopija svakog instancnog metoda koju
dele svi objekti odgovarajue klase.

Memorijski resursi bi u velikoj meri bili zauzeti kada bi se za svaki


novi objekat kreirala i nova kopija instancnog metoda.

Poseban mehanizam omoguuje da, svaki put kada se


metod pozove, njegov kod se izvrava na nain specifian
za konkretan objekat.
Pored main() metoda, najea situacija kada koristimo
statike metode je kada se klasa koristi kao kontejner za
gomilu korisnih metoda.

matematike funkcije su implementirane kao klasni metodi u


standardnoj klasi java.lang.Math.
ovi metodi nemaju nikakve veze sa objektima, ve samo operiu
nad primitivnim tipovima. Klasa Math sadri i neke klasne
promenljive koje su zapravo korisne matematike konstante PI,
E, itd.

Pristup lanovima klase

Obino promenljivim i metodima pristupamo


izvan klase u kojoj su deklarisani.
Promenljive i metode je mogue deklarisati i
tako da im pristup izvan klase nije mogu.
Posebno emo razmotriti pristup statikim, a
posebno pristup nestatikim lanovima
(promenljivim i metodima) klase.

Pristup statikim lanicama klase

Statikom lanu klase pristupamo koristei notaciju:


ime_klase . ime_lanice
double koren = Math.sqrt(Math.PI);

Moe se pristupiti i preko promenljive koja referie


na konkretan objekat klase:
referenca_na_objekat . ime_lanice

Mogu se import naredbom ukljuiti imena statikih


lanova klase (promenljivih i metoda) i moe se
kasnije referisati na njih bez kvalifikovanja imenom
klase, samo navoenjem njihovih imena.
import static java.util.Arrays.fill;
... fill(niz, 5);

Pristup nestatikim lanicama klase

Instancnim promenljivim i metodima se


pristupa samo koristei reference na
konkretne objekte.
referenca_na_objekat . lan
Primer:
double povrsinaKupe = kupa.povrsina();

Definisanje klase

Za definisanje klase koristimo kljunu re class koju prati ime


klase i u okviru vitiastih zagrada detalji definicije.
class ImeKlase {
// lanovi (promenljive i metodi)
}
Po konvenciji, imena klasa u Javi poinju velikim slovom.
Za promenljive, kako statike tako i nestatike, u definiciji klase
mogu se postaviti inicijalne vrednosti.
Ukoliko se ne navede inicijalna vrednost, prilikom kreiranja
objekta bie pridruena podrazumevana vrednost.
Kada hoemo da fiksiramo inicijalnu vrednost promenljive, tj. da
je uinimo konstantnom, treba da deklariemo promenljivu
kljunom reju final. Ako ne stoji final, inicijalna vrednost moe
biti promenjena.

Definisanje metoda

Metodi su zapravo funkcije i na taj nain se i


definiu.
Tip vrednosti koju metod vraa moe biti
void, proizvoljan primitivni tip ili klasni tip.
Lokalne promenljive metoda se ne
inicijalizuju automatski, ve se mora
eksplicitno izvriti njihova inicijalizacija.
Metodima se u Javi svi argumenati prenose
po vrednosti.

Prenoenje argumenata primitivnog tipa


metodima

Ako je argument metoda primitivnog tipa, kopija


argumenta se prenosi metodu preko imena
parametra, a ne originalna vrednost. Iz tog razloga
metod ne moe promeniti njihovu vrednost u
programu.

Prenoenje argumenata klasnog tipa


metodima

Kada je argument metoda klasnog tipa,


metodu se prosleuje kopija reference na
objekat tog tipa, a ne kopija samog objekta.
Poto kopija reference takoe ukazuje na isti
originalni objekat, objekat moe biti
promenjen od strane metoda.

Prenoenje argumenata klasnog


tipa metodima

Final parametri metoda


Svaki

od parametara metoda moe se


deklarisati kao final, to ima efekat
spreavanja promene njegove vrednosti pri
pozivu metoda.
Poto mehanizam prenosa po vrednosti pravi
kopije vrednosti primitivnog tipa, ima smisla
koristiti final samo kada se primenjuje na
parametre koji su reference na objekte klasa.
Napomena: final spreava sluajnu promenu
reference na objekat koja se prosleuje
metodu, ali ne spreava promenu samog
objekta!!!

Promenljiva this

Svaki instancni metod sadri promenljivu this.


Kada se metod pozove nad nekim objektom klase, this
referie na taj objekat.
Kompajler koristi this implicitno kada se u telu metoda
koristi instancna promenljiva.
Kompajler implicitno umee objektnu referencu this
ispred imena instancne promenljive. Svako pojavljivanje
imena instancne promenljive zapravo sadri prefiks this.

Ako je pom instancna promenljiva, u telu metoda joj se zapravo


pristupa pomou this.pom.

double zapremina = sfera.zapremina();

/* sfera je objekat klase Sfera; promenljiva this u metodu


zapremina() referie na objekat sfera, tako da e upravo
instancna promenljiva radius iz objekta sfera biti
iskoriena u izraunavanju. */

Promenljiva this i nestatiki metodi


Promenljiva this omoguuje da postoji
samo jedna kopija svakog instancnog
metoda u memoriji (ak i kad postoji vei
broj objekata klase).
Upravo ona omoguuje da metod radi
korektno za svaki objekat klase.
Svaki put kad se pozove instancni metod
nad nekim objektom, promenljiva this se
postavlja da referie na taj objekat. Kod
unutar metoda e se odnositi upravo na
lanove tog objekta.

Eksplicitna upotreba promenljive this

Za lokalnu promenljivu ili parametar metoda moe se


koristiti isto ime kao i ime neke instancne promenljive.
U tom sluaju mora eksplicitno da se koristi this da bi
se referisalo na instancnu promenljivu unutar metoda.
Ime promenljive bez prefiksa this se odnosi na lokalnu
promenljivu metoda, ne na atribut klase.
void changeRadius(double radius) {
this.radius = radius;
}

this.radius se odnosi na atribut klase, a radius na


parametar metoda

Inicijalizacioni blokovi

Na isti nain kao i statike, mogu se


inicijalizovati i nestatike instancne promenljive.
Ako inicijalizacija podrazumeva vie izraza,
esto se inicijalizacija radi blokom inicijalizacije.
Postoje dve vrste blokova za inicijalizaciju:
Statiki blok za inicijalizaciju blok definisan
kljunom reju static i izvrava se samo jednom
kada se klasa uitava. On moe da inicijalizuje
samo statike promenljive.
Nestatiki blok za inicijalizaciju izvrava se za
svaki objekat koji se kreira i stoga moe da
inicijalizuje instancne promenljive.

Konstruktor

Pravljenje objekata klase vri se pozivom


posebnog metoda, tzv. konstruktora.
Konstruktor nema povratni tip i ne pie se nita,
ak ni void.
Ima isto ime kao i klasa.
Moe imati proizvoljan broj argumenata.
Inicijalizacioni blokovi koji su eventualno
definisani u klasi uvek se izvravaju pre tela
konstruktora.
Primarna svrha konstruktora je da izvri
inicijalizaciju instancnih promenljivih.

Podrazumevani konstruktor

Ako se za klasu ne definie konstruktor,


kompajler obezbeuje podrazumevani
(default) konstruktor koji ne radi nita i nema
nijedan argument.
<ime klase>()
{}
Ako je definisan neki konstruktor u klasi,
kompajler nee obezbediti podrazumevani
konstruktor i on se po potrebi mora eksplicitno
definisati.

Pravljenje objekata klase (1)

Primer:
Sfera lopta;

/* ovde se ne poziva konstruktor jer nikakav objekat jo uvek nije


napravljen, ve je samo deklarisana promenljiva koja moe da uva
referencu na objekat klase Sfera */
Da bismo napravili objekat klase koristimo operator

new za kojim sledi poziv konstruktora:


lopta = new Sfera(1, 2, 1.0, 1.0);

/* pravi se novi objekat klase Sfera sa datim vrednostima za


instancne promenljive. */

Sfera lopta = new Sfera(1, 2, 1.0, 1.0);


/* deklarie se promenljiva lopta i istovremeno kreira objekat na
koji ona referie */

Pravljenje objekata klase (2)

ivotni vek objekata

Trajanje objekta je odreeno promenljivom koja referie na njega, ako


postoji samo jedna. Ako vie promenljivih referie na jedan isti objekat,
objekat ivi sve dok negde postoji promenljiva koja referie na objekat.
Proces oslobaanja od mrtvih objekata radi tzv. Garbage Collector i ovaj
proces je automatizovan. Objekti se ne uklanjaju iz memorije odmah nakon
to postanu nedostupni, ve moe proi neko vreme, ali to ne utie na
korisniki program.
Naredbom lopta = null; resetujemo promenljivu lopta tako da vie ne
pokazuje na konkretan objekat. Ukoliko je to bila jedina promenljiva koja je
referisala na taj objekat, on postaje nedostupan i bie uniten.
Promenljiva lopta, meutim, nastavlja da postoji i moe se koristiti da
referie na neki drugi objekat iste klase.

Preoptereenje (overloading) metoda

Mogue je definisati vie metoda klase sa istim


imenom sve dok svaki metod ima jedinstven skup
parametara. To se naziva preoptereenje metoda.
Ime metoda, zajedno sa tipom i redosledom
parametara ini potpis metoda.

Za potpis metoda bitan je broj, tip i redosled


parametara, a ne njihova imena.

Potpis svakog metoda u klasi mora biti jedinstven


kako bi kompajler mogao u svakom trenutku da
odredi koji metod pozivamo.
Tip povratne vrednosti metoda nema uticaja na
potpis metoda.
Primer: valueOf() metodi klase String postoji po
jedan za svaki primitivni tip podataka i slino.

Preoptereenje konstruktora
Konstruktori se mogu preopteretiti, kao i
bilo koji drugi metodi klase.
Ovo je zgodno u situacijama kada elimo
da napravimo objekte na osnovu razliitih
skupova inicijalnih vrednosti.
Kompajler bira koji konstruktor e koristiti
na osnovu prosleenih argumenata.

Poziv konstruktora iz drugog konstruktora

Jedan konstruktor klase moe pozivati drugi


konstruktor iste klase.
Poziv se vri uvek u prvoj izvrnoj naredbi.
Omoguuje se uteda na ponovnom pisanju
koda.
Za referisanje drugog konstruktora iste klase
koristi se this kao ime metoda praen
odgovarajuim argumentima izmeu zagrada.
this(...)

Copy konstruktor (1)


esto se javlja potreba za pravljenjem
identine kopije objekta.
Pravimo objekat klase Sfera:
Sfera lopta1 = new Sfera(10.0, 10.0, 0.0);
Ako kasnije u programu elimo da napravimo
objekat lopta2 identian objektu lopta1 i
napiemo
Sfera lopta2 = lopta1;
to nee biti ono to elimo, ve e samo obe
promenljive lopta2 i lopta1 referisati na isti
objekat.

Copy konstruktor (2)


Za pravljenje identine kopije objekta, treba
definisati novi konstruktor koji kao argument
prima postojei objekat klase (npr. klase Sfera) i
kopira vrednosti njegovih instancnih promenljivih
u odgovarajue instancne promenljive novog
objekta.
Primer:
Sfera(final Sfera original) {
radius = original.radius;

xCenter = original.xCenter;
yCenter = original.yCenter;
zCenter = original.zCenter;
++broj;
}

Pristup lanovima klase (dostupnost)

Svaka klasa ima direktan pristup svim ostalim


klasama istog paketa, ali promenljive i metodi
koji su lanovi tih klasa ne moraju nuno biti
dostupni.
Dostupnost se kontrolie atributima pristupa
(access attributes).
Klasama koje ne deklariemo kao public moe
se pristupiti samo iz istog paketa.

Pristupni atributi za lanove klasa

Postoje 4 mogunosti za atribute pristupa


lanicama klase:

bez pristupnog atributa doputen pristup iz


metoda proizvoljne klase iz istog paketa
public doputen pristup iz metoda proizvoljne
klase (ne nuno iz istog paketa), sve dok je klasa
iji je to lan deklarisana kao public
private dostupan samo iz metoda unutar klase.
Nikakav pristup izvan klase
protected doputen pristup iz metoda
proizvoljne klase istog paketa i iz proizvoljne
potklase (ne nuno iz istog paketa)

Primer - klase u istom paketu

Primer - razliiti paketi

Izbor pristupnih atributa (1)

Najee, promenljive u public klasi treba da budu


private, a metodi koji e se pozivati izvan klase public.
Izuzeci:

za klase paketa koje nisu public, a time nisu dostupne izvan


paketa, konvencija je dozvoliti drugim klasama paketa
direktan pristup promenljivim
ako imamo final atribute koji su verovatno korisni izvan
klase, moemo ih deklarisati kao public
metode klase koje e interno koristiti samo drugi metodi iste
klase treba definisati kao private
u klasama poput Math koja je samo kontejner za korisne
funkcije i standardne vrednosti podataka, sve treba da bude
public

Nakon uvoenja potklasa, jo neke stvari se moraju


uzeti u obzir.

Izbor pristupnih atributa (2)


Uobiajeno je da instancne promenljive budu
private tako da im se ne moe direktno
pristupati, niti se mogu direktno menjati izvan
klase. Jedini nain da im se pristupi ili da se
njihove vrednosti promene jeste pomou
metoda iste klase.
Vrednosti private instancne promenljive izvan
klase pristupa se tzv. pristupnim (accessor)
metodom klase.

Pristupni metodi get*() metodi


Primer:

public double getX(){


return x;
}

Na ovaj naun vrednost instancne promenljive


postaje dostupna svuda, ali se moe menjati
samo unutar klase.
Pristupni metodi se obino zovu get*().

set*() metodi
Metodi koji doputaju menjanje vrednosti
private instancnih promenljivih.
Njihova imena su obino oblika set*().
Nova vrednost atributa se prosleuje kao
argument metodu.
public void setX(double inputX){
x = inputX;
}

Prednost set*() metoda


Zato koristiti public metod da bismo menjali
vrednost private instancne promenljive kada
moemo jednostavno da je deklariemo kao
public?
Glavna prednost korienja set*() metoda
jeste to je mogue vriti proveru nove
vrednosti i spreiti pridruivanje
neodgovarajuih vrednosti instancnim
promenljivim.

Paketi
Paket predstavlja jedinstveno imenovanu
kolekciju klasa.
Imena klasa jednog paketa nee se meati
sa imenima klasa nekog drugog paketa jer
se imena klasa paketa kvalifikuju imenom
tog paketa. Npr. puno ime klase String iz
paketa java.lang je java.lang.String.
Ako bismo definisali svoju klasu sa istim
imenom, String, korienje imena String
odnosilo bi se na tu nau klasu, dok bismo
se standardnoj klasi String morali obraati
sa java.lang.String.

Paketi - nastavak

Svaka klasa u Javi je sadrana u nekom


paketu, a ako se ne navede eksplicitno, nae
klase se smetaju u podrazumevani (default)
paket koji nema ime.
Standardne Java klase su sadrane u paketima
tako to se u jednom paketu nalaze klase koje
su na neki nain povezane.

Paketi i struktura direktorijuma

Paketi su usko povezani sa strukturom


direktorijuma u kojoj se uvaju.
Moemo generisati .class fajl za neku klasu iz
paketa u drugom direktorijumu, ali taj direktorijum
takoe mora imati isto ime kao i paket.
Ime paketa moe biti sloeno, npr.
geometrija.geometrija3D, to znai da je
geometrija3D poddirektorijum direktorijuma
geometrija.
Ime moe biti proizvoljne sloenosti, ali treba da
odraava strukturu direktorijuma gde je paket
smeten.

Paketi i struktura direktorijuma - nastavak


Na primer, ako pravimo vie kolekcija klasa
koje se tiu jedne iste oblasti (geometrija),
moemo da kreiramo vie paketa:
geometrija2D, geometrija3D, ...
Podrazumeva se da se klase iz prvog
paketa nalaze u direktorijumu
geometrija2D, iz drugog u direktorijumu
geometrija3D i da su geometrija2D i
geometrija3D poddirektorijumi
direktorijuma geometija.

Kompajliranje paketa
Korienjem JDK pod Windows-om
(komandna linija):
Putanja do direktorijuma paketa mora biti
eksplicitno naznaena kompajleru pomou
vrednosti koja se postavlja za evironment
promenljivu CLASSPATH ak i kada tekui
direktorijum sadri paket.
Najjednostavniji nain za postavljanje
CLASSPATH-a je navoenjem opcije
-classpath pri pozivu kompajlera. Ovaj
nain se i preporuuje!

Kompajliranje paketa - nastavak

Putanja do direktorijuma paketa je putanja do


direktorijuma koji sadri direktorijum paketa, dakle, ne
ukljuuje sam direktorijum. Na primer:
ako smo izvorne datoteke za klase paketa
geometrija smestili u direktorijum sa putanjom
C:\JavaProg\geometrija , putanja do direktorijuma
geometrija je C:\JavaProg, a NE
C:\JavaProg\geometrija

javac -classpath "C:\JavaProg" Duz.java


putanju je neophodno smestiti izmeu dvostrukih
navodnika ako sadri beline
javac -classpath "C:\JavaProg" *.java
kompilacija svh izvornih datoteka

Pristup paketima

Ako su nam .class fajlovi u originalnom


direktorijumu paketa postoje dve opcije:

putanja do paketa se mora pojaviti u stringu kojim


se postavlja CLASSPATH environment promenljiva
koristiti -classpath opciju u komandnoj liniji kada
se poziva kompajler ili interpreter

Pristup paketima - nastavak


Ako se odluimo za CLASSPATH
promenljivu, ona treba da sadri putanje
samo do naih, ne i do standardnih paketa.
-classpath primer:

javac -classpath ".;C:\MySource;C:\MyPackages"


MyProgram.java

"." oznaava tekui direktorijum ( potrebno


je navesti je i kod kompajliranja inae
nee biti pronaen izvorni fajl i kod
izvravanja inae emo dobiti poruku da
main() metod nije naen).

Dodavanje klasa iz paketa u program


Ako su definisane sa kljunom reju public,
moemo dodati proizvoljnu ili sve klase iz
imenovanog paketa kodu naeg programa
korienjem import deklaracija.
U programu zatim moemo referisati klase
koje smo uinili dostupnim import
deklaracijama samo navoenjem njihovih
imena.
import deklaracije se navode na poetku
fajla, a posle package deklaracije.

Primer

import geometrija.geometrija3D.*;
ukljuuje sve klase paketa
geometrija.geometrija3D
Sada moemo referisati proizvoljnu public
klasu iz paketa navoenjem samo njenog
imena
Obino je bolje "importovati" samo klase
paketa koje e se koristiti, npr. za klasu
Sfera
import geometrija.geometrija3D.Sfera;

Paketi i imena u naim programima


Unutar jednog paketa moemo davati
imena klasama bez brige da li ta imena ve
postoje negde izvan paketa.
Java tretira ime paketa kao deo imena
klase, zapravo kao njegov prefiks.
Npr. klasa Sfera iz paketa
geometija.geometija3D ima puno ime
geometija.geometija3D.Sfera. Ukoliko ne
koristimo import deklaraciju, ovu klasu
moemo koristiti navoenjem njenog
punog imena.

Importovanje statikih lanova klase

Mogu se importovati imena statikih lanova


klase iz imenovanog paketa u na program.
Statiki lanovi se zatim mogu koristiti prosto
navoenjem njihovih nekvalifikovanih imena.
npr.

import static java.lang.Math.PI;


...

return 4.0/3.0*PI*radius*radius*radius;

importovanje svih statikih lanova klase Math:


import static java.lang.Math.*;

Napomena!

import statikih lanova klase nije mogu za klase koje se


nalaze u default bezimenom paketu. Paket mora imati ime!

Standardne klase koje enkapsuliraju primitivne tipove


podataka (klase omotai)

Boolean, Byte, Character, Short, Integer, Long,


Float, Double nalaze se u paketu java.lang.
Svaka od ovih klasa ima statiki metod toString()
za dobijanje String-reprezentacije vrednosti
primitivnog tipa.
Takoe, postoji i ne-statiki toString() metod i taj
oblik se obino koristi.
Postoje i metodi za konvertovanje iz String objekta
u primitivni tip.
Npr. statiki metod parseInt() klase Integer
prihvata String reprezentaciju celog broja kao
argument i vraa ekvivalentnu vrednost tipa int.
Odgovarajui metodi postoje i u ostalim klasama.

Standardne klase koje enkapsuliraju


primitivne tipove podataka - nastavak

Svaka klasa takoe definie i metod value() koji


vraa vrednost enkapsuliranu objektom kao
vrednost odgovarajueg primitivnog tipa.
Double number;
number.value() -> double
Svaka numerika klasa ima static final konstante
MAX_VALUE i MIN_VALUE koje definiu najveu i
najmanju vrednost koje mogu biti predstavljene
tim tipom.
Floating-point klase imaju i definisane konstante:
POSITIVE_INFINITY, NEGATIVE_INFINITY i NaN
koje se mogu koristiti za poredjenja prilikom
izraunavanja.
Postoje i statike metode isInfinite() i isNan() za
testiranje floating-point vrednosti.

AUTOBOXING vrednosti primitivnih tipova

Ako se metodu, koji kao argument zahteva


referencu na objekat, prosledi vrednost
primitivnog tipa, ukoliko okolnosti dozvoljavaju,
kompajler e izvriti automatsku konverziju
vrednosti primitivnog tipa u odgovarajui klasni
tip.
Konverzije primitivnog tipa u odgovarajui klasni
tip zovu se boxing konverzije, a automatske
konvetrzije ove vrste zovu se autoboxing.
Kompajler takodje radi i inverzne konverzije
referencu na objekat klase koja enkapsulira
primitivni tip konvertuje u vrednost koju on
enkapsulira (unboxing).

Zadaci za vebu

1. Napisati klasu Krug koja od instancnih promenljivih sadri: x i y


koordinatu centra i poluprenik kruga i ima klasnu promenljivu brojac koja
sadri broj kreiranih objekata klase Krug. Od metoda obezbediti:
konstruktor sa odgovarajua tri parametra (x,y koordinata i poluprenik),
konstruktor bez parametara (postavlja krug na jedinini u koordinatnom
poetku),
nestatike metode za raunanje obima i povrine kruga,
get() i set() metode
metod tackaUkrugu() koji kao argument prima x i y koordinatu take i
ispituje da li se taka nalazi u datom krugu
statiki metod brojKrugova() koji vraa vrednost klasne promenljive
brojac.
Napisati klasu TestKrug koja sadri metod main() gde treba sa ulaza uneti
podatke za dva kruga i ispisati vrednosti njihovih obima i povrsina kao i
koliko je objekata klase Krug kreirano. Uneti i koordinate take i ispitati da li
taka sa ovim koordininata pripada krugu - ispisati odgovarajucu poruku.

Zadaci za vebu - nastavak

2. Napisati klasu Tacka kojom se definise taka u dvodimenzionoj ravni.


Napisati klasu Pravougaonik koja od instancnih promenljivih sadri: dve
take koje predstavljaju koordinate gornjeg levog i donjeg desnog temena
pravougaonika. Obezbediti:

konstruktor sa odgovarajua etiri parametra (x i y koordinata gornjeg levog


temena i x i y koordinata donjeg desnog temena),
konstruktor sa dva parametra (dva objekta klase Tacka na osnovu kojih se
kreiraju temena pravougaonika),
konstruktor sa jednim objektom klase Pravougaonik (kojim se pravi kopija
postojeeg pravougaonika).
metod koji za pravougaonik nad kojim se poziva i za pravougaonik koji
predstavlja argument metoda vraa pravougaonik koji ih obuhvata.
metod koji ispisuje take koje definiu pravougaonik.

Napisati posebnu klasu TestPravougaonik za testiranje - u metodu main()


kreirati 4 pravougaonika, postepeno ih kombinovati kako bi se na kraju
dobio pravougaonik koji ih sve obuhvata. Ispisati i take koje definisu sva
4 pravougaonika.

You might also like