Uvod u programski jezik Java - alas.matf.bg.ac.rsalas.matf.bg.ac.rs/~mi13283/systempro/skripte/java.pdf · 2.2 Klasnitipovi Java je objektno-orijentisani programski jezik tako da

  • Upload
    ledung

  • View
    234

  • Download
    6

Embed Size (px)

Citation preview

  • Uvod u programski jezik JavaSkola racunara SystemPro

    Nemanja [email protected]

    oktobar 2016

    1

  • Sadrzaj1 O programskom jeziku Java 4

    1.1 Principi na kojima je zasnovan . . . . . . . . . . . . . . . . . . . 41.2 Prevodenje Java koda . . . . . . . . . . . . . . . . . . . . . . . . 41.3 Java virtuelna masina . . . . . . . . . . . . . . . . . . . . . . . . 4

    2 Tipovi podataka 42.1 Primitivni tipovi podataka . . . . . . . . . . . . . . . . . . . . . . 52.2 Klasni tipovi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    3 String 63.1 Osnovni primeri . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    3.1.1 Naredba dodele . . . . . . . . . . . . . . . . . . . . . . . . 63.1.2 Pristup i-tom karakteru . . . . . . . . . . . . . . . . . . . 63.1.3 Duzina stringa . . . . . . . . . . . . . . . . . . . . . . . . 73.1.4 Poredenje stringova . . . . . . . . . . . . . . . . . . . . . 73.1.5 Prebacivanje velicine slova . . . . . . . . . . . . . . . . . . 73.1.6 Iteriranje kroz String . . . . . . . . . . . . . . . . . . . . 7

    3.2 Zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    4 Ulaz i izlaz 84.1 Opis metoda za izlaz . . . . . . . . . . . . . . . . . . . . . . . . . 84.2 Primer upotrebe metoda print i println . . . . . . . . . . . . . 94.3 Formatiranje izlaza . . . . . . . . . . . . . . . . . . . . . . . . . . 94.4 Citanje sa standardnog ulaza koristeci Scanner . . . . . . . . . . 94.5 Kompletan primer upotrebe klase Scanner . . . . . . . . . . . . . 104.6 Zadaci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    5 Kontrola toka programa 125.1 if-elseif-else grananje . . . . . . . . . . . . . . . . . . . . . . 125.2 while petlja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135.3 for petlja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

    6 Nizovi 136.1 Duzina niza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136.2 Primer unosa niza . . . . . . . . . . . . . . . . . . . . . . . . . . 146.3 Funkcija koja ispisuje niz . . . . . . . . . . . . . . . . . . . . . . 146.4 Primer koji ispisuje niz obrnuto . . . . . . . . . . . . . . . . . . . 15

    7 Rad sa datotekama 167.1 Citanje iz datoteke . . . . . . . . . . . . . . . . . . . . . . . . . . 167.2 Pisanje u datoteku . . . . . . . . . . . . . . . . . . . . . . . . . . 16

    8 Objektno orijentisano programiranje 168.1 Objektni deo Jave . . . . . . . . . . . . . . . . . . . . . . . . . . 168.2 Nasa prva klasa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

    8.2.1 Konstruktori . . . . . . . . . . . . . . . . . . . . . . . . . 198.2.2 Polja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198.2.3 Metodi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198.2.4 Metod toString() . . . . . . . . . . . . . . . . . . . . . . 20

    2

  • 8.3 Nasledivanje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208.4 Polimorfizam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

    Literatura 21

    3

  • 1 O programskom jeziku JavaJava je objektno orijentisan programski jezik koji je napravila kompanija Sun

    Microsystems oko 1995. godine. Java danas predstavlja jedan od najkoriscenijihi najpopularnijih programskih jezika. Veliku primenu jezik je pronasao i u pro-gramiranju za Veb gde se cesto 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 zasnovanJezik je napravljen sa sledecim 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 dinamican, interpretiran i podrzavati niti

    1.2 Prevodenje Java kodaSlika 1 prikazuje kako izgleda proces prevodenja izvornog Java koda u

    masinski kod koji procesor moze da izvrsi. Najpre treba uociti da se Java kod(blok 1) najpre prosleduje Java kompilatoru (program koji se zove javac) kojigenerise Java bajtkod (blokovi 1, 2 i 3).

    Dobijeni bajt kod se potom salje Java virtuelnoj masini (JVM) koja gaizvrsava na odgovarajucem operativnom sistemu.

    Uvodenje Java bajt koda kao medusloj omogucava da se isti Java programizvrsi na vise razlicitih operativnih sistema. Jedino sto je potrebno kako bi ovofunkcionisalo je da postoji Java virtuelna masina za ciljani operativni sistem.

    1.3 Java virtuelna masinaJava virtuelna masina je program koji zna da izvsava Java bajt kod. Treba

    ga zamisljati kao neku vrstu virtuelnog racunara, no da ne bude konfuzije, Javavirtuelna masina (eng. Java Virtual Machine - JVM) je program koji se instalirana racunaru i koji ce izvrsavati java kod.

    2 Tipovi podatakaU javi postoje dve vrste tipova podataka, primitivni tipovi i klasni tipovi.

    Razvijaocu programa se omogucava da uvede svoje tipove podataka tako stodefinise nove klase. Vise o klasama i objektno-orijentisanog programiranju bicekasnije reci.

    4

  • Slika 1: Prevodenje Java koda

    2.1 Primitivni tipovi podatakaU javi postoji vise primitivnih tipova podataka. Pod primitivnim se misli

    na to da nisu u pitanju klase vec prosti podaci. Na primer ceo broj sa tipomint je 32 bitni binarni broj.

    Tabela 1: Primitivni tipovi u JaviIme podatka Opis Broj bitova Podrazumevana vrednostboolean Logicka vrednost 1 falsebyte Obican bajt 8 0char Unicode karakter 16 '\u0000'short Celi broj 16 0int Celi broj 32 0long Celi broj 64 0float Realni broj 32 00fdouble Realni broj 64 00d

    Osim toga, java poseduje tip String koji je nesto izmedu primitivnog iklasnog tipa. Naime, String se ponasa kao klasni tip (mozemo nad njim pozivatimetode), ali se ipak dozvoljavaju neke naredbe poput naredbe ispod sto inacenije slucaj sa klasama i objektima.

    String primer = "Zdravo svete";

    Vise o klasi String u delu 3.

    5

  • 2.2 Klasni tipoviJava je objektno-orijentisani programski jezik tako da podrzava koncepte

    OOP-a poput:

    nasledivanja;

    polimorfizma;

    enkapsulacije.

    Vise o klasama i njihovom definisanju u kasnijem delu o objektno-orijentisanom programiranju.

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

    3.1 Osnovni primeriSlede neki osnovni primer oko rada sa klasom String.

    3.1.1 Naredba dodele

    Sledi primer koji prikazuje kako mozemo da napravimo promenljivu tipaString, dodeliti joj vrednost, napraviti novi String od postojeceg itd.

    String primer; // deklarisemo promenljivu tipa Stringprimer = "Zdravo"; // dodeljujemo vrednost promenljivojprimer += " "; // na postojeci string dodajemo novi stringprimer += "svete!"; // isto kao: primer = primer + "svete";System.out.println(primer); // na standardni izlaz ispisujemo vrednost

    Pokretanje koda daje sledeci izlaz:

    > Zdravo svete!

    3.1.2 Pristup i-tom karakteru

    Ukoliko zelimo da pristupimo i-tom karakteru unutar String-a (sto je karak-ter), to mozemo uraditi koristeci metod charAt.

    String primer = "Zdravo"; // dodeljujemo vrednost promenljivojSystem.out.println(primer.charAt(0)); // karakter na poziciji 0System.out.println(primer.charAt(5)); // karakter na poziciji 5

    > Z> o

    6

  • 3.1.3 Duzina stringa

    Duzinu stringa mozemo dobiti pozivajuci metod length() nad stringom cijuduzinu zelimo.

    String primer = "Zdravo";int duzina = primer.length(); // metod koji vraca duzinu stringaSystem.out.println(duzina); // ispisujemo duzinu stringa

    > 6

    3.1.4 Poredenje stringova

    Stringove poredimo koristeci 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 velicine slova

    Ukoliko zelimo da mala slova prebacimo u velika i obrnuto, mozemo koristitimetode 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. Tomozemo uciniti koristeci 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 ZadaciZadatak 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 slovostringa txt pretvara u malo. Sa standardnog ulaza uneti jednu liniju teksta,proslediti je funkciji pretvoriMala i na standardni izlaz ispisati rezultat radaprograma.

    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 vraca brojpojavljivanja karaktera cifara. Sa standardnog ulaza uneti jednu liniju teksta,proslediti je funkciji prebrojCifre i na standardni izlaz ispisati rezultat radaprograma.

    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. Sastandardnog ulaza uneti string, a potom i karakter koje treba proslediti funkcijiprebrojKarakter i na standardni izlaz ispisati rezultat rada programa.

    Teeeeest aab11 Zdravo123Svetee 1 $> 5 > 2 > 0

    Zadatak 3.5 Sa standardnog ulaza se unose stringovi u beskonacnoj petlji.Ukoliko je unet string koji je razlicit od "quit", na standardni izlaz treba is-pisati uneti string transformisan u mala slova. Ukoliko je unet string "quit"treba izaci iz programa.

    HELLO quit test> hello > > testTeSt AAA> test > aaaquit quit> >

    4 Ulaz i izlazZa rad sa ulazom i izlazom (o fajlovima ce biti reci u delu 7) cemo koristiti

    System.out.print i System.out.println metode.

    4.1 Opis metoda za izlazMetodi System.out.print i System.out.println ispisuju svoje argumente

    na standardni izlaz. Metod print ispisuje bez novog reda, a metod printlnnakon ispisa dodaje novi red.

    8

  • 4.2 Primer upotrebe metoda print i printlnint 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 izlazaUkoliko zelimo da napravimo lepo formatiran izlaz poput "kvadrat(2) = 4"

    mozemo to uciniti koriscenjem operatora + koji vrsi konverziju svih tipova u tipString kada je barem jedan operand tipa String.

    // (2*2) ce naterati javu da prvo izracuna izraz pa da ga onda prebaci u stringSystem.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 Citanje sa standardnog ulaza koristeci ScannerJava poseduje klasu Scanner koja se nalazi u java.util.Scanner. Ukoliko

    zelimo 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 cemu:

    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 cita 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 citanjepotpis metoda povratna vrednost opisnext() String vraca recnextLine() String vraca liniju tekstanextInt() int vraca celobrojnu vrednostnextFloat() float vraca realnu vrednostnextDouble() double vraca realnu vrednostnextBoolean() bool vraca logicku vrednost

    Tabela 3: Neki od metoda klase Scanner za ispitivanje citanjapotpis metoda povratna vrednost opishasNext() bool vraca true ako je na ulazu odgovarajuci podatakhasNextLine() bool vraca true ako je na ulazu odgovarajuci podatakhasNextInt() bool vraca true ako je na ulazu odgovarajuci podatakhasNextFloat() bool vraca true ako je na ulazu odgovarajuci podatakhasNextDouble() bool vraca true ako je na ulazu odgovarajuci podatakhasNextBoolean() bool vraca true ako je na ulazu odgovarajuci podatak

    4.5 Kompletan primer upotrebe klase ScannerSledeci kod ilustruje kako sa standardnog ulaza mozemo procitati 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

    Sta se desava kada korisnik unese nesto sto 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 ce biti posvecena paznja nesto kasnije.Kako bismo izbegli ovako nezeljeno ponasanje programa, mozemo 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 vrednostiint x = 0, y = 0;// proveravamo da li postoji podatak tipa int na standardnom ulazuif (sc.hasNextInt())

    x = sc.nextInt(); // ako postoji, citamo gaelse {

    // inace, prijavljujemo gresku i izlazimo iz programaSystem.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));

    }}

    Sta se desava 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 ZadaciZadatak 4.1 Napisati program koji sa standardnog ulaza unosi dva realna brojatipa 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 klasiMath.

    2 100 1 -23 0 1000.11 2> 8 > 1 > 1 > 4

    11

  • Zadatak 4.2 Napisati program koji sa standardnog ulaza unosi realan broj tipadouble 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 izracunava euklidsko rastojanja izmedu tacakaA(x1, y1) i B(x2, y2) po formuli:

    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(doublex1, double y1, double x2, double y2). Dozvoljeno je koristiti funkcijesqrt(double x) i pow(double x, double y) koje se nalazi u klasi Math.

    0 1 0 -10 1 0 -110 5 5 1.30 5 5 15.5> 10 > 5.66 > 7.07 > 16.67

    5 Kontrola toka programaKako bismo kontrolisali tok programa, koristimo naredbe if, for i while

    koje ce biti opisane u kasnijem delu.

    5.1 if-elseif-else grananjeKako bismo odredeni kod izvsili samo u nekim slucajevima, koristimo na-

    redbe grananja u sledecem obliku:

    if (uslov1) {naredba1;

    } else if (uslov2) {naredba2;

    } else {naredba3;

    }naredba4;

    Ako je uspunjen uslov1, onda se izvrsava naredba1, ako nije, onda se prove-rava uslov uslov2 i ako je tacan onda se izvrsava naredba2. Ako nisu ispunjenini uslov1 ni uslov2, onda se ulazi u else blok i izvrsava naredba naredba3. Na-kon izvrsavanja neke od pomenutih naredbi (naredba1, naredba2 i naredba3)program nastavlja izvrsavanje 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 petljaNaredba while se koristi kada zelimo da ponovimo odredeni kod vise puta.

    Struktura je sledeca:

    while (uslov) {naredba;

    }

    Sve dok (otud i kljucna rec while koja na engleskom znaci sve dok) je ispu-njen uslov (na primer x > 3) izvrsava se naredba.

    int brojac = 0;while (brojac < 5) {

    System.out.println(brojac + " ");brojac++;

    }

    0 1 2 3 4

    5.3 for petlja

    6 NizoviNizovi su jedna od poznatih struktura podataka u programiranju. Na slici

    je prikazan jedan niz.

    Slika 2: Niz od 8 elemenata

    6.1 Duzina nizaU 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. Duzinu niza mozemodobiti tako sto pristupimo clanu podatku koristeci promenljivu length.

    Sledeci kod pravi niz od 3 elementa i na standardni izlaz ispisuje koliko nizima elemenata.

    int[] a = new int[3];System.out.println("Broj elemenata: " + a.length);

    > Broj elemenata: 3

    6.2 Primer unosa nizaint[] 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 nizUkoliko je potrebno da ispisemo sadrzaj niza to mozemo uciniti sledecim

    kodom.

    int[] a = new int[3]; // pravimo niz od 3 elementaa[0] = 1; a[1] = 2; a[2] = 3; // inicijalizemo na pocetne vrednosti

    // ispisujemo sadrzaj nizafor (int i = 0; i < a.length; i++) {

    System.out.print(a[i] + " ");}

    No ukoliko postoji vise nizova mozemo navedeni kod uopstiti u funkciju kojumozemo pozivati za vise razlicitih 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 obrnutoimport 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 Citanje iz datoteke

    7.2 Pisanje u datoteku

    8 Objektno orijentisano programiranjeObjektno orijentisano programiranje (OOP) predstavlja nacin programira-

    nja u kojem se problem modeluje klasama i objektima. OOP je nastalo 1980ihgodina kao novi nacin kreiranja softvera koje je za cilj imalo da olaksa pravljenjei odrzavanje programa.

    8.1 Objektni deo JaveJava je nastala pre svega kao objektno-orijentisani jezik i danas je jedan od

    najkoriscenijih objektnih programskih jezika.Svaki Java fajl u sebi sadrzi tacno jednu klasu koja se mora zvati isto kao

    i sam fajl. Na primer, ukoliko se fajl zove Ucenik.java onda u njemu morapostojati klasa Ucenik.

    Na slici 3 prikazana je razlika izmedu klase i objekta.Klasa predstavlja nacrt nekog pojma. Ona definise njegovo ponasanje 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 Nasa prva klasaUmesto da prvi govorimo sta su to konstruktor, metodi i polja, dacemo prvo

    primer, a onda navedene pojmove objasniti referisuci se prikazani primer.Klasa koja ce biti prikazana za cilj ima da omoguci opis tacaka u 2d prostoru.

    Slika 4 prikazuje tacke A i B.

    x

    y

    A

    2

    3

    B

    5

    1

    Slika 4: Primeri tacaka 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 konstruktorTacka 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 sledeci 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 imeklase. Dozvoljeno je imati vise konstruktora (sto je jako cest slucaj u praksi).Vidljivost konstruktora najcesce postavljamo na public kako bi korisnici naseklase 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.Slicno tome, poziv:

    Tacka A = new Tacka()

    poziva konstruktor:

    public Tacka()

    koji se takode nalazi unutar klase Tacka.Konstruktor ce napraviti objekat (zauzece potrebnu memoriju) i vrednosti

    objekta postaviti na odgovarajuce vrednosti (u nasem slucaju ce za tacku po-staviti vrednosti x i y koordinate).

    8.2.2 Polja

    Polja predstavljaju promenljive koja su glavno dostupna unutar nase klase.Sluze da omoguce funkcionisanje klase i najcesce zelimo da ih sakrijemo odspoljasnjeg sveta. Time pokusavamo da korisnika klase ne opterecujemo kakosmo implementirali klasu, vec mu jednostavno kroz javne metode omogucavamoda koristi nasu 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 nase klase.Kako bi se metod pozvao, potrebno je pre toga napraviti sam objekat koristicioperator new.

    19

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

    // Citamo x koordinatu objekta klase Tackadouble 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 cemo skoro uvek defini-sati za nase klase. Njegova namena je da pruzi tekstualnu reprezentacijunaseg objekta.

    Kako bismo definisali kako se nas objekat prikazuje kao String potrebno jeda implementiramo metod toString() unutar klase. Metod toString() imasledeci oblik:

    public String toString() {String prikaz = "";// Nasa implementacija ide ovde.// ...// ...return prikaz;

    }

    Na primer za neku tacku koja se nalazi na koordinata 2 i 3, tekstualnareprezentacija bi bila:

    > (2, 3)

    8.3 Nasledivanje

    8.4 Polimorfizam

    20

  • Literatura

    21

    O programskom jeziku JavaPrincipi na kojima je zasnovanPrevoenje Java kodaJava virtuelna maina

    Tipovi podatakaPrimitivni tipovi podatakaKlasni tipovi

    StringOsnovni primeriNaredba dodelePristup i-tom karakteruDuina stringaPoreenje stringovaPrebacivanje veliine slovaIteriranje kroz String

    Zadaci

    Ulaz i izlazOpis metoda za izlazPrimer upotrebe metoda print i printlnFormatiranje izlazaitanje sa standardnog ulaza koristei ScannerKompletan primer upotrebe klase ScannerZadaci

    Kontrola toka programaif-elseif-else grananjewhile petljafor petlja

    NizoviDuina nizaPrimer unosa nizaFunkcija koja ispisuje nizPrimer koji ispisuje niz obrnuto

    Rad sa datotekamaitanje iz datotekePisanje u datoteku

    Objektno orijentisano programiranjeObjektni deo JaveNaa prva klasaKonstruktoriPoljaMetodiMetod toString()

    NasleivanjePolimorfizam

    Literatura