Вы находитесь на странице: 1из 42

Objektno orijentisano programiranje

vežbe, školska 2010/11

Univerzitet u Beogradu, Matematički fakultet


Biljana Stojanović
Eclipse tutorial
Uvod u programski jezik Java

čas 01
Eclipse
 Razvojni alat za pokretanje Java programa.
 Svi razvojni alati podržavaju tzv. IDE (Integrated
Development Environment) za brz razvoj Java programa.
 Editovanje, kompajliranje, debagovanje, online-pomoć su
integrisani u grafičko korisničko okruženje.

3 Objektno orijentisano programiranje 18.02.2011.


Eclipse tutorial
 Eclipse može da se pokreće na bilo kojoj platformi koja
ima podršku za JVM.
 Neophodno je najpre instalirati odgoravajuću verziju
JDK-a (Java Development Kit).
 Eclipse se ne instalira, već se samo raspakuje odgovarajući
.zip fajl. Pokreće se dvoklikom na ikonu eclipse.exe u
odgovarajućem folderu ili dvoklikom na odgovarajuću
prečicu na radnoj površini.
 Najpre se pojavljuje prozor Workspace Launcher koji nudi
izbor direktorijuma u kome će se raditi.
 Potom se otvara glavni prozor (Eclipse UI) sa inicijalno
otvorenim pozdravnim prozorom.

4 Objektno orijentisano programiranje 18.02.2011.


Eclipse tutorial
- izbor perspektive
 Perspektiva predstavlja inicijalni skup i raspored komponenti u
prozoru.
 Java perspektiva se koristi za editovanje Java izvornog koda
 Debug perspektiva omogućava pregled debagovanja programa.
Moguće je prelaziti iz jedne u drugu perspektivu.
 Za kreiranje Java programa opcijom
Window → Open Perspective → Java iz glavnog menija otvara se
Java perspektiva.

5 Objektno orijentisano programiranje 18.02.2011.


Eclipse tutorial
- kreiranje projekta
 Projekat se kreira izborom opcije File → New → Project...
čime se prikazuje New Project prozor.
 Selektovati Java project i kliknuti Next čime se otvara New
Java Project prozor.
 U polje Project name uneti ime projekta.
 Izabrati opciju Create new project in workspace.
 Izabrati opciju Use project folder as root for sources and class
files
 Čekirati opciju Add project to working sets.
 Klik na dugme Finish – kreiranje projekta.

6 Objektno orijentisano programiranje 18.02.2011.


Eclipse tutorial
- kreiranje paketa i klase
 Kreiranje paketa u postojećem projektu: File → New →
Package.
 Kreiranje klase u postojećem paketu: File → New →
Class, čime se otvara New Java Class prozor.
 U polje Name unosi se ime klase (počinje velikim
slovom) bez ekstenzije .java.
 U delu Modifiers moguće je čekirati neku od opcija –
svaka predstavlja neku vrstu modifikatora klase.
 U polju Superclass navodi se ime klase koja se
nasleđuje.

7 Objektno orijentisano programiranje 18.02.2011.


Eclipse tutorial
- kreiranje paketa i klase (2)
 U polju Interfaces navode se imena interfejsa koje klasa
implementira.
 Poslednji deo se odnosi na izbor metoda koji su sastavni
deo klase:
- public static void main(String[] args)
- konstruktori natklase
- nasleđeni apstraktni metodi

8 Objektno orijentisano programiranje 18.02.2011.


Eclipse tutorial
- kompilacija i pokretanje programa
 Izvorni Java kod se dinamički kompajlira za vreme editovanja.
 Na primer, ako se ne otkuca ‘; ‘ za kraj naredbe, editor
prikazuje crvenu krivudavu liniju koja ukazuje na grešku.
 Izvršavanje programa: Run → Run As → Java Application iz
glavnog menija ili kliknuti na odgovarajuću ikonu u toolbar-u
koja se koristi za pokretanje.
 Izlaz je prikazan u panelu Console u dnu prozora.

9 Objektno orijentisano programiranje 18.02.2011.


Eclipse tutorial
- debagovanje
 Eclipse debugger omogućuje postavljanje breakpoint-a i
izvršavanje programa liniju po liniju.
 Obično se breakpoint-i postavljaju u onim delovima za koje
postoji mogućnost da sadrže grešku. Nema svrhe da se
traga za greškom liniju po liniju kroz delove programa za
koje se pouzdano zna da dobro rade.
 Breakpoint je zaustavna zastavica (znak) postavljena na
liniju izvornog koda koja govori debageru da se zaustavi
kada na nju naiđe.
 Debager izvršava svaku liniju dok ne dođe do breakpoint-
a, tako da je moguće tragati kroz deo programa gde je
breakpoint postavljen.
10 Objektno orijentisano programiranje 18.02.2011.
 Različiti načini postavljanja breakpoint-a :
- dvostrukim klikom na levu marginu linije na koju se
postavlja breakpoint. Pojaviće se plavi kružić u levoj margini.
- desnim klikom u područje leve margine pojavljuje se
meni iz koga se bira opcija Toggle Breakpoint.
- u meniju Run izabrati opciju Toggle Breakpoint.
 Uklanjanje breakpoint-a - dvoklikom na levu marginu, ili
izborom opcije Disable Breakpoint iz odgovarajućeg menija.
 Kada se napusti projekat zadržavaju se postavljeni
breakpoint-i.

11 Objektno orijentisano programiranje 18.02.2011.


 Primer startovanja debagera:
 Postaviti breakpoint na prvu naredbu metoda main().
 Izabrati opciju Debug As → Java Application. Pojaviće se Confirm
Perspective Switch dijalog za potvrdu prelaska u Debug
perspektivu.
 Kontrola izvršavanja programa:
Program se zaustavlja na prvoj liniji main() metoda. Ova
linija, koja se zove tekuća tačka izvršavanja (current
execution point), obojena je zeleno i označava sledeću liniju
koda koja će biti izvršena od strane debagera.

12 Objektno orijentisano programiranje 18.02.2011.


 Kada je aktivan Debugging mode, u Debug prozoru vidljive su ikonice
sa komandama za debagovanje.
 Iste komande nalaze se i u meniju Run:
Resume – nastavlja izvršavanje pauziranog programa
Suspend – privremeno zaustavlja izvršavanje programa
Terminate – završava tekuću sesiju debagovanja
Step Into – izvršava jednu naredbu ili ulazi u metod
Step Over – izvršava jednu naredbu. Ako naredba sadrži poziv
metoda, ceo metod se izvršava bez detaljnog prelaska kroz korake
izvršavanja.
Step Return – izvršava sve naredbe tekućeg metoda i vraća se u onaj
deo gde je pozvan metod.
Run to Line – izvršava program, počevši od tekuće tačke izvršavanja,
zaustavlja se i postavlja izvršnu tačku na liniju koda koja sadrži
kursor ili na breakpoint.

13 Objektno orijentisano programiranje 18.02.2011.


 Vrednosti promenljivih se ispisuju u posebnom panelu
Variables. Dvostrukim klikom na odgovarajuću promenljivu
otvara se Set Value dijaloški prozor gde je moguće zadati
novu vrednost promenljive.
 Nakon završetka debagovanja, može se preći u Java
perspektivu.

14 Objektno orijentisano programiranje 18.02.2011.


Struktura Java programa
 Java program se uvek sastoji iz jedne ili više klasa.
 Svaka klasa se smešta u poseban fajl koji ima isto ime kao i
klasa.
 Klase se grupišu u skupove – pakete. Svaki paket čuva se u
zasebnom direktorijumu.
 Najbitniji standardni paketi:
 java.lang – klase iz ovog paketa su uvek dostupne, tj. automatski
se uključuju u program.
 java.io – klase za ulazno/izlazne operacije
 java.util – veliki broj korisnih klasa za razne namene
 java.awt – grafičke komponente
 javax.swing – fleksibilnije grafičke komponente

15 Objektno orijentisano programiranje 18.02.2011.


Upotreba Java paketa
 Upotreba klasa iz nekog paketa omogućena je import
deklaracijom koja se navodi na početku programa.
 import java.awt.*;
 import java.util.Vector;

16 Objektno orijentisano programiranje 18.02.2011.


Metod main()
 Svaka Java aplikacija sadrži klasu koja definiše metod
main(). Aplikacija se pokreće izvršavanjem ove klase.
 Metod main ima predefinisanu formu:
 public static void main(String[] args) { … }

17 Objektno orijentisano programiranje 18.02.2011.


ZdravoSvete.java
public class ZdravoSvete
{
public static void main(String[] args)
{
System.out.println(“Zdravo, svete\n”);
}
}

18 Objektno orijentisano programiranje 18.02.2011.


ZdravoSvete.java (2)
 public – globalno dostupna klasa i metod
 static – metod je dostupan i kada ne postoje objekti klase
 void – metod nema povratnu vrednost
 String[] args – niz argumenata komandne linije. Argumenti su
objekti klase String. Klasa String je definisana u paketu java.lang.
 System – standardna klasa koja omogućava rad sa standardnim
ulazom/izlazom. Nalazi se u paketu java.lang.
 out – objekat klase PrintSteam, koji je član klase System i
predstavlja standardni izlazni tok.
 println() – metod klase PrintStream koji ispisuje string zadat
između dvostrukih navodnika.

19 Objektno orijentisano programiranje 18.02.2011.


Karakterski skup u Javi
 Java je bazirana na UNICODE standardu koji svaki
karakter predstavlja pomoću 2 bajta, tj. 16 bitova.
 Java je CASE-SENSITIVE, tj. pravi se razlika između malih i
velikih slova.

20 Objektno orijentisano programiranje 18.02.2011.


Tipovi podataka u Javi
 Primitivni tip
 Referentni (objektni) tip

21 Objektno orijentisano programiranje 18.02.2011.


Primitivni tipovi podataka
 Aritmetički i logički
 Aritmetički: celi i realni (floating point)
 Celi: byte(8), short(16), int(32), long(64) i char(16). Svi sem char
su signed. U Javi ne postoji unsigned.
 Realni: float(32), double(64) (standard IEEE754).
 Logički tip: boolean(1). Ima dve vrednosti – true i false.

22 Objektno orijentisano programiranje 18.02.2011.


Referentni tip podataka
 Tip objekta je određen klasom.
 Promenljiva referentnog tipa je promenljiva koja sadrži
adresu nekog objekta u memoriji.
 Promenljiva klasnog tipa je uvek referenca na objekat, tj.
sadrži adresu objekta.
 Zaključak: svim objektima se pristupa preko reference.

23 Objektno orijentisano programiranje 18.02.2011.


Elementarne konstrukcije jezika Java
 Elementi jezika koje kompajler izdvaja tokom prevođenja
programa kao nedeljive celine (tokene).
 Identifikatori
 Literali
 Separatori
 Operatori
 Ključne reči
 Komentari
 Beline

24 Objektno orijentisano programiranje 18.02.2011.


Identifikatori
 Identifikator je niz UNICODE karaktera proizvoljne
dužine koji mora počinjati slovom, _ ili $. Ostali karakteri
mogu biti slova, cifre, _ ili $. Ne smeju se koristiti ključne
reči.

25 Objektno orijentisano programiranje 18.02.2011.


Literali
 Eksplicitne vrednosti koje se javljaju u programu su literali.
 Literal može biti konstantna vrednost primitivnog tipa ili
String objekat.

26 Objektno orijentisano programiranje 18.02.2011.


Celobrojni literali
 Celobrojni literali:
 Dekadni
 Oktalni
 Heksadekadni
 Dekadni – ne počinju cifrom 0.
 Oktalni – počinju cifrom 0.
 Heksadekadni – počinju znacima 0x ili 0X.
 Literal tipa long ima sufiks l ili L.

27 Objektno orijentisano programiranje 18.02.2011.


Realni, logički, znakovni i String literali
 Realni literali su podrazumevano tipa double. Može i da stoji
sufiks D ili d.
 Realni literal je tipa float ako sadrži sufiks F ili f.
 Logički literali: true i false.
 Znakovni literal - konstantna vrednost tipa char, tj. neoznačena
16-bitna vrednost.
 Primeri: ‘a’, ‘\n’, ‘\u’, ‘3’, ‘\\’
 String literal – sadrži znake između navodnika.

28 Objektno orijentisano programiranje 18.02.2011.


Separatori, operatori, komentari
 Separatori: () {} [] ;
 Nema operatora , kao u C-u.
 Nema operatora za pristup memoriji, što znači da u Javi
nema pokazivača.
 Komentari:
 C stil /*... */
 Jednolinijski komentari //...
 Dokumentacioni komentari
/**
* ...
* ...
*/

29 Objektno orijentisano programiranje 18.02.2011.


Napomene!
 Ne postoji automatska konverzija boolean tipa u
celobrojni tip i obrnuto!
 if(a) – neispravno
 If(a != 0) – ispravno (a je promenljiva celobrojnog tipa)
 Naredbe za kontrolu toka su kao u C-u (if, else, switch,
for, while, do, break, continue). Nema naredbe goto.
 U Javi nema operatora sizeof, kao ni ključnih reči typedef,
struct, union, extern, register.
 Funkcije sa promenljivim brojem argumenata uvedene su
verzijom J2SE 5.0.

30 Objektno orijentisano programiranje 18.02.2011.


Nizovi
 Deklaracija niza:
tip_elemenata[] a;  tip_elemenata a[];
 Promenljiva a je samo lokacija u memoriji koja može da bude
referenca na niz brojeva odgovarajućeg tipa. Promenjiva a
sadrži adresu početka niza u memoriji.
 Deklaracijom se ne alocira memorija za sam niz.
 Veličina niza se ne navodi u deklaraciji.
 Deklaracijom se jedino specificira da je namena promenljive a
da referiše na niz brojeva odgovarajućeg tipa.

31 Objektno orijentisano programiranje 18.02.2011.


 Nakon deklaracije nizovske promenljive, može se definisati niz
na koji će ona referisati.
a = new int[10]; /* operatorom new kreira se niz koji može
da čuva 10 vrednosti tipa int, a lokacija početnog
elementa niza u memoriji smešta se u promenljivu a. */
 Moguće je u jednoj naredbi deklarisati nizovsku promenljivu i
definisati niz na koji će ona referisati:
int[] a = new int [10]; /* operatorom new alocira se
memorija za niz i to 4*10=40 bajtova, plus odgovarajući
broj bajtova (zavisi od računara) za promenljivu a koja
čuva adresu početka niza. */

32 Objektno orijentisano programiranje 18.02.2011.


33 Objektno orijentisano programiranje 18.02.2011.
 Kreiranjem niza upotrebom operatora new,
elementi niza se automatski inicijalizuju na
podrazumevanu vrednost, koja zavisi od tipa
elemenata:
 numeričke vrednosti – 0
 boolean – false
 char – ‘\u0000’
 klasni tip – null
 Dužina niza se dobija upotrebom length u obliku
ime_niza.length.

34 Objektno orijentisano programiranje 18.02.2011.


 Moguće je jednu nizovsku promenljivu koristiti za
referisanje različitih nizova u različitim delovima
programa. Npr:
int a[] = new int[10]; /* a referiše na niz od 10 celih
brojeva */
a = new int[50]; /* sada a referiše na novi niz od 50
celih brojeva */
 Svi nizovi na koje promenljiva može da referiše u
programu moraju da sadrže elemente onog tipa koji
je specificiran prilikom njene deklaracije. U gornjem
primeru a može da referiše samo na celobrojne
nizove.

35 Objektno orijentisano programiranje 18.02.2011.


36 Objektno orijentisano programiranje 18.02.2011.
 Moguće je inicijalizovati elemente niza prilikom
deklaracije niza.
 Veličina niza se automatski određuje kao broj vrednosti za
inicijalizaciju.
int[] niz = {2,3,4}; // niz.length se postavlja na 3
 Da bi se svi elementi niza inicijalizovali istom vrednošću,
moguće je koristiti statički metod fill iz klase
java.util.Arrays:
import static java.util.Arrays.fill;
fill(niz, 2); // svi elementi inicijalizuju se na 2

37 Objektno orijentisano programiranje 18.02.2011.


 Inicijalizacija elemenata niza može se izvršiti i upotrebom for ciklusa:
double[] niz = new double[50];
for( int i = 0; i < niz.length; i++)
niz[i] = 100.0; // svi elementi se inicijalizuju na 100.0
 Može se koristiti i oblik for ciklusa za kolekcije umesto klasične
numeričke forme kada je potrebno pristupiti svim elementima niza.
double prosek = 0.0;
for(double element : niz)
prosek += element;
prosek /= niz.length;
 Ovakav oblik for ciklusa omogućuje samo iteraciju kroz sve
elemente niza, ne može se upotrebiti za pristup elementima niza
kako bi se promenila njihova vrednost. U tom slučaju treba koristiti
numeričku formu for ciklusa.

38 Objektno orijentisano programiranje 18.02.2011.


 Možemo praviti i nizove ostalih primitivnih tipova, npr.
nizove karaktera.
char[] message = new char[50]; /* svaki element
zauzima 2 bajta, jer se koristi UNICODE */
java.util.Arrays.fill(message, ‘ ‘); /* svi elementi niza
message su blanko karakteri. */
char[] v = { ‘a’, ‘e’, ‘i’, ‘o’, ‘u’}; /* niz v se inicijalizuje
datom listom karaktera. */

39 Objektno orijentisano programiranje 18.02.2011.


Višedimenzioni nizovi
 Nizovi nizova:
int[][] a = new niz[3][5]; /* a je referenca na niz od 3 elementa, a
svaki od njih je niz od 5 elemenata */
 Mogu se kreirati i nizovi nizova različitih dužina:
float[][] samples;
samples = new float[6][]; /* promenljiva samples sada referiše na niz
od 6 elemenata a svaki od njih može da čuva referencu na
jednodimenzioni niz */
samples[1] = new float[4]; // samples[1] je niz dužine 4
samples[3] = new float[10]; // samples[3] je niz dužine 10

for(int i = 0; i < samples.length; i++)


samples[i] = new float[i + 1]; /* i-ti element niza je
niz od i+1 elemenata */

40 Objektno orijentisano programiranje 18.02.2011.


Višedimenzioni nizovi (2)

41 Objektno orijentisano programiranje 18.02.2011.


java.util.Scanner
 Klasa kojom se implementira jednostavni parser koji
parsira primitivne tipove i stringove koristeći regularne
izraze.
 Ulaz može biti fajl ili tok, uključujući i standardni ulazni
tok System.in.
 Ulaz se deli na tokene koristeći kao delimiter razmak (‘ ‘).
 Dobijeni tokeni se mogu konvertovati u vrednosti
različitih tipova koristeći razne next... metode.
Scanner skener = new Scanner(System.in);
int a = skener.nextInt();
int b = skener.nextDouble();

42 Objektno orijentisano programiranje 18.02.2011.