You are on page 1of 21

Uvod u programski jezik Java

Škola računara SystemPro

Nemanja Mićović
nmicovic@outlook.com
oktobar 2016

1
Sadržaj
1 O programskom jeziku Java 4
1.1 Principi na kojima je zasnovan . . . . . . . . . . . . . . . . . . . 4
1.2 Prevodenje Java koda . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Java virtuelna mašina . . . . . . . . . . . . . . . . . . . . . . . . 4

2 Tipovi podataka 4
2.1 Primitivni tipovi podataka . . . . . . . . . . . . . . . . . . . . . . 5
2.2 Klasni tipovi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

3 String 6
3.1 Osnovni primeri . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.1.1 Naredba dodele . . . . . . . . . . . . . . . . . . . . . . . . 6
3.1.2 Pristup i-tom karakteru . . . . . . . . . . . . . . . . . . . 6
3.1.3 Dužina stringa . . . . . . . . . . . . . . . . . . . . . . . . 7
3.1.4 Poredenje stringova . . . . . . . . . . . . . . . . . . . . . 7
3.1.5 Prebacivanje veličine slova . . . . . . . . . . . . . . . . . . 7
3.1.6 Iteriranje kroz String . . . . . . . . . . . . . . . . . . . . 7
3.2 Zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

4 Ulaz i izlaz 8
4.1 Opis metoda za izlaz . . . . . . . . . . . . . . . . . . . . . . . . . 8
4.2 Primer upotrebe metoda print i println . . . . . . . . . . . . . 9
4.3 Formatiranje izlaza . . . . . . . . . . . . . . . . . . . . . . . . . . 9
4.4 Čitanje sa standardnog ulaza koristeći Scanner . . . . . . . . . . 9
4.5 Kompletan primer upotrebe klase Scanner . . . . . . . . . . . . . 10
4.6 Zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

5 Kontrola toka programa 12


5.1 if-elseif-else grananje . . . . . . . . . . . . . . . . . . . . . . 12
5.2 while petlja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
5.3 for petlja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

6 Nizovi 13
6.1 Dužina niza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
6.2 Primer unosa niza . . . . . . . . . . . . . . . . . . . . . . . . . . 14
6.3 Funkcija koja ispisuje niz . . . . . . . . . . . . . . . . . . . . . . 14
6.4 Primer koji ispisuje niz obrnuto . . . . . . . . . . . . . . . . . . . 15

7 Rad sa datotekama 16
7.1 Čitanje iz datoteke . . . . . . . . . . . . . . . . . . . . . . . . . . 16
7.2 Pisanje u datoteku . . . . . . . . . . . . . . . . . . . . . . . . . . 16

8 Objektno orijentisano programiranje 16


8.1 Objektni deo Jave . . . . . . . . . . . . . . . . . . . . . . . . . . 16
8.2 Naša prva klasa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
8.2.1 Konstruktori . . . . . . . . . . . . . . . . . . . . . . . . . 19
8.2.2 Polja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
8.2.3 Metodi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
8.2.4 Metod toString() . . . . . . . . . . . . . . . . . . . . . . 20

2
8.3 Nasledivanje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
8.4 Polimorfizam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

Literatura 21

3
1 O programskom jeziku Java
Java je objektno orijentisan programski jezik koji je napravila kompanija Sun
Microsystems oko 1995. godine. Java danas predstavlja jedan od najkorišćenijih
i najpopularnijih programskih jezika. Veliku primenu jezik je pronašao i u pro-
gramiranju za Veb gde se često koristi kao implementacioni jezik na serverima.
Takode, kompanija Google je izabrala Javu kao implementacioni jezik za An-
droid aplikacije.

1.1 Principi na kojima je zasnovan


Jezik je napravljen sa sledećim principima u vidu:

• Mora biti jednostavan, objektno orijentisan i poznat


• Mora biti robustan i siguran
• Mora biti nezavistan u odnosu na arhitekturu i mora biti portabilan

• Dobijeni kod mora biti visokih performansi


• Mora biti dinamičan, interpretiran i podržavati niti

1.2 Prevodenje Java koda


Slika 1 prikazuje kako izgleda proces prevodenja izvornog Java koda u
mašinski kod koji procesor može da izvrši. Najpre treba uočiti da se Java kod
(blok 1) najpre prosleduje Java kompilatoru (program koji se zove javac) koji
generiše Java bajtkod (blokovi 1, 2 i 3).
Dobijeni bajt kod se potom šalje Java virtuelnoj mašini (JVM) koja ga
izvršava na odgovarajućem operativnom sistemu.
Uvodenje Java bajt koda kao medusloj omogućava da se isti Java program
izvrši na više različitih operativnih sistema. Jedino što je potrebno kako bi ovo
funkcionisalo je da postoji Java virtuelna mašina za ciljani operativni sistem.

1.3 Java virtuelna mašina


Java virtuelna mašina je program koji zna da izvšava Java bajt kod. Treba
ga zamišljati kao neku vrstu virtuelnog računara, no da ne bude konfuzije, Java
virtuelna mašina (eng. Java Virtual Machine - JVM) je program koji se instalira
na računaru i koji će izvršavati java kod.

2 Tipovi podataka
U javi postoje dve vrste tipova podataka, primitivni tipovi i klasni tipovi.
Razvijaocu programa se omogućava da uvede svoje tipove podataka tako što
definiše nove klase. Više o klasama i objektno-orijentisanog programiranju biće
kasnije reči.

4
Slika 1: Prevodenje Java koda

2.1 Primitivni tipovi podataka


U javi postoji više primitivnih tipova podataka. Pod primitivnim se misli
na to da nisu u pitanju klase već prosti podaci. Na primer ceo broj sa tipom
int je 32 bitni binarni broj.

Tabela 1: Primitivni tipovi u Javi


Ime podatka Opis Broj bitova Podrazumevana vrednost
boolean Logička vrednost 1 false
byte Običan bajt 8 0
char Unicode karakter 16 '\u0000'
short Celi broj 16 0
int Celi broj 32 0
long Celi broj 64 0
float Realni broj 32 00f
double Realni broj 64 00d

Osim toga, java poseduje tip String koji je nešto izmedu primitivnog i
klasnog tipa. Naime, String se ponaša kao klasni tip (možemo nad njim pozivati
metode), ali se ipak dozvoljavaju neke naredbe poput naredbe ispod što inače
nije slučaj sa klasama i objektima.
String primer = "Zdravo svete";

Više o klasi String u delu 3.

5
2.2 Klasni tipovi
Java je objektno-orijentisani programski jezik tako da podržava koncepte
OOP-a poput:
• nasledivanja;

• polimorfizma;
• enkapsulacije.
Više o klasama i njihovom definisanju u kasnijem delu o objektno-
orijentisanom programiranju.

3 String
Klasa String predstavlja tip podatka koji se koristi za reprezentaciju teksta.

3.1 Osnovni primeri


Slede neki osnovni primer oko rada sa klasom String.

3.1.1 Naredba dodele


Sledi primer koji prikazuje kako možemo da napravimo promenljivu tipa
String, dodeliti joj vrednost, napraviti novi String od postojećeg itd.

String primer; // deklarisemo promenljivu tipa String


primer = "Zdravo"; // dodeljujemo vrednost promenljivoj
primer += " "; // na postojeci string dodajemo novi string
primer += "svete!"; // isto kao: primer = primer + "svete";
System.out.println(primer); // na standardni izlaz ispisujemo vrednost

Pokretanje koda daje sledeći izlaz:


> Zdravo svete!

3.1.2 Pristup i-tom karakteru


Ukoliko želimo da pristupimo i-tom karakteru unutar String-a (što je karak-
ter), to možemo uraditi koristeći metod charAt.
String primer = "Zdravo"; // dodeljujemo vrednost promenljivoj
System.out.println(primer.charAt(0)); // karakter na poziciji 0
System.out.println(primer.charAt(5)); // karakter na poziciji 5

> Z
> o

6
3.1.3 Dužina stringa
Dužinu stringa možemo dobiti pozivajući metod length() nad stringom čiju
dužinu želimo.
String primer = "Zdravo";
int duzina = primer.length(); // metod koji vraca duzinu stringa
System.out.println(duzina); // ispisujemo duzinu stringa

> 6

3.1.4 Poredenje stringova


Stringove poredimo koristeći metod equals.
String a = "test";
String b = "test";
if (a.equals(b))
System.out.println("Jesu jednaki.");
else
System.out.println("Nisu jednaki.");

> Jesu jednaki.

3.1.5 Prebacivanje veličine slova


Ukoliko želimo da mala slova prebacimo u velika i obrnuto, možemo koristiti
metode toUpperCase() i toLowerCase().

String a = "test";
String b = "TEST";
System.out.println(a.toUpperCase());
System.out.println(b.toLowerCase());

> TEST
> test

3.1.6 Iteriranje kroz String


Nekada je potrebno da iteriramo kroz String element po element. To
možemo učiniti koristeći for petlju.
String str = "Hello";
for (int i = 0; i < str.length(); i++)
System.out.println(str.charAt(i));

> H
> e
> l
> l
> o

7
3.2 Zadaci
Zadatak 3.1 Napisati funkciju ispisiObrnuto(String str) koja na stan-
dardni izlaz ispisuje karakter po karakter stringa str u obrnutom poretku.
Zdravo test Anavolimilovana
> ovardZ > tset > anavolimilovanA
Zadatak 3.2 Napisati funkciju pretvoriMala(String txt) koja svako slovo
stringa txt pretvara u malo. Sa standardnog ulaza uneti jednu liniju teksta,
proslediti je funkciji pretvoriMala i na standardni izlaz ispisati rezultat rada
programa.
Zdravo svete MALA SLOVA SaDa jE 21:34.
> zdravo svete > mala slova > sada je 21:34.
Zadatak 3.3 Napisati funkciju prebrojCifre(String str) koja vraća broj
pojavljivanja karaktera cifara. Sa standardnog ulaza uneti jednu liniju teksta,
proslediti je funkciji prebrojCifre i na standardni izlaz ispisati rezultat rada
programa.
Neke 123 reci Hello 123test123
> 3 > 0 > 6
Zadatak 3.4 Napisati funkciju prebrojKarakter(String str, Char ch)
koja prebrojava koliko puta se karakter ch pojavljuje u stringu str. Sa
standardnog ulaza uneti string, a potom i karakter koje treba proslediti funkciji
prebrojKarakter i na standardni izlaz ispisati rezultat rada programa.
Teeeeest aab11 Zdravo123Svete
e 1 $
> 5 > 2 > 0
Zadatak 3.5 Sa standardnog ulaza se unose stringovi u beskonačnoj petlji.
Ukoliko je unet string koji je različit od "quit", na standardni izlaz treba is-
pisati uneti string transformisan u mala slova. Ukoliko je unet string "quit"
treba izaći iz programa.
HELLO quit test
> hello > > test
TeSt AAA
> test > aaa
quit quit
> >

4 Ulaz i izlaz
Za rad sa ulazom i izlazom (o fajlovima će biti reči u delu 7) ćemo koristiti
System.out.print i System.out.println metode.

4.1 Opis metoda za izlaz


Metodi System.out.print i System.out.println ispisuju svoje argumente
na standardni izlaz. Metod print ispisuje bez novog reda, a metod println
nakon ispisa dodaje novi red.

8
4.2 Primer upotrebe metoda print i println
int a = 10;
float b = 3.3f;
char c = 'x';
String d = "str";
bool e = true;
System.out.print(a);
System.out.print(" ");
System.out.print(b);
System.out.print(" ");
System.out.println(c);
System.out.println(d);
System.out.println(e);

> 10 3.3 x
> str
> true

4.3 Formatiranje izlaza


Ukoliko želimo da napravimo lepo formatiran izlaz poput "kvadrat(2) = 4"
možemo to učiniti korišćenjem operatora + koji vrši konverziju svih tipova u tip
String kada je barem jedan operand tipa String.

// (2*2) ce naterati javu da prvo izracuna izraz pa da ga onda prebaci u string


System.out.println("kvadrat(" + 2 + ") = " + (2*2));

int x = 2;
System.out.println("kvadrat(" + x + ") = " + (2*2));

int a = 2, b = 2*2;
System.out.println("kvadrat(" + a + ") = " + b);

> kvadrat(2) = 4
> kvadrat(2) = 4
> kvadrat(2) = 4

4.4 Čitanje sa standardnog ulaza koristeći Scanner


Java poseduje klasu Scanner koja se nalazi u java.util.Scanner. Ukoliko
želimo da koristimo klasu Scanner potrebno je da dodamo naredbu:
import java.util.Scanner;
Objekat klase Scanner pravimo kao i svaki drugi objekat, odnosno:
Scanner sc = new Scanner(System.in);
Pri čemu:
• Scanner predstavlja ime klase
• sc predstavlja ime promenljive koji je instanca klase Scanner

9
• new Scanner(...) predstavlja poziv konstruktoru klase Scanner
• System.in govori klasi Scanner da ulaz čita sa standardnog ulaza

Klasa Scanner poseduje neke od metoda koji su prikazani u tabelama 2 i 3.

Tabela 2: Neki od metoda klase Scanner za čitanje


potpis metoda povratna vrednost opis
next() String vraca rec
nextLine() String vraca liniju teksta
nextInt() int vraca celobrojnu vrednost
nextFloat() float vraca realnu vrednost
nextDouble() double vraca realnu vrednost
nextBoolean() bool vraca logičku vrednost

Tabela 3: Neki od metoda klase Scanner za ispitivanje čitanja


potpis metoda povratna vrednost opis
hasNext() bool vraca true ako je na ulazu odgovarajući podatak
hasNextLine() bool vraca true ako je na ulazu odgovarajući podatak
hasNextInt() bool vraca true ako je na ulazu odgovarajući podatak
hasNextFloat() bool vraca true ako je na ulazu odgovarajući podatak
hasNextDouble() bool vraca true ako je na ulazu odgovarajući podatak
hasNextBoolean() bool vraca true ako je na ulazu odgovarajući podatak

4.5 Kompletan primer upotrebe klase Scanner


Sledeći kod ilustruje kako sa standardnog ulaza možemo pročitati dva cela
broja na na standardni izlaz ispisati njihov zbir.

import java.util.Scanner;

public class StringPrimeri {


public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
int y = sc.nextInt();
System.out.println("Zbir: " + (x+y));
}
}

> 5
> 10
> Zbir: 15

Šta se dešava kada korisnik unese nešto što nije celi broj?

10
> ovoNijeBroj
> Exception in thread "main" java.util.InputMismatchException
> at java.util.Scanner.throwFor(Scanner.java:864)
> at java.util.Scanner.next(Scanner.java:1485)
> at java.util.Scanner.nextInt(Scanner.java:2117)
> ...

Java izbacuje izuzetak. Izuzecima će biti posvećena pažnja nešto kasnije.
Kako bismo izbegli ovako neželjeno ponašanje programa, možemo koristiti funk-
cije iz tabele 3 poput hasNextInt().

import java.util.Scanner;

public class StringPrimeri {


public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// dodeljujemo neke inicijalne vrednosti
int x = 0, y = 0;
// proveravamo da li postoji podatak tipa int na standardnom ulazu
if (sc.hasNextInt())
x = sc.nextInt(); // ako postoji, citamo ga
else {
// inace, prijavljujemo gresku i izlazimo iz programa
System.out.println("Unesite ceo broj.");
System.exit(0);
}
if (sc.hasNextInt())
y = sc.nextInt();
else {
System.out.println("Unesite ceo broj.");
System.exit(0);
}
System.out.println("Zbir: " + (x+y));
}
}

Šta se dešava kada korisnik unese neadekvatan ulaz?


test 5.5
> Unesite ceo broj. > Unesite ceo broj.
> Process finished with exit code 0. > Process finished with exit code 0.

4.6 Zadaci
Zadatak 4.1 Napisati program koji sa standardnog ulaza unosi dva realna broja
tipa double koji se zovu x i y. Na standardni izlaz ispisati vrednost xy . Do-
zvoljeno je koristiti funkciju pow(double x, double y) koja se nalazi u klasi
Math.
2 100 1 -2
3 0 1000.11 2
> 8 > 1 > 1 > 4

11
Zadatak 4.2 Napisati program koji sa standardnog ulaza unosi√ realan broj tipa
double koji se zove x. Na standardni izlaz ispisati vrednost x. Dozvoljeno je
koristiti funkciju sqrt(double x) koja se nalazi u klasi Math.

2 1000 -1 0
> 1.41 > 31.62 > NaN > 0.0

Zadatak 4.3 Napisati funkciju rastojanje(double x1, double y1,


double x2, double y2) koja izračunava euklidsko rastojanja izmedu tačaka
A(x1 , y1 ) i B(x2 , y2 ) po formuli:
p
d = (x2 − x1 )2 + (y2 − y1 )2

Napisati program koji sa standardnog ulaza unosi realne brojeve x1, y1 i x2,
y2 i na standardni izlaz ispisuje rezultat poziva funkcije rastojanje(double
x1, double y1, double x2, double y2). Dozvoljeno je koristiti funkcije
sqrt(double x) i pow(double x, double y) koje se nalazi u klasi Math.

0 1 0 -1
0 1 0 -1
10 5 5 1.3
0 5 5 15.5
> 10 > 5.66 > 7.07 > 16.67

5 Kontrola toka programa


Kako bismo kontrolisali tok programa, koristimo naredbe if, for i while
koje će biti opisane u kasnijem delu.

5.1 if-elseif-else grananje


Kako bismo odredeni kod izvšili samo u nekim slučajevima, koristimo na-
redbe grananja u sledećem obliku:
if (uslov1) {
naredba1;
} else if (uslov2) {
naredba2;
} else {
naredba3;
}
naredba4;

Ako je uspunjen uslov1, onda se izvršava naredba1, ako nije, onda se prove-
rava uslov uslov2 i ako je tačan onda se izvršava naredba2. Ako nisu ispunjeni
ni uslov1 ni uslov2, onda se ulazi u else blok i izvršava naredba naredba3. Na-
kon izvršavanja neke od pomenutih naredbi (naredba1, naredba2 i naredba3)
program nastavlja izvršavanje od naredbe naredba4.
Pogledajmo program koji pronalazi maksimum dva broja.

12
int a = 10;
int b = 20;
int max;
if (a > b)
max = a;
else
max = b;
System.out.println("Maksimum je: " + max);

> Maksimum je 20

5.2 while petlja


Naredba while se koristi kada želimo da ponovimo odredeni kod više puta.
Struktura je sledeća:
while (uslov) {
naredba;
}
Sve dok (otud i ključna reč while koja na engleskom znači sve dok ) je ispu-
njen uslov (na primer x > 3) izvršava se naredba.

int brojac = 0;
while (brojac < 5) {
System.out.println(brojac + " ");
brojac++;
}

0 1 2 3 4

5.3 for petlja

6 Nizovi
Nizovi su jedna od poznatih struktura podataka u programiranju. Na slici
je prikazan jedan niz.

Slika 2: Niz od 8 elemenata

6.1 Dužina niza


U Javi se indeksi indeksiraju od broja 0, tako da ukoliko imamo niz od n
elemenata, onda elementi imaju indekse 0, 1, ..., n-2, n-1. Dakle ako niz

13
ima 4 elementa, njima odgovaraju indeksi 0, 1, 2, 3. Dužinu niza možemo
dobiti tako što pristupimo članu podatku koristeći promenljivu length.
Sledeći kod pravi niz od 3 elementa i na standardni izlaz ispisuje koliko niz
ima elemenata.
int[] a = new int[3];
System.out.println("Broj elemenata: " + a.length);

> Broj elemenata: 3

6.2 Primer unosa niza


int[] a = new int[3];
a[0] = 1;
a[1] = 10;
a[2] = 20;
System.out.println(a[0]);
System.out.println(a[1]);
System.out.println(a[2]);

> 1
> 10
> 20

6.3 Funkcija koja ispisuje niz


Ukoliko je potrebno da ispišemo sadržaj niza to možemo učiniti sledećim
kodom.

int[] a = new int[3]; // pravimo niz od 3 elementa


a[0] = 1; a[1] = 2; a[2] = 3; // inicijalizemo na pocetne vrednosti

// ispisujemo sadrzaj niza


for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}

No ukoliko postoji više nizova možemo navedeni kod uopštiti u funkciju koju
možemo pozivati za više različitih nizova.

public static void ispisNiz(int[] a) {


for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " "); // ispisujemo element po element
}
System.out.println(); // na kraj ispisa dodajemo novi red
}

public static void main(String[] args) {


int[] a = new int[3];
a[0] = 1; a[1] = 2; a[2] = 3;

14
int[] b = new int[3];
b[0] = 10; b[1] = 20; b[2] = 30;

System.out.println("Prvi niz:");
ispisiNiz(a);
System.out.println("Drugi niz:");
ispisiNiz(b);
}

> Prvi niz:


> 1 2 3
> Drugi niz:
> 10 20 30

6.4 Primer koji ispisuje niz obrnuto


import java.util.Scanner;

public class ObrtanjeNiza {


public static void ispisiNizObrnuto(int[] a) {
for (int i = a.length-1; i >= 0; i--) {
System.out.print(a[i] + " "); // ispisujemo element po element
}
System.out.println(); // na kraj ispisa dodajemo novi red
}

public static void main(String[] args) {


Scanner sc = new Scanner(System.in);
System.out.println("Unesite velicinu niza:");
int n = sc.nextInt();
int[] a = new int[n];

System.out.println("Unesite elemente:");
for (int i = 0; i < a.length; i++) {
a[i] = sc.nextInt();
}

// Pozivamo funkciju koja ispisuje niz obrnuto.


System.out.println("Obrnuti niz:");
ispisiNizObrnuto(a);
}
}

> Unesite velicinu niza:


> 4
> Unesite elemente:
> 1 2 3 4
> Obrnuti niz:
> 4 3 2 1

15
7 Rad sa datotekama
7.1 Čitanje iz datoteke
7.2 Pisanje u datoteku

8 Objektno orijentisano programiranje


Objektno orijentisano programiranje (OOP) predstavlja način programira-
nja u kojem se problem modeluje klasama i objektima. OOP je nastalo 1980ih
godina kao novi način kreiranja softvera koje je za cilj imalo da olaksa pravljenje
i održavanje programa.

8.1 Objektni deo Jave


Java je nastala pre svega kao objektno-orijentisani jezik i danas je jedan od
najkorišćenijih objektnih programskih jezika.
Svaki Java fajl u sebi sadrži tačno jednu klasu koja se mora zvati isto kao
i sam fajl. Na primer, ukoliko se fajl zove Ucenik.java onda u njemu mora
postojati klasa Ucenik.
Na slici 3 prikazana je razlika izmedu klase i objekta.
Klasa predstavlja nacrt nekog pojma. Ona definiše njegovo ponašanje i
svojstva.
Objekat predstavlja konkretan primerak neke klase. Na primer za klasu
Automobil, njeni objekti su BMW, Audi, Yugo, Fiat itd.

Slika 3: Prikaz klasa i objekata

16
8.2 Naša prva klasa
Umesto da prvi govorimo šta su to konstruktor, metodi i polja, daćemo prvo
primer, a onda navedene pojmove objasniti referišući se prikazani primer.
Klasa koja će biti prikazana za cilj ima da omogući opis tačaka u 2d prostoru.
Slika 4 prikazuje tačke A i B.

3 A

1 B

2 5 x

Slika 4: Primeri tačaka u 2d prostoru

// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Fajl: Tacka.java
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
public class Tacka {
// POLJA - nasi privatni podaci koje krijemo od korisnika.
private double x;
private double y;

// KONSTRUKTORI - funkcije koji se pozivaju pri pravljenju objekta.


// Moze ih biti vise.
public Tacka() {
this.x = 0.0;
this.y = 0.0;
}
public Tacka(double x, double y) {
this.x = x;
this.y = y;
}

17
// GETERI - korisniku daju nase sakrivene privatne podatke.
public double getX() {
return this.x;
}
public double getY() {
return this.y;
}

// SETERI - postavljaju vrednosti 'x' i 'y'


// na nase privatne podatke.
public void setX(double x) {
this.x = x;
}
public void setY(double y) {
this.y = y;
}

// Funkcija koja vraca String reprezentaciju naseg objekta.


// Npr tacka ce biti prikazana kao -> (2, 3)
public String toString() {
return "(" + this.x + "," + this.y + ")";
}
}

// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Fajl: Main.java
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
public class Main {
public static void main(String[] args) {
// Pravimo tacku koristeci prazan konstruktor
Tacka O = new Tacka();

// Pravimo tacku sa koordinatama (2, 3)


Tacka A = new Tacka(2, 3);

// Pravimo tacku sa koordinatama (5, 1)


Tacka B = new Tacka(5, 1);

// Ispisujemo tacku O pozivajuci metod toString()


System.out.println("Tacka O: " + O.toString());

// Ispisujemo tacku A pozivajuci metod toString()


System.out.println("Tacka A: " + A.toString());

// Ispis ce raditi i bez NASEG poziva metoda toString(),


// Java ce je sama pozvati
// kada objekat stavimo u 'print' ili 'println'
System.out.println("Tacka B: " + B;
}
}

18
Pokretanje navedenog koda daje sledeći rezultat.

> Tacka O: (0, 0)


> Tacka A: (2, 3)
> Tacka B: (5, 1)

8.2.1 Konstruktori
Konstruktor je specijalna funkcija bez povratne vrednosti koju Java po-
ziva kada pravi objekat neke klase. Ime konstruktora mora biti isto kao i ime
klase. Dozvoljeno je imati više konstruktora (što je jako čest slučaj u praksi).
Vidljivost konstruktora najčešće postavljamo na public kako bi korisnici naše
klase mogli da prave objekte.
Na primer poziv:

Tacka A = new Tacka(2, 3)


poziva konstruktor:
public Tacka(double x, double y)

koji se nalazi unutar klase Tacka.


Slično tome, poziv:
Tacka A = new Tacka()
poziva konstruktor:

public Tacka()
koji se takode nalazi unutar klase Tacka.
Konstruktor će napraviti objekat (zauzeće potrebnu memoriju) i vrednosti
objekta postaviti na odgovarajuće vrednosti (u našem slučaju će za tačku po-
staviti vrednosti x i y koordinate).

8.2.2 Polja
Polja predstavljaju promenljive koja su glavno dostupna unutar naše klase.
Služe da omoguće funkcionisanje klase i najčešće želimo da ih sakrijemo od
spoljašnjeg sveta. Time pokušavamo da korisnika klase ne opterećujemo kako
smo implementirali klasu, već mu jednostavno kroz javne metode omogućavamo
da koristi našu klasu.
U primeru koji je prikazan, polja su:
private double x;
private double y;

8.2.3 Metodi
Metodi su funkcije koje pozivamo nad konkretnim objektom naše klase.
Kako bi se metod pozvao, potrebno je pre toga napraviti sam objekat koristići
operator new.

19
// Pravimo objekat klase Tacka
Tacka A = new Tacka(2, 3);

// Citamo x koordinatu objekta klase Tacka


double xKoordinata = A.getX();
System.out.println("X koordinata: " + xKoordinata);

// Pozivamo metod koji menja neku vrednost unutar objekta.


A.setX(42.42);
System.out.println("X koordinata: " + xKoordinata);

> X koodinata: 2
> X koodinata: 42.42

8.2.4 Metod toString()


Metod toString() je izuzetno koristan metod koji ćemo skoro uvek defini-
sati za naše klase. Njegova namena je da pruži tekstualnu reprezentaciju
našeg objekta.
Kako bismo definisali kako se naš objekat prikazuje kao String potrebno je
da implementiramo metod toString() unutar klase. Metod toString() ima
sledeći oblik:
public String toString() {
String prikaz = "";
// Nasa implementacija ide ovde.
// ...
// ...
return prikaz;
}
Na primer za neku tačku koja se nalazi na koordinata 2 i 3, tekstualna
reprezentacija bi bila:
> (2, 3)

8.3 Nasledivanje
8.4 Polimorfizam

20
Literatura

21

You might also like