You are on page 1of 20

Objektno orijentisano

programiranje 2

Pregled jezika Java


Primitivni tipovi podataka
Primitivni (ugraeni, ne-klasni) tipovi:
boolean - vrednosti true ili false
char - znak iz Unicode skupa (kodiranje UTF-16)
byte - 8-bitni oznaeni ceo broj (signed integer)
short - 16-bitni oznaeni ceo broj (signed integer)
int - 32-bitni oznaeni ceo broj (signed integer)
long - 64-bitni oznaeni ceo broj (signed integer)
flaot - 32-bitni floating point (IEEE 754-1985)
double - 64-bitni floating point (IEEE 754-1985)
Stroga provera tipova, ali postoje implicitne konverzije
Za svaki primitivan tip postoji i klasa-omota (npr. Integer za int)
Automatsko pakovanje/raspakivanje

2 Pregled jezika Java 24.02.2015.


Konstante
Konstante su vrednosti koje se ne menjaju za vreme izvrenja programa
Primeri:
true, 1_000_000, 3.14, 'a', '\n', "Zdravo"
Imenovane konstante se kreiraju deklarisanjem polja kao static i final
Primer:
static final double pi=3.14;
Logiki povezane konstante mogu biti grupisane unutar klase
Primer:
class BojeKarata{
final static int PIK = 2;
final static int KARO = 3;
final static int HERC = 4;
final static int TREF = 5;
};
Pristup:
BojeKarata.HERC, BojeKarata.TREF, itd.

3 Pregled jezika Java 24.02.2015.


Unicode skup znakova

Tradicionalni jezici koriste ASCII skup znakova


Program na Javi koristi Unicode (UTF-16) skup
Unicode je internacionalni standard
kodovi koriste barem 16 bita da predstave znake
Prethodni primer sa konstantom pi:
static final double = 3.14;
Kod na Javi pisan pomou ASCII (7-bit) skupa
se translira u Unicode pre prevoenja

4 Pregled jezika Java 24.02.2015.


Operatori
Po opadajuim prioritetima:
postfiksni: [] . (params) expr++ expr--
unarni prefiksni: ++expr --expr +expr -expr ~ !
kreiranje i kast: new (type)expr
multiplikativni: * / %
aditivni: + -
pomeraki: << >> >>>
relacioni: < > >= <= instanceof
jednakost: == !=
logiko ili bitsko AND: &
logiko ili bitsko XOR: ^
logiko ili bitsko OR: |
logiko uslovno AND: &&
logiko uslovno OR: ||
uslovni: ?:
dodela: = += -= *= /= %= >>= <<= >>>= &= ^= |=
Svi binarni osim dodela su levo-asocijativni

5 Pregled jezika Java 24.02.2015.


Komentari

Prevodilac ih ignorie
Tri stila:
// komentar u liniji protee se do kraja linije
/* komentar koji moe
obuhvatati vie linija */
/** dokumentacioni komentar
namenjen opisu deklaracije koja sledi */

javadoc alat na osnovu dokumentacionih komentara


generie HTML dokumentaciju

6 Pregled jezika Java 24.02.2015.


Tok kontrole
Instrukcije se zavravaju ;
Jednostavne instrukcije izrazi
Sekvence instrukcija blokovi u zagradama {}
Kontrolne strukture kao na jezicima C i C++
selekcije: if-else i switch
iteracije: while, do-while i for
foreach petlja (Java 5.0) za iteriranje kroz zbirke (kolekcije) i nizove
bez korienja iteratora i indeksa
Instrukcije skoka
break i continue koje mogu imati i labelu naredbe iz koje se iskae
goto instrukcija ne postoji
Labele slue samo za iskakanje iz petlji pomou break i continue

7 Pregled jezika Java 24.02.2015.


Primer foreach petlje
Konvencionalna for petlja:
public int sumaNiza(int niz[]){
int suma=0;
for (int i=0; i<niz.length; i++) suma+=niz[i];
return suma;
}
Nova foreach petlja:
public int sumaNiza(int niz[]){
int suma=0;
for (int e: niz) suma+=e;
return suma;
}

8 Pregled jezika Java 24.02.2015.


Klase i objekti

Klase definiu tipove (apstrakcije)


Objekti su primerci klasa (pojave)
Primer klase taka u 2D:
class Tacka{ public double x,y; }
ova klasa ima dva javna polja i ne sadri metode
Prava pristupa se deklariu za svaki lan klase
koriste se modifikatori public, protected i private
deklaracija public znai da svaki kod
sa pristupom objektu moe pristupiti lanu
ostala prava pristupa umanjuju pristupanost lana

9 Pregled jezika Java 24.02.2015.


Stvaranje i unitavanje objekata

Objekti se stvaraju korienjem kljune rei new


Primer: Tacka centar = new Tacka();
Objekti su smeteni u memoriji za dinamiku alokaciju (heap)
Objektima se pristupa preko referenci (slinih pokazivaima na C++)
Promenljiva tipa neke klase sadri referencu na objekat ili null
Referenca moe da pokazuje na razne objekte u toku ivotnog veka
Objekti se ne unitavaju eksplicitno, uklanja ih sakuplja ubreta
Ako na objekat ne ukazuje ni jedna referenca moe se ukloniti
Sakuplja ubreta je posebna programska nit (radi u pozadini)

10 Pregled jezika Java 24.02.2015.


Metodi
Metodi pristupaju implementacionim detaljima klase (objekta)
koji su sakriveni od drugih objekata
Potpis:
ime metoda, broj i tipovi parametara (argumenata) metoda
Primer (u klasi Tacka):
public void inicijalizuj(){x=0;y=0;}
metod inicijalizuj() nema parametre i nema rezultat
Unutar metoda, lanovi klase se mogu imenovati direktno
(bez reference na objekat), kao i u C++
Objekat iji se metod poziva se naziva primalac poruke (receiver)
Statiki metodi kao u jeziku C++
Parametri se prenose po vrednosti
ako je parametar referenca sam objekat se prenosi po referenci

11 Pregled jezika Java 24.02.2015.


Objekti String

Java obezbeuje klasu String


podrka za podatke tipa niski (sekvenci znakova)
Operator + se koristi za nadovezivanje (konkatenaciju) niski
Objekti tipa niske se jednostavno stvaraju i inicijalizuju:
String ime="Petar"
Objekti tipa niske se mogu samo itati
na primer: ime += " Petrovi"
formira novi string objekat "Petar Petrovi"
Postoji tip StringBuffer za promenljive stringove
U svakoj klasi se moe napisati metod toString()
konvertuje dati objekat u string na eljeni nain

12 Pregled jezika Java 24.02.2015.


Nizovi
Niz je objekat koji predstavlja zbirku objekata nekog tipa
Nizovski objekti imaju polje length koje moe samo da se ita
polje daje informaciju o broju elemenata niza
Indeksi su celi brojevi u opsegu izmeu 0 i length-1
Kontrola proboja opsega indeksa:
izuzetak IndexOutOfBoundsException ukazuje da je indeks van opsega
Primer:
class pil{
final static int VELIINA_PILA = 32;
Karta[] karte=new Karta[VELIINA_PILA];
...
public void print(){for(Karta k: karte) System.out.println(k);}
}
Po kreiranju niza objekata svi elementi niza (reference) su inicijalizovani na null
Mogu se odmah kreirati i objekti na koje pokazuju reference u nizu:
X[] x2= new X[]{new X(1), new X(2)};

13 Pregled jezika Java 24.02.2015.


Izvoenje klasa (proirivanje)
Jedna od glavnih dobiti OO programiranja
proirenje ponaanja postojee klase
Nova (proirena) klasa nasleuje sva polja i metode originalne klase
Izvedena klasa moe da:
proiri strukturu podataka osnovne klase dodavanjem polja
proiri interfejs osnovne klase dodavanjem novih metoda
redefinie nasleeno ponaanje redefinisanjem metoda osnovne klase
Ako metod oekuje parametar tipa osnovne klase
moe mu se proslediti objekat tipa izvedene klase
Polimorfizam
objekat na koji upuuje referenca moe ispoljavati vie(poly-) oblika(-morph)
metod se poziva na osnovu stvarnog tipa objekta, a ne tipa reference
Java podrava samo jednostruko nasleivanje implementacije
samo jedna klasa se moe proiriti

14 Pregled jezika Java 24.02.2015.


Klasa Object

Klase koje ne proiruju eksplicitno druge klase,


implicitno proiruju klasu Object
Object se nalazi u korenu hijerarhije klasa
Object je najoptija klasa za reference
koje mogu da upuuju na objekat proizvoljne klase
Primer:
Object o = new Tacka();
o = "Petar Petrovi"
legalno je referencu o postaviti da upuuje
na objekat tipa Tacka
i na objekat tipa String

15 Pregled jezika Java 24.02.2015.


Interfejsi

Ponekad je korisno deklarisati metode koje klasa mora da podri


Implementacija metoda je irelevantna, za klijenta je bitan njihov potpis
Primer: metodi koji se mogu primeniti na razne zbirke
lananu listu vrednosti
he-tabelu vrednosti
Interfejs je nalik klasi, ali sadri samo deklaracije metoda
slian je apstraktnoj klasi sa svim apstraktnim metodima bez promenljivih polja
Interfejs je stvar istog ugovora
deklarie koji metodi su podrani klasom koja e implementirati taj interfejs
Interfejs je tip
mogu se definisati reference tipa nekog interfejsa
takve reference mogu da upuuju na objekte onih klasa
koje implementiraju taj interfejs

16 Pregled jezika Java 24.02.2015.


Izuzeci
Izuzetak u Javi je iskljuivo objekat
Klase izuzetaka se izvode iz klase Throwable
klasa Throwable direktno nasleuje klasu Object
klasa Throwable sadri polje tipa niske koje se moe koristiti za opis izuzetka
Svi novi izuzeci treba da se izvode iz klase Exception
klasa Exception je izvedena iz Throwable
koren hijerarhije klasa proverenih izuzetaka
Paradigma za obradu izuzetaka: try-catch-finally sekvenca:
prvo pokuaj (try) da uradi neto
ako to neto baci (throw) izuzetak, uhvati ga (catch)
konano (finally), obavi zavrne aktivnosti, dogodio se izuzetak ili ne
Neuhvaeni izuzeci se obrauju podrazumevanom rutinom za obradu
podrazumevana rutina (default handler) prijavljuje greku
i prekida nit kontrole u kojoj se greka javila

17 Pregled jezika Java 24.02.2015.


Paketi
Konflikti imena su est problem u razvoju softvera
Klase kapsuliraju polja i metode,
pa se problem konflikta imena prenosi na imena klasa
Jedno tradicionalno reenje
dodavanje prefiksa koji reprezentuje paket klasa
Java formalno uvodi pojam paketa
donekle slian pojmu prostora imena u C++
Paket sadri skup tipova i potpaketa
Paket se imenuje navoenjem deklaracije na poetku fajla
package rs.ac.bg.etf.igre;
class Karte { ... }
Puno ime klase: rs.ac.bg.etf.igre.Karte
Mogu se uvoziti (import) pojedini ili svi tipovi iz nekog paketa:
import rs.ac.bg.etf.igre.*
Uvezena imena tipova se mogu koristiti u kratkom obliku: Karte
18 Pregled jezika Java 24.02.2015.
Niti

Podrka za konkurentno izvravanje programskih niti (threads)


mogu se kreirati aplikacije sa vie niti programske kontrole
Aktivni objekti vlastita nit kontrole definisana metodom run()
Dva pristupa za definisanje aktivnih objekata:
proiriti klasu Thread
implementirati interfejs Runnable
Sinhronizacija za konkurentni pristup podacima objekta ili klase
sinhronizovani metodi upravljaju bravom za pristup objektu
sutina meusobno iskljuivanje pristupa aktivnih objekata
opasnost uzajamno blokiranje
Mehanizam za komunikaciju izmeu niti (wait-notify)
ugraen u klasu Object

19 Pregled jezika Java 24.02.2015.


Grafiki korisniki interfejs

Paket java.awt (Abstract Windowing Toolkit)


Prozori, dijalozi, meniji
Rad sa komponentama (kontrole,widgets)
jednostavne i kontejnerske komponente
Obrada dogaaja
delegirani model: izvori i oslukivai dogaaja
adapteri oslukivaa
paradigma programiranja: programiranje voeno dogaajima
(event-driven programming)
Crtanje

20 Pregled jezika Java 24.02.2015.

You might also like