banjalukaforum.com

Dobrodošli na banjalukaforum.com
Danas je 16 Apr 2024, 15:20

Sva vremena su u UTC [ DST ]




Započni novu temu Odgovori na temu  [ 60 Posta ]  Idi na stranicu 1, 2, 3  Sledeća
Autoru Poruka
 Tema posta: Ucenje Jave
PostPoslato: 27 Maj 2014, 07:28 
OffLine
Majstorski kandidat
Majstorski kandidat
Korisnikov avatar

Pridružio se: 07 Apr 2009, 12:08
Postovi: 300
Pozdrav,
evo ima neko vrijeme već kako samo počeo učiti Javu. Imam prethodnog programerskog iskustva u C-u i C++ i još ponekom "školskom" programskom jeziku (Basic, Pascal), kao i sa Oracle i MySQL bazama, mogu reći da dobro poznajem SQL jer sam vec radio reporting za dva veća projekta.
Cilj mi je da u nekom budućem vremenu dovoljno naučim da mogu da kažem da sam Junior Java Developer.
Krenuo sam sa knjigom i zbirkom zadataka koju sam našao na netu, profesor Dejan Živković je autor i jednog i drugog (Univerzitet Singidunum).
Imam i materijal sa ETF-a za Java programiranje.
Ako neko ima neku dobru zbirku zadataka koja ide step by step ili neki drugi materijal za učenje dobrodošlo je :)


Vrh
 Profil  
 
 Tema posta: Re: Ucenje Jave
PostPoslato: 27 Maj 2014, 11:45 
OffLine
Početnik
Početnik

Pridružio se: 28 Mar 2014, 21:37
Postovi: 26
Licno sam citao tu knjigu od Dejana Zivkovica koju sam pozajmio od druga prije nekih 5 godina. Prilicno "tanko". Nastoji da nabavis sebi "Thinking in Java". A sto se tice zadataka, recimo imas izazove na http://www.reddit.com/r/dailyprogrammer pa probaj da ih rjesavas. Meni licno kao najbolja vjezba dodju pitanja sa stackoverflowa. Toliko od mene - Java amatera. :)


Vrh
 Profil  
 
 Tema posta: Re: Ucenje Jave
PostPoslato: 27 Maj 2014, 12:16 
OffLine
Majstorski kandidat
Majstorski kandidat
Korisnikov avatar

Pridružio se: 07 Apr 2009, 12:08
Postovi: 300
Uzeo sam tu knjigu profesora Živkovića uz zbirku zadataka, kvalitetan je pdf nije skeniran.
A ovu knjigu "Misliti u Javi" nasao sam na engleskom, pa i nju polako planiram početi čitati. Stakoverflow cu ubaciti takodje :)


Vrh
 Profil  
 
 Tema posta: Re: Ucenje Jave
PostPoslato: 15 Feb 2015, 12:55 
OffLine
Veteran
Veteran
Korisnikov avatar

Pridružio se: 06 Nov 2010, 15:27
Postovi: 1377
Lokacija: Banjaluka
Da li neko zna koja je ovo knjiga?
Tražim je nekoliko sati, ali ne mogu naci...
Imam samo prvo poglavlje:

Spoiler:
Klase, objekti i njihovi elementi
Klase
Klasa predstavlja neki predmet ili pojavu iz realnog sveta izraženu u obliku pogodnom za neki (objektno-orijentisani) programski jezik. Klasa je uprošćena slika realnih predmeta i pojava i obuhvata njihove:
• karakteristike (atribute)
• ponašanja (metode) ● odnose sa drugim klasama (relacije)

Atributi, metode i relacije se nazivaju elementi (članice) klase.
Primer 1
Primer klase je Automobil (Slika 1). Automobil ima sledeće karakteristike: marku, model, godinu proizvodnje i registracioni broj. Neka od ponašanja automobila su: upali, ugasi, kreni, stani. Na slici se može videti da su ove karakteristike predstavljene preko atributa, dok su ponašanja predstavljena korišćenjem metoda. Bitno je primetiti da je ovo uprošćena slika realnog automobila jer automobil može imati i niz drugih karakteristika (serijski broj, boja...) i ponašanja (skreni, otvori vrata...).

Slika 1: Primer klase - Klasa Automobil
Primer 2
Drugi primer klase može da bude Osoba. Recimo da osoba ima ime, prezime i matični broj, a da, u ovom primeru, nema definisano nikakvo ponašanje. Ako se uzme u obzir klasa Automobil iz prethodnog primera i klasa Osoba, između njih postoji određeni odnos. Osoba može da bude vlasnik auta. Ovaj odnos se predstavlja putem relacije između klasa (Slika 2).

Slika 2: Primer relacije između dve klase
Detalji u vezi sa atributima, metodama i relacijama će biti objašnjeni u okviru narednih poglavlja. Sada je bitno videti kako se vrši deklaracija klase u Javi.
Opšti oblik deklaracije klase u Javi je sledeći:
class NazivKlase {
//deklaracije atributa...
//deklaracije metoda...
}
Deklaracija počinje ključnom reči “class”, posle koje ide naziv klase. Ovaj prvi red je zaglavlje klase. Sledeći element je otvorena vitičasta zagrada. Posle vitičaste zagrade počinje telo klase koje sadrži deklaracije atributa i metoda. Deklaracija klase se završava zatvorenom vitičastom zagradom.
Java je programski jezik u kome se pravi razlika između velikih i malih slova (case sensitive). To znači da se nazivi klasa, atributa, metoda mogu razlikovati u zavisnosti od toga da li se napišu velikim ili malim slovima. Na primer, “KonvertorValute”, “konvertorvalute” i “KONVERTORVALUTE” će da se tretiraju kao potpuno različiti nazivi.
Trenutno, u okviru tela klase koja je data kao primer deklaracije se nalaze samo dva komentara. Uopšteno gledano, komentari služe tome da se napiše neko objašnjenje ili napomena u okviru samog koda, a da se to objašnjenje ne tumači kao programski kod od strane Jave.
Komentari se u Javi mogu pisati na dva načina. Jednu varijantu predstavljaju kratki, jednolinijski komentari. Početak ovakvog komentara se označava duplom kosom crtom, a ceo tekst mora da stane u jedan red. Primer jednolinijskog komentara je:
//deklaracije atributa...
Druga vrsta komentara su višelinijski komentari. Oni se pišu u slučaju da je potrebno dati neko detaljnije ili duže objašnjenje. Naravno, u tom slučaju je moguće napisati više jednolinijskih komentara, ali je mnogo jednostavnije ceo tekst komentara uokviriti kao jedan višelinijski komentar. Višelinijski komentar počinje kosom crtom i zvezdom (“/*”) a završava se zvezdom i kosom crtom (“*/”):
/* Ovo jevišelinijskikomentar*/
Primer 3
Deklarisati Klasu Automobil. Ova klasa ne bi trebalo da ima nijedan atribut niti metodu.
class Automobil {
}
Primer 4
Deklarisati Klasu Osoba. Ova klasa ne bi trebalo da ima nijedan atribut niti metodu.
class Osoba {
}
Potrebno je napomenuti da se u objektno-orijentisanim programskim jezicima, u principu, poštuje nepisano pravilo da se nazivi klasa pišu sa prvim velikim slovom (“Automobil” a ne “automobil”). Ako se naziv klase sastoji iz više reči, onda se sve reči pišu spojeno a prvo slovo svake reči je veliko (“KonvertorValute”, “PoslovniCentar”, “MetričkoImperijalniKonvertor”). Naziv ne sme da ima nijedan blanko znak (ovo važi i za nazive svih drugih elemenata -atributa, metoda...).
Takođe, običaj je da se izvorni kod svake klase čuva u posebnom fajlu. Tako će izvorni kod klase “Automobil” da bude sačuvan u fajlu “Automobil.java”, a klase “Osoba” u fajlu “Osoba.java”. Kada se kompajlira, Java izvršni kod će da bude sačuvan u fajlu “Automobil.class” tj. “Osoba.class”.
Atributi
Kao što je već rečeno, atributi predstavljaju neke karakteristike klasa. Za klasu Osoba, to može biti ime, prezime, pol, starost itd. U pitanju su, najčešće, neke jednostavne karakteristike koje se mogu izraziti putem nekog broja, slova ili niza slova.
Deklaracija atributa je relativno jednostavna i izgleda ovako:
tip_podatka nazivAtributa;
Tip podatka predstavlja tip podatka koji taj atribut sadrži -ceo broj, realan, broj, slovo, niz slova ili nešto drugo. Prema nepisanom pravilu, nazivi atributa bi trebalo da počinju malim slovom (“starost”, “marka”, “model” itd). Ako se naziv atributa sastoji od više reči, sve reči se pišu spojeno, prva počinje malim slovom, a sve ostale velikim (“matičniBroj”, “brojMotora” itd). Deklaracija se završava tačka-zarezom.
Jedno jako važno pravilo za pisanje komandi u Javi je da se sve komande moraju završiti znakom
tačka-zarez. Neki najčešće korišćeni tipovi podataka u Javi su:

Naziv tipa podatka
int double char
boolean
String Calendar
Opis
celi brojevi realni brojevi znak (slovo, cifra ili neki drugi
znak) logička promenljiva
niz znakova datum i vreme vrednosti) “Reka”, “Pera”, “123”, “zx!” 2008-12-31 10:50


Int, double, char i boolean su prosti tipovi podataka, dok su String i Calendar složeni pa se, u stvari, predstavljaju korišćenjem odgovarajućih predefinisanih klasa. U Javi se sve klase smatraju složenim tipovima podataka, ali će o tome biti više reči u narednim poglavljima. Potrebno je napomenuti da postoje i još neki prosti tipovi podataka ali da se ne koriste toliko često: long (celi brojevi, ali je raspon veći nego kod int), short (celi brojevi, ali je raspon manji nego kod int) i float (realni brojevi, ali je preciznost manja nego kod double).
Takođe, u Javi se char vrednosti (znakovi) moraju pisati pod jednostrukim znacima navoda, dok se String vrednosti obavezno pišu pod dvostrukim znacima navoda.
Primer 5
Deklarisati Klasu AutomatNovca. Ova klasa bi trebalo da ima samo atribut “stanje” koji predstavlja iznos novca koji se trenutno nalazi u automatu (realan broj).
class AutomatNovca {
double stanje;
}
Primer 6
Deklarisati Klasu Računar. Ova klasa bi trebalo da ima sledeće atribute: takt procesora (realan broj, npr. 4.0 GhZ), radna memorija (realan broj, npr. 2.0 Gb), hard disk (ceo broj, npr. 120 Gb).
class Racunar {
double taktProcesora;
double radnaMemorija;
int hardDisk;
}
Redosled u kojem se deklarišu atributi u okviru klase nije bitan. Atributima je moguće dodeliti i neku podrazumevanu, početnu vrednost odmah pri deklaraciji klase. To se radi na sledeći način:
tip_podatka nazivAtributa = vrednost;
Primer 7
Prepraviti klasu Računar iz prethodnog primera tako da početna vrednost za takt procesora bude
4.0 (GhZ), radna memorija iznosi 2.0 (Gb) a hard disk ima 120 (Gb).
class Racunar {
double taktProcesora = 4.0;double radnaMemorija = 2.0;int hardDisk = 120;
}
Zadaci
Zadatak 1
Napraviti klasu Televizor. Ova klasa bi trebalo da ima:
• Atribut jacinaTona koji je ceo broj i označava trenutnu jačinu tona na televizoru. Početna vrednost ovog atributa je 0 (ton je utišan do kraja).
• Atribut trenutniProgram koji označava broj programa koji je trenutno na televizoru (npr. uključen je program 5). Početna vrednost ovog atributa je 1.
• Atribut ukljucen koji označava da li je televizor uključen ili nije (ako je uključen ima vrednost TRUE, a inače FALSE). Smatra se da je na početku televizor isključen.

Rešenje:
class Televizor {
int jacinaTona = 0;int trenutniProgram = 1;boolean ukljucen = false;
}
Zadatak 2
Napraviti klasu Radio. Ova klasa bi trebalo da ima:
• Atribut fmFrekvencija koji označava trenutnu FM radio frekvenciju koju radio pušta (npr. 102.2 ili 87.5). Početna vrednost ovog polja je 87.5.
• Atribut amFrekvencija koji označava trenutnu AM radio frekvenciju koju radio pušta (npr. 567 ili 1500). Početna vrednost ovog parametra je 567.
• Atribut band koji ima vrednost 'A' (slovo A) ako radio pušta AM frekvenciju ili 'F' (slovo F) ako radio pušta FM frekvenciju. Početna vrednost ovog parametra je 'F'.

Rešenje:
class Radio {
double fmFrekvencija = 87.5;int amFrekvencija = 567;char band = 'F';
}
Zadatak 3
Napraviti klasu Student. Ova klasa bi trebalo da ima:
• Atribut ime. Početna vrednost ovog atributa je “nepoznato”
• Atribut prezime. Početna vrednost ovog atributa je “nepoznato”
• Atribut pol koji može imati vrednosti 'M' ili 'Z'.
• Atribut brojIndeksa (niz slova).
• Atribut prosecnaOcena.

Rešenje:
class Student {
String ime = "nepoznato";String prezime = "nepoznato";char pol;String brojIndeksa;double prosecnaOcena;
}
Zadatak 4
Napraviti klasu FudbalskaUtakmica. Ova klasa bi trebalo da ima:
• Atribut gostujuciTim koji predstavlja naziv fudbalskog tima koji gostuje.
• Atribut domaciTim koji predstavlja naziv fudbalskog tima koji je domacin utakmice.
• Atribut lokacija koji predstavlja naziv grada u kome se igra. Početna vrednost za ovaj atribut je “nepoznata”.
• Atribut brojGolovaGostiju.
• Atribut BrojGolovaDomacih.

Rešenje:
class FudbalskaUtakmica {
String gostujuciTim;String domaciTim;String lokacija = "nepoznata";int brojGolovaGostiju = 0;int brojGolovaDomacih = 0;
}
Objekti
Objekat predstavlja jedan konkretan primerak (instancu) neke klase. Prema tome, klasa može da se definiše kao skup objekata koji imaju iste osobine. Odnos klase i objekta je prikazan u sledećem primeru.
Primer 8
Automobil predstavlja klasu jer je to opšti nacrt nekih karakteristika i ponašanja koje svaki automobil ima. Međutim, “Aston Martin DB9” sa godinom proizvodnje 2008 i registracijom “BG123-456” predstavlja jedan konkretan primerak automobila tj. objekat klase automobil. Odnos klase i objekta je prikazan na sledećoj slici (Slika 3).

U Javi, objekti se deklarišu na sličan način kao i atributi klase. Prvo se navede naziv klase pa onda naziv konkretnog objekta. Na ovaj način se stvara promenljiva koja će da referencira konkretan objekat:
NazivKlase nazivobjekta;
Međutim, da bi objekat mogao da se koristi (da se pozivaju njegove metode, menjaju vrednosti atributa itd.), potrebno ga je inicijalizovati. Ako se objektu pokuša pristupiti bez inicijalizacije, Java javlja grešku. Inicijalizacija se vrši korišćenjem naredbe “new” na sledeći način:
nazivobjekta = new NazivKlase();
Šta se zapravo dešava kada se incijalizuje objekat? Naime, kada se deklariše objekat (promenljiva), samo se stvori pokazivač koji će da referencira objekat. Ali, kada se izvrši incijalizacija, tek se onda alocira deo memorije računara (deo RAM memorije) u kome će da bude objekat i poveže se sa pokazivačem - pokazivač tada sadrži adresu objekta u memoriji (Slika 4). Tek sada objekat može da
se koristi.

Slika 4: Inicijalizacija objekta
Bilo bi zanimljivo objasniti i kako se brišu objekti u Javi. Potpuno je normalna situacija da se u toku izvršavanja nekog ozbiljnijeg programa za kratko vreme stvori (inicijalizuje) na stotine ili hiljade objekata. Svaki od tih objekata zauzima neki deo memorije računara, a često se dešava da mnogi od njih uopšte više nisu potrebni, pa bi ih trebalo obrisati tj. izbaciti iz memorije. Ako se ovo ne uradi, može doći do preopterećenja memorije. Java ima mehanizam koji se zove “garbage collection” (sakupljanje smeća) koji vrši automatsko brisanje nepotrebnih objekata. Objekat je nepotreban ako na njega ne pokazuje ni jedna promenljiva niti pokazivač. Drugim rečima, dovoljno je promenljivoj (pokazivaču) dodeliti null vrednost ili inicijalizovati novi objekat preko iste promenljive pa da stari objekat bude automatski izbrisan posle nekog vremena (Slika 5).

Slika 5: Brisanje objekata u Javi ("garbage collection")
Sada je potrebno dati jedno objašnjenje: nijedan Java primer niti zadatak koji je prikazan do sad ne može da se pokrene (izvrši). Da bi neki Java program mogao da se pokrene, potrebno je da ima tzv. “main” metodu. Deklaracija ove metode je uvek ista i piše se u okviru tela klase na sledeći način:
public static void main (String[] args){
//naredbe...
}
Primer 9
Napraviti klasu Motocikl koja ima:
● atribut markaIModel.
● Atribut kubikaza (ceo broj). Napraviti klasu Test koja sadrži main metodu i, u okviru nje, pravi dva objekta klase Motocikl.
class Motocikl { String markaIModel;
int kubikaza; } class Test {
public static void main(String[] args) {
Motocikl m1;Motocikl m2; m1 = new Motocikl();
m2 = new Motocikl(); }
}
Prava slika o objektima se stiče tek kada se vidi kako se menjaju vrednosti atributa. Pristup atributima se vrši tako što se napiše naziv objekta, pa tačka, pa naziv atributa:
nazivobjekta.nazivAtributa
Primer 10
Iskoristiti klasu Motocikl iz prethodnog primera i prepraviti klasu Test koja sadrži main metodu tako da pravi dva objekta klase Motocikl. Prvi bi trebalo da bude “Suzuki GS” od 500 kubika (dodeliti atributima prvog objekta ove vrednosti) a drugi “Yamaha R6” od 600 kubika (dodeliti atributima drugog objekta ove vrednosti).
//Kod za klasu Motocikl ostaje isti
class Test { public static void main(String[] args) {
Motocikl m1;Motocikl m2; m1 = new Motocikl();
m2 = new Motocikl();
m1.markaIModel = "Suzuki GS";m1.kubikaza = 500; m2.markaIModel = "Yamaha R6";
m2.kubikaza = 600;
}
}
U Javi se komande izvršavaju u redosledu u kojem su napisane (“odozgo na dole”). Ako se, na primer, u okviru main metode prvo napišu komande za pristup atributima, a tek posle sledi komanda za inicijalizaciju objekta, Java će da prijavi grešku.
Prethodna dva primera sadrže main metodu pa mogu da se izvrše. Međutim, rezultat njihovog izvršavanja neće da bude ništa vidljivo -objekti će da se inicijalizuju, dodeliće se vrednosti atributima, ali ništa neće da se ispiše na ekranu. Komanda za ispisivanje na ekranu (u Javi se to zove “standardni izlaz”) je sledeća:
System.out.println( ...neki tekst i/ili vrednost... );
Rezultat izvršavanja ove komande je ispis (na ekranu) sadržaja koji se nalazi između zagrada i prelazak u novi red. Taj sadržaj može da bude neki tekst, vrednost nekog atributa (ili promenljive) ili kombinacija ova dva. U sledećem primeru je prikazano šta ova komanda tačno radi i kako se koristi.
Primer 11
Sledi nekoliko primera upotrebe komande “println” za ispis na ekranu i rezultata koji će biti prikazani:
System.out.println("Lep dan danas");
//Ispisace se na ekranu://Lep dan danas
int broj;broj = 12;System.out.println(broj);
//Ispisace se na ekranu://12
System.out.println("Ova recenica ide u prvi red");System.out.println("Ova recenica ide u drugi red");
//Ispisace se na ekranu://Ova recenica ide u prvi red//Ova recenica ide u drugi red
int temperatura;temperatura = 21;System.out.println("Temperatura je: "+temperatura);
//Uloga znaka plus (+) je da omoguci nadovezivanje vrednosti//temperature na poruku//Ispisace se na ekranu://Temperatura je: 21
Primer 12
Iskoristiti klasu Motocikl iz prethodnih primera i klasu Test koja sadrži main metodu i pravi dva objekta klase Motocikl -“Suzuki GS” od 500 kubika i “Yamaha R6” od 600 kubika. Prepraviti main metodu klase Test tako da ispisuje vrednosti atributa oba objekta na ekranu.
//Kod za klasu Motocikl ostaje isti
class Test {
public static void main(String[] args) {
Motocikl m1;Motocikl m2;
m1 = new Motocikl();m2 = new Motocikl();
m1.markaIModel = "Suzuki GS";m1.kubikaza = 500;
m2.markaIModel = "Yamaha R6";m2.kubikaza = 600;
System.out.println(m1.markaIModel);System.out.println(m1.kubikaza);
System.out.println(m2.markaIModel);System.out.println(m2.kubikaza);
//Ispisace se na ekranu://Suzuki GS//500//Yamaha R6//600
}
}
Jedna od varijanti naredbe za ispis na ekranu je i “print” naredba. Jedina razlika u odnosu na “println” (“print-line”) naredbu je ta što se posle ispisa teksta ne prelazi u sledeći red već se i dalje ispisuje u postojećem redu.
System.out.print( ...neki tekst i/ili vrednost... );
Primer 13
Sledi nekoliko primera upotrebe komande “print” za ispis na ekranu i rezultata koji će biti prikazani:
System.out.print("Rec1");System.out.print("Rec2");
//Ispisace se na ekranu://Rec1Rec2
int temperatura;temperatura = 21;System.out.print("Temperatura je: "+temperatura+" stepen ");System.out.print("u Beogradu");
//Ispisace se na ekranu://Temperatura je 21 stepen u Beogradu
Zadaci
Zadatak 1
Napraviti klasu Grad. Ova klasa bi trebalo da ima:
• Atribut naziv. Početna vrednost ovog atributa je “nepoznat”
• Atribut brojStanovnika. Početna vrednost ovog atributa je 0.

Napraviti klasu TestGrad koja ima main metodu i u okviru nje kreira tri objekta klase Grad: Beograd (1.800.000 stanovnika), Njujork (20.000.000 stanovnika) i Vankuver (nepoznat broj stanovnika -ne dodeljivati nikakvu vrednost). Potrebno je ispisati vrednosti atributa svih objekata na ekranu.
Rešenje:
class Grad {
String naziv = "nepoznat";int brojStanovnika = 0;
}
class TestGrad {
public static void main(String[] args) {
Grad g1 = new Grad();Grad g2 = new Grad();Grad g3 = new Grad();
g1.naziv = "Beograd";g1.brojStanovnika = 1600000;
g2.naziv = "Njujork";g2.brojStanovnika = 20000000;
g3.naziv = "Vankuver";
System.out.println(g1.naziv);System.out.println(g1.brojStanovnika);
System.out.println(g2.naziv);System.out.println(g2.brojStanovnika);
System.out.println(g3.naziv);System.out.println(g3.brojStanovnika);
//Ispisace se na ekranu://Beograd//1600000
//Njujork//20000000//Vankuver//0
}
}
Zadatak 2
Napraviti klasu Osoba. Ova klasa bi trebalo da ima:
• Atribut imePrezime. Početna vrednost ovog atributa je “nepoznato”
• Atribut tezina. Tezina može imati vrednosti 56.5 kg, 123.1 kg itd.

Napraviti klasu TestOsoba koja ima main metodu i u okviru nje kreira dva objekta klase Osoba: Pera Perić (81.6kg) i Mika Mikic (100.0kg). Prvo, potrebno je ispisati vrednosti atributa ovih objekata na ekranu. Posle, potrebno ih je ispisati ponovo ali tako da se uz ispis vrednosti atributa daje i neki propratni tekst, npr. “Ime osobe je: ” i “Tezina ove osobe je:”. Podatke svakog atributa bi trebalo ispisati u posebnom redu. Konačno, potrebno je ispisati vrednosti atributa oba objekta ali tako da se vrednosti svih atributa jednog objekta ispisuju u istom redu u formatu “Ime: #### Tezina: ####”.
Rešenje:
class Osoba {
String imePrezime = "nepoznato";double tezina;
}
class TestOsoba {
public static void main(String[] args) {
Osoba o1 = new Osoba();Osoba o2 = new Osoba();
o1.imePrezime = "Pera Peric";o1.tezina = 81.6;
o2.imePrezime = "Mika Mikic";o2.tezina = 100.0;
System.out.println(o1.imePrezime);System.out.println(o1.tezina);
System.out.println(o2.imePrezime);System.out.println(o2.tezina);
//Ispisace se na ekranu://Pera Peric//81.6//Mika Mikic//100.0
System.out.println("Ime osobe je: "+o1.imePrezime);System.out.println("Tezina ove osobe je: "+o1.tezina);
System.out.println("Ime osobe je: "+o2.imePrezime);System.out.println("Tezina ove osobe je: "+o2.tezina);
//Ispisace se na ekranu:

//Ime osobe je: Pera Peric//Tezina ove osobe je: 81.6//Ime osobe je: Mika Mikic//Tezina ove osobe je: 100.0
System.out.println("Ime: "+o1.imePrezime+" Tezina: "+o1.tezina);
System.out.println("Ime: "+o2.imePrezime+" Tezina: "+o2.tezina);
//Ispisace se na ekranu:
//Ime: Pera Peric Tezina: 81.6
//Ime: Mika Mikic Tezina: 100.0
}
}
Metode

Već je rečeno da klase mogu imati i određena ponašanja i da se ta ponašanja izražavaju u formi metoda. Na primer, metode klase Automobil, mogu biti: upali, ugasi, kreni, stani itd.
Deklaracija metoda u Javi se vrši u okviru tela klase i to na sledeći način:
tip_povratne_vrednosti nazivMetode( ...ulazni parametri... ){
//Telo metode
}
Tip povratne vrednosti metode, njen naziv i ulazni parametri čine zaglavlje metode, dok sav kod napisan između vitičastih zagrada čini telo metode. Telo metode počinje otvorenom vitičastom zagradom a završava se zatvorenom vitičastom zagradom.
Metode predstavljaju određeno ponašanje koje klasa ispoljava. Pored toga što nešto radi, metoda može i da vraća neku vrednost kao rezultat izvršavanja (povratna vrednost metode). Na primer, metoda “saberi” klase “Digitron”, može da vrati broj koji predstavlja rezultat sabiranja. Sa druge strane, neke metode nemaju povratnu vrednost. Primer jedne takve metode bi bila metoda “ispišiIme” klase “Osoba” koja na ekranu samo ispisuje ime osobe. Kada metoda ne vraća nikakvu povratnu vrednost, tip povratne vrednosti je “void”, a kada vraća tip povratne vrednosti može biti bilo koji prost ili složen tip podataka (int, double, char, boolean, String...). Metoda može da ima samo jednu povratnu vrednost.
Prema nepisanom pravilu, nazivi metoda se pišu na isti način kao nazivi atributa (prvo slovo malo, ako ima više reči ostala prva slova velika): “saberi”, “oduzmi”, “ispišiIme”, “konvertujValutu”...
Konačno, metode mogu da imaju ulazne parametre. Ulazni parametri predstavljaju one vrednosti koje je potrebno proslediti metodi da bi ona mogla da se pravilno izvrši. Na primer, metoda “saberi” klase “Digitron” može da, kao ulazne parametre, ima dva broja koja je potrebno sabrati. Ako metoda nema ulazne parametre, prostor između zagrada se ostavlja prazan (piše se samo “()”).Ulazni parametri će detaljno biti objašnjeni u daljem tekstu.
Primer 14
Napraviti klasu Televizor. Ova klasa bi trebalo da ima:
• Atribut jacinaTona koji je ceo broj i označava trenutnu jačinu tona na televizoru. Početna vrednost ovog atributa je 0 (ton je utišan do kraja).
• Atribut trenutniProgram koji označava broj programa koji je trenutno na televizoru (npr. uključen je program 5). Početna vrednost ovog atributa je 1.
• Atribut ukljucen koji označava da li je televizor uključen ili nije (ako je uključen ima vrednost TRUE, a inače FALSE). Smatra se da je na početku televizor isključen.
• Metodu uključi koja uključuje televizor (postavlja vrednost atributa ukljucen na TRUE).
• Metodu isključi koja isključuje televizor (postavlja vrednost atributa ukljucen na FALSE).

class Televizor {
int jacinaTona = 0;int trenutniProgram = 1;boolean ukljucen = false;
void ukljuci(){ukljucen = true;}
void iskljuci(){ukljucen = false;}}
U ovom primeru, klasa Televizor ima samo dve metode -ukljuci i iskljuci. Metoda ukljuci nema povratnu vrednost jer samo menja vrednost atributa ukljucen. Prema tome, tip povratne vrednosti ove metode je void. Ova metoda nema ni ulazne parametre jer nisu potrebni (uvek se vrednost atributa postavlja na true) pa je prostor između običnih zagrada prazan. Telo metode ukljuci sadrži samo jednu komandu kojom se atributu ukljucen dodeljuje vrednost true. Sve navedeno važi i za metodu iskljuci.
Iz prethodnog primera se može primetiti i jedno pravilo: atributima klase se iz tela bilo koje metode te iste klase pristupa samo preko naziva. Drugim rečima, nije potrebno navoditi naziv objekta pa tačka pa naziv atributa kao kada se pristupa iz main metode.
Primer 15
Dodati u klasu Televizor i sledeće metode:
• Metodu pojacajTon koja povecava vrednost atributa jacinaTona za jedan.
• Metodu smanjiTon koja smanjuje vrednost atributa jacinaTona za jedan.
• Metodu iskljuciTon koja potpuno utišava ton (smanjuje vrednost jacine tona na 0).

Posle izmene, kod klase izgleda ovako:
class Televizor {
int jacinaTona = 0;
int trenutniProgram = 1;boolean ukljucen = false;
void ukljuci(){ukljucen = true;}
void iskljuci(){ukljucen = false;}
void pojacajTon(){jacinaTona = jacinaTona + 1;}
void smanjiTon(){jacinaTona = jacinaTona - 1;}
void iskljuciTon(){jacinaTona = 0;}}
Metode pojacajTon, smanjiTon i iskljuciTon nemaju povratnu vrednost (ništa ne vraćaju kao rezultat), pa je tip povratne vrednosti void. Ove metode nemaju ulazne parametre.
Metode koje su navedene u dosadašnjim primerima ne vraćaju nikakvu vrednost kao rezultat. Međutim, postoje situacije u kojima je to potrebno uraditi -nekada je potrebno vratiti trenutnu vrednost atributa nekog objekta ili vratiti rezultat neke računske operacije. U tim slučajevima, se kao tip povratne vrednosti umesto void piše tip vrednosti podatka koji će biti vraćen -ako metoda vraća ceo broj -piše se int, ako metoda vraća realan broj -piše se double, ako vraća niz slova -piše se String itd. Pored toga, u okviru samog tela metode se mora napisati komanda “return” da označi vrednost koju je potrebno vratiti. Ovde je potrebno dati i jednu napomenu: u trenutku kada se komanda “return” izvrši, izvršavanje metode se prekida. Drugim rečima, bilo koja komanda napisana “posle” komande “return” u okviru tela metode se nikad neće izvršiti.
Primer 16
Dodati u klasu Televizor i sledeće metode:
• Metodu promeniProgramNavise koja povećava vrednost atributa trenutniProgram za jedan.
• Metodu promeniProgramNanize koja smanjuje vrednost atributa trenutniProgram za jedan.
• Metodu vratiTrenutniProgram koja vraća vrednost atributa trenutniProgram.
• Metodu vratiJacinuTona koja vraća trenutnu vrednost atributa jacinaTona.
• Metodu daLiJeUkljucen koja vraća trenutnu vrednost atributa ukljucen.
• Metodu ispisiParametre koja ispisuje na ekranu trenutne vrednosti svih atributa televizora uz odgovarajuću poruku.

Posle svih izmena, kod klase izgleda ovako:
class Televizor {
int jacinaTona = 0;int trenutniProgram = 1;boolean ukljucen = false;
void ukljuci(){ukljucen = true;}
void iskljuci(){ukljucen = false;}
void pojacajTon(){jacinaTona = jacinaTona + 1;}
void smanjiTon(){jacinaTona = jacinaTona - 1;}
void iskljuciTon(){jacinaTona = 0;}
void promeniProgramNavise(){trenutniProgram = trenutniProgram + 1;}
void promeniProgramNanize(){trenutniProgram = trenutniProgram - 1;}
int vratiTrenutniProgram(){return trenutniProgram;}
int vratiJacinuTona(){return jacinaTona;}
boolean daLiJeUkljucen(){return ukljucen;}
void ispisiParametre(){System.out.println("Jacina tona je "+jacinaTona);System.out.println("Trenutni program je "+trenutniProgram);System.out.println("Televizor je ukljucen "+ukljucen);
}
}
Metode promeniProgramNavise i promeniProgramNanize nemaju nikakve povratne vrednosti. Međutim, metode vratiTrenutniProgram, vratiJacinuTona i daLiJeUkljucen imaju. Metoda vratiTrenutniProgram bi trebalo da vrati trenutnu vrednost atributa program. Praktično gledano, to bi značilo da vrati broj programa koji se trenutno prikazuje na televizoru (na primer broj 5). Pošto je u pitanju ceo broj (atribut trenutniProgram je tipa int), i povratna vrednost metode će biti int. Telo metode vratiTrenutniProgram sadrži samo komandu return kojom se označava vrednost koju je potrebno vratiti. Primera radi, recimo da je u okviru tela ove metode napisana komanda:
return 2;
Metoda bi u ovom slučaju uvek vraćala broj 2. Metoda vratiJacinuTona je veoma slična prethodnoj metodi i dovoljno je reći da i ona vraća int vrednost. Ali, metoda daLiJeUkljucen vraća vrednost atributa ukljucen, pa je tip povratne vrednosti boolean.
Konačno, metoda ispisiParametre samo vrši ispis vrednosti svih atributa na ekranu uz odgovarajuću poruku. Tip povratne vrednosti je void jer ispisivanje na ekranu nije isto što i vraćanje povratnih vrednosti.
Postavlja se pitanje, a kako se metode pozivaju? Odgovor je sličan kao i za atribute. Da bi metode mogle da se pozovu, potrebno je napraviti objekat, pa tek onda pozvati neku njegovu metodu preko naziva klase i naziva metode. Razlika u odnosu na poziv atributa je u tome što se pri pozivu metode posle naziva metode obavezno moraju napisati i zagrade (čak iako metoda nema ulazne parametre):
nazivobjekta.nazivMetode();
Ako metoda ima povratnu vrednost, prvo je potrebno deklarisati promenljivu koja će da primi povratnu vrednost metode, pa tek onda pozvati metodu. Tip promenljive mora da bude isti kao tip povratne vrednosti metode:
tip_promenljive naziv_promenljive;
naziv_promenljive = nazivobjekta.nazivMetode();
Pre nego što se pređe na konkretan primer, potrebno je razjasniti šta je promenljiva i koja je razlika između promenljive i atributa. Promenljiva predstavlja mesto u memoriji računara u koje se može smestiti neka vrednost. Tip promenljive određuje tip vrednosti koja se može uneti u promenljivu. Na primer, promenljiva tipa int predstavlja neki deo memorije računara u koji se može smestiti neka celobrojna vrednost. Atributi su promenljive koje direktno pripadaju klasi tj. deklarišu se u okviru tela klase. Sve ostale promenljive koje se deklarišu u okviru tela metoda uključujući i ulazne parametre se nazivaju samo promenljive.
Primer 17
Iskoristiti klasu Televizor iz prethodnog primera. Napraviti klasu TestTelevizor koja kreira jedan objekat klase Televizor i poziva neke od njegovih metoda. Posle svakog poziva metode, pozvati metodu ispisiParametre i uočiti promene u vrednostima atributa.
class TestTelevizor {
public static void main (String[] args){
Televizor t = new Televizor();boolean uklj;int prog;
t.ispisiParametre();
//Ispisace se na ekranu//Jacina tona je 0//Trenutni program je 1//Televizor je ukljucen false
t.ukljuci();t.ispisiParametre();
//Ispisace se na ekranu//Jacina tona je 0//Trenutni program je 1//Televizor je ukljucen true
t.pojacajTon();t.ispisiParametre();
//Ispisace se na ekranu//Jacina tona je 1//Trenutni program je 1//Televizor je ukljucen true
t.promeniProgramNavise();t.ispisiParametre();
//Ispisace se na ekranu//Jacina tona je 1//Trenutni program je 2//Televizor je ukljucen true
uklj = t.daLiJeUkljucen();System.out.println("Televizor je ukljucen: "+uklj);
//Ispisace se na ekranu//Televizor je ukljucen: true
prog = t.vratiTrenutniProgram();System.out.println("Na televizoru ide program "+prog);
//Ispisace se na ekranu//Na televizoru ide program 2
t.ispisiParametre();
//Ispisace se na ekranu//Jacina tona je 1//Trenutni program je 2
//Televizor je ukljucen true
}
}
Kada se poziva neka metoda koja nema povratnu vrednost (na primer metoda ispisiParametre), poziv je sličan kao za atribute objekta. Jedina razlika je u tome što se posle naziva metode pišu i zagrade u kojima se navode konkretne vrednosti za ulazne parametre. Ako metoda nema parametre, prostor između zagrada ostaje prazan (“()”):
t.ispisiParametre();
Poziv metode koja ima neku povratnu vrednost je malo drugačiji. To je slučaj sa metodama daLiJeUkljucen i vratiTrenutniProgram. U primeru se vidi da je deklarisana promenljiva “uklj” koja je tipa boolean (isto kao tip povratne vrednosti metode daLiJeUkljucen) i koja prima povratnu vrednost metode:
uklj = t.daLiJeUkljucen();
Kada ova promenljiva dobije povratnu vrednost metode, ta povratna vrednost se može koristiti za neka dalja izračunavanja, može se ispisati na ekranu itd.
U mnogim dosadašnjim primerima i zadacima je korišćen jedan operator. U pitanju je operator za dodelu vrednosti. Formalni opis i par primera u vezi sa ovim operatorom su dati u sledećoj tabeli.
Operator za dodelu vrednosti
Operator Opis Primeri
= Operator za dodelu vrednosti a = 2; m1.kubikaza = 750; osoba1.ime = “Pera”; logickiUslov = true; ind = obj.metoda1(); objekat1 = obekat2;
U suštini, ovaj operator omogućava da se nekoj promenljivoj, atributu ili objektu dodeli neka vrednost. Uvek se onome što se nalazi na levoj strani znaka jednakosti dodeljuje ono što se nalazi na desnoj strani znaka jednakosti. Na desnoj strani znaka jednakosti može da bude neka konkretna vrednost, promenljiva, atribut, neki izraz, poziv metode ili objekat. Jedino je bitno da ono što je sa leve strane znaka jednakosti bude istog tipa kao i ono sa desne strane (npr. nije moguće dodeliti vrednost 23.44 promenljivoj int tipa).
Kada se operator za dodeljivanje vrednosti koristi u kombinaciji sa atributima, promenljivim i metodama, stvar je relativno jednostavna. Levoj strani se uvek dodeljuje vrednost sa desne strane. Međutim, ako se sa leve strane nalazi objekat i pokušava mu se dodeliti drugi objekat, izvršiće se dodeljivanje adrese desnog objekta levom objektu, pa će oba pokazivača (promenljive) pokazivati na istu memorijsku lokaciju (Slika 6). Memorijska lokacija na koju više ne pokazuje nijedan pokazivač će ubrzo da bude oslobođenja preko “garbage collection” mehanizma.
Dodatni efekat koji se u ovom slučaju pojavljuje je taj da se sada preko oba pokazivača može pristupiti istoj memorijskoj lokaciji (u kojoj je objekat). Ovo se može videti i na jednom praktičnom primeru.

Slika 6: Dodeljivanje vrednosti objekata
Primer 18
Napisati klasu Proizvod koja ima samo jedan atribut -naziv i jednu metodu “ispisi” koja ispisuje vrednost ovog atributa na ekranu. Napraviti klasu TestProizvod koja kreira dva objekta klase Proizvod sa nazivima “automobil” i “traktor”. Ispisati vrednosti atributa oba proizvoda. Dodeliti drugom objektu adresu prvog objekta. Ponovo ispisati vrednosti atributa oba proizvoda. Izmeniti naziv drugog proizvoda u “kombajn” i još jednom ispisati vrednosti atributa oba proizvoda.
class Proizvod {
String naziv;
void ispisiSve(){System.out.println("Naziv je: "+naziv);}
}
class TestProizvod {
public static void main(String[] args) {
Proizvod p1 = new Proizvod();Proizvod p2 = new Proizvod();
p1.naziv = "automobil";p2.naziv = "traktor";
p1.ispisiSve();p2.ispisiSve();
//Ispisace se na ekranu//Naziv je: automobil//Naziv je: traktor
p2=p1;
p1.ispisiSve();p2.ispisiSve();
//Ispisace se na ekranu//Naziv je: automobil//Naziv je: automobil
p2.naziv="kombajn";
p1.ispisiSve();p2.ispisiSve();
//Ispisace se na ekranu//Naziv je: kombajn//Naziv je: kombajn
}
}
U trenutku kada se objektu p2 (pokazivaču) dodeli objekat p1, oba pokazivača se referenciraju na isti deo memorije. Od tada, sve promene koje se urade nad objektom p2 će važiti i za objekat p1 i obrnuto.
Ulazni parametri metode predstavljaju neke vrednosti koje je potrebno proslediti metodi da bi ona mogla pravilno da se izvrši. Metoda može da ima nula, jedan ili više ulaznih parametara, a parametri se deklarišu u okviru zaglavlja metode na sličan način kao i promenljive (prvo tip vrednosti, pa naziv parametra). Ako metoda ima više parametara, oni se odvajaju zarezom:
tip_povratne_vrednosti nazivMetode(tip_parametra naziv_par){
//Telo metode
}
Pozivanje metoda koje imaju ulazne parametre se vrši na taj način što se između zagrada za ulazne parametre navedu neke konkretne vrednosti ili promenljive. U okviru poziva ovakve metode mora da se ispoštuje broj parametara i njihov redosled. Drugim rečima, ako metoda prima dva ulazna parametra nekog tipa, svaki poziv te metode mora da bude takav da se metodi zaista i proslede tačno dva parametra tog tipa.
Primer 19
Napraviti klasu AutomatNovca. Ova klasa bi trebalo da ima:
• atribut stanje koji predstavlja trenutni iznos novca u automatu (realan broj). Početna vrednost ovog atributa je 5200.0 dinara.
• Metodu podigniIznos koja prima kao ulazni parametar iznos novca koji korisnik želi da podigne (realan broj npr. 550.5) i smanjuje vrednost atributa stanje za taj iznos.
• Metodu uloziIznos koja prima kao ulazni parametar iznos novca koji korisnik želi da uloži (realan broj) i povećava vrednost atributa stanje za taj iznos.
• Metodu vratiStanje koja vraća trenutni iznos novca u automatu (vrednost atributa stanje).
• Metodu ispisiStanje koja na ekranu ispisuje koja je trenutna količina novca u automatu (vrednost atributa stanje).

Napraviti klasu ProveraAutomataNovca koja kreira dva objekta klase AutomatNovca. U prvi automat novca je potrebno uložiti 1002.03 dinara i ispisati stanje pre i posle ulaganja. Potrebno je i podići 234.55 dinara iz drugog automata i ispisati stanje automata pre i posle ulaganja.
class AutomatNovca {
double stanje=5200.0;
void podigniIznos (double iznos){stanje = stanje - iznos;}
void uloziIznos (double iznos){stanje = stanje + iznos;}
double vratiStanje (){return stanje;}
void ispisiStanje (){System.out.println("Trenutni iznos u automatu je: "+stanje);}
}
class ProveraAutomataNovca {
public static void main (String[] args){
AutomatNovca a1 = new AutomatNovca();AutomatNovca a2 = new AutomatNovca();
a1.ispisiStanje();a1.uloziIznos(1002.03);a1.ispisiStanje();
//Ispisace se na ekranu//Trenutni iznos u automatu je: 5200.0//Trenutni iznos u automatu je: 6202.03
a2.ispisiStanje();a2.podigniIznos(234.55);a2.ispisiStanje();
//Ispisace se na ekranu//Trenutni iznos u automatu je: 5200.0//Trenutni iznos u automatu je: 4965.45
}
}
Metode podigniIznos i uloziIznos imaju po jedan ulazni parametar. U oba slučaja, u pitanju su realni brojevi, pa je tip ulaznog parametra double. Naziv ulaznog parametra je uvek proizvoljan, samo je bitno obratiti pažnju na to da se taj naziv koristi u okviru tela metode kada se želi upotrebiti ulazni parametar. Ove dve metode nemaju povratnu vrednost jer samo menjaju vrednost atributa stanje.
U programskom jeziku Java je moguće pisati i razne aritmetičke izraze. Neki od prethodnih primera već sadrže primere korišćenja operatora za sabiranje i oduzimanje, ali se kompletna lista aritmetičkih operatora nalazi u sledećoj tabeli.
Aritmetički operatori
Operator Opis
+ Sabiranje
-Oduzimanje
* Množenje
/ Celobrojno deljenje (DIV) (celi brojevi)
/ Deljenje (realni brojevi)
% Ostatak pri celobrojnom deljenju (MOD)
++ Uvećanje za 1 (inkrementacija)
--Umanjenje za 1 (dekrementacija)
Primeri
a + b 12 + 5 m1.kubikaza + 300
a - b 12 - 5 m1.kubikaza - 300
a * b 12 * 5 m1.kubikaza * 300
2 / 12 a / b
a / 12.0
5.0 / 123.44
5 % 2 a % 10
a++ m1.kubikaza++
a-¬m1.kubikaza--
Operatori za sabiranje, množenje i oduzimanje se koriste na sličan način kao što bi se koristili u matematici. Ovi operatori mogu da se koriste i sa celobrojnim i realnim vrednostima i promenljivim. Java omogućava i korišćenje zagrada pa su uobičajeni i izrazi kao:
b * 2 * ((234.55 + 20) - (a * 3.4))
Operatori za inkrementaciju i dekrementaciju uvećavaju tj. smanjuju vrednost neke celobrojne promenljive za jedan. Uvedeni su radi pogodnosti, pa su sledeća dva para izraza potpuno ekvivalentni:
a = a + 1;b = b - 1;
//Je isto sto i...
a++;b--;
Operatori deljenja su u Javi malo složeniji nego što se na prvi pogled može učiniti. Prvo, i operator za deljenje realnih brojeva i operator za celobrojno deljenje se označavaju istim znakom -kosom crtom (“/”). Deljenje realnih brojeva je “normalno deljenje” (na primer 10.0 / 3 = 3.33333). Celobrojno deljenje, sa druge strane, predstavlja deljenje bez ostatka ( 10 / 3 = 3). Pri ovom deljenju se odseca deo koji se nalazi iza zareza i kao rezultat se vraća ceo broj. Sa obzirom na to da se oba operatora isto pišu, postavlja se pitanje kako Java razlikuje kada se misli na jedan a kada na drugi operator. Odgovor je veoma jednostavan -vrši se provera da li su brojevi (promenljive) koji se dele celi ili realni i primenjuje se odgovarajući operator. Ako su oba broja cela, primenjuje se celobrojno deljenje. Ako je makar jedan od brojeva realan, primenjuje se deljenje realnih brojeva.
Operator za izračunavanje ostatka pri celobrojnom deljenju se može koristiti isključivo sa celobrojnim vrednostima. Rezultat koji se dobije predstavlja ceo broj koji ostaje kao višak pri deljenju dva cela broja.
Operatore deljenja i ostatka pri deljenju je najbolje objasniti preko nekoliko jednostavnih primera.
Primer 20
Sledeći izrazi će u Javi biti protumačeni kao izrazi deljenja realnih brojeva:
double x = 3.5;double y = 7;double z;
z = y / x;
//Rezultat je 2.0//I x i y su realni brojevi.
z = y / 7;
//Rezultat je 1.0//Dovoljno je da je jedan od bojeva realan - y
z = 35.0 / 7;
//Rezultat je 5.0//Dovoljno je da je jedan od bojeva realan - 35.0
z = 35 / 7.0;
//Rezultat je 5.0//Dovoljno je da je jedan od bojeva realan - 7.0
Međutim, ovi izrazi će biti protumačeni kao celobrojno deljenje bez ostatka:
int a = 2;int b = 12;int c;double r;
c = b / a;
//Rezultat je 6 (ne 6.0 nego samo 6)//I a i b su celobrojne promenljive
c = b / 4;
//Rezultat je 3//b je celobrojna promenljiva
c = 123 / 12;
//Rezultat je 10 (odseca se deo iza zareza)
//I 123 i 12 su celi brojevi
r = 123 / 12;
//Rezultat je 10.0 (rezultat 10 se pretvara u realan broj 10.0)//I 123 i 12 su celi brojevi pa je pozvano celobrojno deljenje
Kao što se iz poslednjeg primera vidi, moguća je situacija i da se zbog nepažnje, pri deljenju dobiju neki neočekivani rezultati. Uzrok je uvek to što se, zbog pogrešno napisanog izraza, pozove operator za deljenje celih brojeva umesto operatora za deljenje realnih brojeva. Da bi prethodni izraz bio protumačen kao deljenje realnih brojeva, potrebno je napisati ga na jedan od sledećih načina:
r = 123.0 / 12;
r = 123.0 / 12.0;
r = 123 / 12.0;
//Rezultat je 10.25
//Bitno je da je makar jedan od brojeva realan
Evo i nekoliko primera korišćenja operatora za izračunavanje ostatka pri celobrojnom deljenju:
c = 5 % 2;
//Rezultat je 1 (jer je 5 = 2*2 + 1)
c = 10 % 2;
//Rezultat je 0 (jer je 10 = 5*2 i nema ostatka)
c = 14 % 4;
//Rezultat je 2 (jer je 14 = 3*4 + 2)
c = 55 % 5;
//Rezultat je 0 (jer je 55 = 11*5 i nema ostatka)
Ovaj operator može da se koristi da se proveri da li je neki broj paran jer će ostatak pri deljenju sa brojem 2 uvek biti nula ako jeste paran a 1 ako nije paran. Ovako se može proveriti i deljivost sa nekim drugim brojevima (ostatak je nula ako je broj deljiv a ima neku drugu vrednost ako nije).
Da bi se u potpunosti shvatio način funkcionisanja metoda, potrebno je uvesti i objasniti pojmove vidljivosti promenljivih i načina prenosa ulaznih parametara.
Svi ulazni parametri metode i promenljive koje se deklarišu u okviru tela metode su “vidljivi” (mogu se pozvati) isključivo u okviru tela te metode i nigde druge. Svi atributi klase su uvek vidljivi u okviru tela metoda te klase.
Primer 21
Neka klasa Kalkulator ima dve metode -saberi i obimKruga. Prva metoda dobija dva cela broja kao ulazne parametre i vraća rezultat sabiranja, dok druga prima poluprečnik kruga kao ulazni parametar i vraća obim kruga kao rezultat. Klasa ima i atribut pi koji predstavlja vrednost odgovarajuće matematičke konstante.
class Kalkulator {
double pi = 3.14;
int saberi(int a, int b){int rezultat;rezultat = a + b;return rezultat;
}
double obimKruga(double poluprecnik){double rezultat;rezultat = 2* poluprecnik * pi;return rezultat;
}
}
Pi je atribut klase Kalkulator, pa se bez problema može pozvati i koristiti u okviru tela bilo koje metode klase Kalkulator (koristi se u okviru tela metode obimKruga). Promenljive a i b su, sa druge strane, ulazni parametri prve metode. To znači da se oni mogu koristiti i pozivati isključivo u okviru tela ove metode. Ako bi se pokušalo sa pozivanjem promenljivih a i b iz tela metode obimKruga, javila bi se greška. Isto važi i za ulazni parametar poluprecnik -“vidljiv” je samo u okviru tela metode obimKruga i nigde više.
Površnim pregledanjem koda bi se moglo zaključiti da u kodu postoji konflikt jer se deklarišu dve promenljive sa nazivom rezultat -jedna u okviru tela prve a druga u okviru tela druge metode. To, međutim, nije tako. U Javi se ove dve promenljive posmatraju kao potpuno različite jer promenljiva rezultat iz metode saberi ima vidljivost samo u okviru tela metode saberi, dok promenljiva rezultat iz metode obimKruga ima vidljivost samo u okviru tela metode obimKruga.
Konflikt u “vidljivosti” parametara i atributa se može javiti ako se u okviru tela metode koristi ulazni parametar ili promenljiva koji imaju isti naziv kao i neki atribut klase. U tom slučaju se koristi ključna reč “this” da izdvoji atribut u odnosu na druge promenljive. Ova ključna reč je u stvari pokazivač objekta na samog sebe.
Primer 22
Neka klasa Osoba ima atribut ime i metodu unesiIme koja kao ulazni parametar prima neko ime i atributu dodeljuje tu vrednost. Neka se ulazni parametar ove metode takođe zove “ime”
class Osoba {
String ime;
void unesiIme(String ime){ime = ime;}
}
Prvo što se može primetiti je da je komanda dodeljivanja vrednosti atributu ime veoma nejasna. Šta je atribut a šta ulazni parametar? I atribut se naziva “ime” a i ulazni parametar. Prema tome, koji je efekat izvršavanja naredbe:
ime = ime;
Odgovor je u tome da će Java da protumači obe strane kao ulazni parametar, tako da se dodeljivanje vrednosti atributu ime uopšte neće ni desiti. Da bi metoda radila ono što je potrebno, koristi se ključna reč “this” da označi atribut. Posle prepravki, metoda bi trebalo da izgleda ovako:
void unesiIme(String ime){this.ime = ime;}
Izraz sa leve strane znaka jednakosti se odnosi na atribut ime, dok se izraz sa desne strane znaka jednakosti odnosi na ulazni parametar ime.
Ulazni parametri metoda mogu biti prosti tipovi podataka (int, double, boolean, char) ali i složeni tipovi (klase). Drugim rečima, metodi se kao parametar može proslediti i neki objekat. Pored toga, metoda može i da, kao rezultat, vrati neki objekat.
Kada se metodi prosleđuju vrednosti prostog tipa podataka vrši se prenos parametra preko vrednosti. To praktično znači da se vrednost ulaznog parametra kopira i u okviru tela metode se koristi njegova kopija. Krajnji efekat je da se bilo kakve promene izvršene nad ulaznima parametrom u toku izvršavanja metode neće zapamtiti (jer su promene vršene nad kopijom a ne nad originalom). Kada se metoda završi, kopija se briše.
Kada se metodi prosleđuju objekti kao ulazni parametri, vrši se prenos parametra preko adrese. U ovom slučaju se ulazni parametar (objekat) ne kopira već se prenosi samo njegova adresa u memoriji. Posledica ovakvog pristupa je ta da se bilo kakve promene nad ovim objektom izvršene u okviru tela metode pamte i posle kraja izvršavanja metode (promene se vrše nad originalom).
Primer 23
Neka je data klasa Brojevi koja ima atribute a i b koji su celi brojevi. Neka je data i klasa ZamenaBrojeva koja im dve metode. Prva metoda prima kao ulazne parametre dva cela broja i pokušava da im zameni mesta. Druga metoda kao ulazni parametar prima objekat klase Brojevi i menja mesta vrednostima atributa a i b. Klasa TestZamenaBrojeva poziva obe metode klase ZamenaBrojeva i ispisuje rezultate na ekranu.
class Brojevi {
int a;
int b;
}
class ZamenaBrojeva {
void zameniMesta(int a, int b) {
int pomocna;pomocna = a;a = b;b = pomocna;
}
void zameniMesta2(Brojevi br){int pomocna;pomocna = br.a;br.a = br.b;br.b = pomocna;
}}
class TestZamenaBrojeva {
public static void main(String[] args) {
int a = 10;int b = 12;
Brojevi br = new Brojevi();br.a = 44;br.b = 100;
ZamenaBrojeva zb = new ZamenaBrojeva();
System.out.println ("Pre promene a = "+a+" b = "+b);zb.zameniMesta(a, b);System.out.println ("Posle promene a = "+a+" b = "+b);
//Ispisace se na ekranu//Pre promene a = 10 b = 12//Posle promene a = 10 b = 12
System.out.println ("Pre promene br.a = "+br.a+" br.b = "+br.b);zb.zameniMesta2(br);System.out.println ("Posle promene br.a = "+br.a+" br.b = "+br.b);
//Ispisace se na ekranu//Pre promene br.a = 44 br.b = 100//Posle promene br.a = 100 br.b = 44
}
}
Kada se izvrši prva metoda, brojevi neće biti zamenjeni jer su uneti kao prosti parametri i preneti preko vrednosti. Međutim, pozivom metode zameniMesta2, zamena vrednosti atributa a i b će da se izvrši i ostaće upamćena jer je ceo objekat prenet kao parametar preko adrese.
Nazivi atributa u okviru jedne klase moraju da budu jedinstveni -ne mogu se pojaviti dva atributa sa istim nazivom. Sa metodama, to nije slučaj. Naime, moguće je napisati dve ili više metoda sa istim nazivom u okviru jedne klase. Ali, da bi se razlikovale, svaka od njih mora imati drugačiju listu ulaznih parametara -bilo da je u pitanju broj ulaznih parametara ili njihov tip. Pri pozivu metode, pozvaće se ona metoda čiji ulazni parametri tačno odgovaraju unetim vrednostima. Ova pojava se naziva preklapanje metoda (“overloading”).
Primer 24
Napraviti klasu Kalkulator koja ima dve metode sa istim nazivom -saberi. Prva metoda prima dva cela broja kao ulazne parametre i vraća njihov zbir (ceo broj). Druga metoda prima dva realna broja kao ulazne parametre i vraća njihov zbir (realan broj). Napisati i klasu TestKalkulator koja poziva obe metode.
class Kalkulator {
int saberi (int x, int y){int rezultat = x+y;return rezultat;
}
double saberi (double x, double y){double rezultat = x+y;return rezultat;
}
}
class TestKalkulator {
public static void main(String[] args) {
Kalkulator k = new Kalkulator();
double r = k.saberi(12.0, 15.0);System.out.println(r);
//Ispisace se na ekranu//27.0
int r2 = k.saberi(12, 15);System.out.println(r2);
//Ispisace se na ekranu//27
}
}
Prvi poziv metode saberi će da aktivira metodu koja vrši sabiranje realnih brojeva i vraća realan broj kao rezultat. Drugi poziv metode saberi će da aktivira metodu koja vrši sabiranje celih brojeva i vraća ceo broj kao rezultat. U prvom slučaju su uneti realni brojevi kao ulazni parametri a u drugom celi brojevi.
Zadaci
Zadatak 1
Napraviti klasu Radio. Ova klasa bi trebalo da ima:
• Atribut fmFrekvencija koji označava trenutnu FM radio frekvenciju koju radio pušta (npr. 102.2 ili 87.5). Početna vrednost ovog polja je 87.5.
• Atribut amFrekvencija koji označava trenutnu AM radio frekvenciju koju radio pušta (npr. 567 ili 1500). Početna vrednost ovog parametra je 567.
• Atribut band koji ima vrednost 'A' (slovo A) ako radio pušta AM frekvenciju ili 'F' (slovo F) ako radio pušta FM frekvenciju. Početna vrednost ovog parametra je 'F'.
• Metodu podesiFMFrekvenciju koja prima kao ulazni parametar novu FM frekvenciju i podešava vrednost atributa fmFrekvencija na nju.
• • Metodu podesiAMFrekvenciju koja prima kao ulazni parametar novu AM frekvenciju i podešava vrednost atributa amFrekvencija na nju.
• Metodu vratiFMFrekvenciju koja vraća trenutnu vrednost atributa fmFrekvencija.
• Metodu vratiAMFrekvenciju koja vraća trenutnu vrednost atributa amFrekvencija.
• Metodu promeniBandNaAM koja menja vrednost atributa band na 'A'.
• Metodu promeniBandNaFM koja menja vrednost atributa band na 'F'.
• Metodu vratiBand koja vraća trenutnu vrednost atributa band.
• Metodu ispisiParametre koja ispisuje trenutne vrednosti svih atributa uz odgovarajuće poruke.

Napraviti klasu TestRadio koja kreira tri objekta klase radio. Podesiti prvi radio da radi na AM frekvenciji 570. Podesiti drugi i treći radio da rade na FM frekvencijama 87.9 i 107.9 respektivno. Ispisati parametre sva ti radija.
Rešenje:
class Radio {
double fmFrekvencija = 87.5;int amFrekvencija = 567;char band = 'F';
void podesiFMFrekvenciju (double fmFrekvencija){this.fmFrekvencija = fmFrekvencija;}
void podesiAMFrekvenciju (int amFrekvencija){this.amFrekvencija = amFrekvencija;}
double vratiFMFrekvenciju (){return fmFrekvencija;}
int vratiAMFrekvenciju (){return amFrekvencija;}
void promeniBandNaAM (){band = 'A';}
void promeniBandNaFM (){band = 'F';}
char vratiBand (){return band;}
void ispisiParametre (){System.out.println ("Trenutna FM frekvencija je "+fmFrekvencija);System.out.println ("Trenutna AM frekvencija je "+amFrekvencija);System.out.println ("Trenutno se pusta "+band+" frekvencija");
}
}
class TestRadio {
public static void main (String[] args){
Radio r1 = new Radio();
Radio r2 = new Radio();

Radio r3 = new Radio();
r1.promeniBandNaAM();r1.podesiAMFrekvenciju(570);
r2.promeniBandNaFM();r2.podesiFMFrekvenciju(87.9);
r3.promeniBandNaFM();r3.podesiFMFrekvenciju(107.9);
r1.ispisiParametre();r2.ispisiParametre();r3.ispisiParametre();
}}











Zadatak 2

Napraviti klasu KlimaUredjaj. Ova klasa bi trebalo da ima:
• Atribut temperatura koji označava trenutnu temperaturu u Celzijusima na koju je klima podešena (ceo broj – npr. 23). Početna vrednost ovog atributa je 18 stepeni.
• Atribut rezimRada koji označava da li klima greje, hladi ili radi automatski. Ako greje, ovaj atribut ima vrednost 'G', ako hladi 'H' a ako radi automatski onda 'A'. U početku, klima je podešena na automatski režim rada.
• Metodu smanjiTemperaturu koja smanjuje trenutnu temperaturu za jedan stepen.
• Metodu povecajTemperaturu koja povećava trenutnu temperaturu za jedan stepen.
• Metodu podesiTemperaturu koja kao ulazni parametar prima konkretnu vrednost temperature i postavlja vrednost atributa temperatura na nju.
• Metodu ukljuciRezimGrejanje koja podešava vrednost atributa rezimRada na grejanje ('G').
• Metodu ukljuciRezimHladjenje koja podešava vrednost atributa rezimRada na hladjenje ('H').
• Metodu ukljuciRezimAutomatski koja podešava vrednost atributa rezimRada na automatski ('A').
• Metodu ispisiParametre koja ispisuje trenutna podešavanja klima uređaja (režim i temperaturu).

Napraviti klasu ProveraKlimaUredjaja koja koristi dva objekta klase KlimaUredjaj. Potrebno je prvu klimu podesiti da greje na 27 C a drugu da hladi na 20 C. Ispisati parametre obe klime na ekranu.
Rešenje:
class KlimaUredjaj {
int temperatura = 18;char rezimRada = 'A';
void smanjiTemperaturu (){temperatura--;//Moglo je i ovako: temperatura=temperatura-1;}
void povecajTemperaturu (){temperatura++;//Moglo je i ovako: temperatura=temperatura+1;}
void podesiTemperaturu (int temperatura){this.temperatura = temperatura;}
void ukljuciRezimGrejanje (){rezimRada = 'G';}
void ukljuciRezimHladjenje (){rezimRada = 'H';}
void ukljuciRezimAutomatski (){rezimRada = 'A';}
void ispisiParametre(){System.out.println ("Klima je podesena na "+temperatura+" C");System.out.println ("Rezim rada: "+rezimRada);
}
}
class ProveraKlimaUredjaja {
public static void main (String[] args){
KlimaUredjaj k1 = new KlimaUredjaj();
KlimaUredjaj k2 = new KlimaUredjaj();
k1.ukljuciRezimGrejanje();
k1.podesiTemperaturu(27);
k2.ukljuciRezimHladjenje();
k2.podesiTemperaturu(20);
k1.ispisiParametre();k2.ispisiParametre();}
}


Vrh
 Profil  
 
 Tema posta: Re: Ucenje Jave
PostPoslato: 15 Feb 2015, 13:48 
OffLine
Bič božji
Bič božji
Korisnikov avatar

Pridružio se: 20 Jul 2009, 10:16
Postovi: 12660
Lokacija: Treći kamen od Sunca
ovo ti je neka skripta napisana zbrdazdola, sto ce ti to, nadji neku pravu knjigu


Vrh
 Profil  
 
 Tema posta: Re: Ucenje Jave
PostPoslato: 15 Feb 2015, 15:14 
OffLine
Veteran
Veteran
Korisnikov avatar

Pridružio se: 06 Nov 2010, 15:27
Postovi: 1377
Lokacija: Banjaluka
Skripta ili sta vec se sastoji od 60tak stranica.
Nisam sve ni kopirao...

Odlična je za početnike, meni je mnogo pomogla i sad tražim nastavak.


Vrh
 Profil  
 
 Tema posta: Re: Ucenje Jave
PostPoslato: 15 Feb 2015, 15:26 
OffLine
Veteran
Veteran
Korisnikov avatar

Pridružio se: 29 Jun 2010, 16:23
Postovi: 3557
Lokacija: Kad kreneš od Boske ka mljekari
Ma samo ova:
Thinking in Java
Bruce Eckel

:)

_________________
Ako si najbolji u sobi u pogresnoj si sobi


Vrh
 Profil  
 
 Tema posta: Re: Ucenje Jave
PostPoslato: 16 Feb 2015, 00:52 
OffLine
Veteran
Veteran
Korisnikov avatar

Pridružio se: 06 Nov 2010, 15:27
Postovi: 1377
Lokacija: Banjaluka
Našao sam i skinuo 4. izdanje.
Knjiga je iz 2007 godine, valjda je nije vrijeme pregazilo? :)


Vrh
 Profil  
 
 Tema posta: Re: Ucenje Jave
PostPoslato: 16 Feb 2015, 03:52 
OffLine
Veteran
Veteran
Korisnikov avatar

Pridružio se: 29 Jun 2010, 16:23
Postovi: 3557
Lokacija: Kad kreneš od Boske ka mljekari
Pa nije. Probaj naci malo i o lambda izrazima sta. To je u igri od Jave 8. Skrati kod dosta.

_________________
Ako si najbolji u sobi u pogresnoj si sobi


Vrh
 Profil  
 
 Tema posta: Re: Ucenje Jave
PostPoslato: 16 Feb 2015, 10:31 
OffLine
Veteran
Veteran
Korisnikov avatar

Pridružio se: 06 Nov 2010, 15:27
Postovi: 1377
Lokacija: Banjaluka
Važi, hvala. Nadam se da ćemo to na kursu obrađivati.
Sad za sad smo došli do interfejsa. :D


Vrh
 Profil  
 
 Tema posta: Re: Ucenje Jave
PostPoslato: 16 Feb 2015, 13:43 
OffLine
Veteran
Veteran
Korisnikov avatar

Pridružio se: 07 Mar 2007, 02:35
Postovi: 1462
Trebala sam ti ja prebaciti. Jesi nasao verziju na nasem jeziku? Ja je imam.


Vrh
 Profil  
 
 Tema posta: Re: Ucenje Jave
PostPoslato: 16 Feb 2015, 14:21 
OffLine
Samo jedan iznad mene
Samo jedan iznad mene
Korisnikov avatar

Pridružio se: 29 Mar 2005, 18:06
Postovi: 36395
Mislim da je Hristov u tim vodama. A pri tom voljan pomoci.


Vrh
 Profil  
 
 Tema posta: Re: Ucenje Jave
PostPoslato: 16 Feb 2015, 14:22 
OffLine
Bič božji
Bič božji
Korisnikov avatar

Pridružio se: 20 Jul 2009, 10:16
Postovi: 12660
Lokacija: Treći kamen od Sunca
siki2086 je napisao:
Važi, hvala. Nadam se da ćemo to na kursu obrađivati.
Sad za sad smo došli do interfejsa. :D

Jel infoars? :D


Vrh
 Profil  
 
 Tema posta: Re: Ucenje Jave
PostPoslato: 16 Feb 2015, 18:05 
OnLine
Stara kuka
Stara kuka
Korisnikov avatar

Pridružio se: 18 Jul 2009, 18:07
Postovi: 6745
Lokacija: ( ͡° ͜ʖ ͡°)
giometar je napisao:
Jel infoars? :D


:lol: :lol: :lol:


Vrh
 Profil  
 
 Tema posta: Re: Ucenje Jave
PostPoslato: 16 Feb 2015, 18:43 
OffLine
Veteran
Veteran
Korisnikov avatar

Pridružio se: 06 Nov 2010, 15:27
Postovi: 1377
Lokacija: Banjaluka
prasica je napisao:
Trebala sam ti ja prebaciti. Jesi nasao verziju na nasem jeziku? Ja je imam.


Našao sam na našem, ali pdf format nije baš čitak.

giometar je napisao:
Jel infoars? :D


Nije. ICBL je u pitanju. :)


Vrh
 Profil  
 
 Tema posta: Re: Ucenje Jave
PostPoslato: 16 Feb 2015, 19:49 
OffLine
Veteran
Veteran
Korisnikov avatar

Pridružio se: 29 Jun 2010, 16:23
Postovi: 3557
Lokacija: Kad kreneš od Boske ka mljekari
Ko drzi? Zoran, Dijana, oboje?

_________________
Ako si najbolji u sobi u pogresnoj si sobi


Vrh
 Profil  
 
 Tema posta: Re: Ucenje Jave
PostPoslato: 16 Feb 2015, 20:20 
OffLine
Veteran
Veteran
Korisnikov avatar

Pridružio se: 07 Mar 2007, 02:35
Postovi: 1462
Oni drze napredni kurs, a ovaj osnovni drze Ognjen i Igor. Odlicni obojica, pri tom Ognjen malo vjestiji sa rijecima.


Vrh
 Profil  
 
 Tema posta: Re: Ucenje Jave
PostPoslato: 17 Feb 2015, 08:35 
OffLine
Stara kuka
Stara kuka
Korisnikov avatar

Pridružio se: 27 Nov 2008, 14:05
Postovi: 5168
Slika

_________________
Bio jednom jedan djecak, u ocevoj kuci, nad rijekom, koji je sanjao zlatne snove, jer nista nije znao o zivotu.


Vrh
 Profil  
 
 Tema posta: Re: Ucenje Jave
PostPoslato: 08 Mar 2015, 15:39 
OffLine
Veteran
Veteran
Korisnikov avatar

Pridružio se: 07 Mar 2007, 02:35
Postovi: 1462
Kupila sam i Đurićevu knjigu, Korak u JAVA svijet. Konačno da imam nešto opipljivo u rukama! :)


Vrh
 Profil  
 
 Tema posta: Re: Ucenje Jave
PostPoslato: 16 Apr 2015, 00:58 
OffLine
Samo jedan iznad mene
Samo jedan iznad mene
Korisnikov avatar

Pridružio se: 10 Jun 2011, 21:22
Postovi: 16725
Lokacija: У близини Обрен Вакуфа
Ко зна енглески има брука видео курсева за Јаву да се нађе. Књиге да не спомињем.

_________________
Зарада на интернету (Јесте, ја сам админ) :) Najbolji Forex brokeri
Čiča iz Rogače je napisao:
Kad pobjedimo Doboj ćemo nazvati Obren Vakuf,usprkos tebi i Vulićki
Vladimir RUS je napisao:
Na RTRS-u kazu 8000, a na Nezavisnim hiljade. :D
Dok je bilo uzivo, na RTRS-u i ATV-u nista. Zato ide live kada se otvara hidroelektrana od 42 miliona KM koja uz to zaposljava tj. bice uposleno 40-ak radnika. Milion KM po radnom mjestu.


Vrh
 Profil  
 
Prikaži postove u poslednjih:  Poređaj po  
Započni novu temu Odgovori na temu  [ 60 Posta ]  Idi na stranicu 1, 2, 3  Sledeća

Sva vremena su u UTC [ DST ]


Ko je OnLine

Korisnici koji su trenutno na forumu: Nema registrovanih korisnika i 1 gost


Ne možete postavljati nove teme u ovom forumu
Ne možete odgovarati na teme u ovom forumu
Ne možete monjati vaše postove u ovom forumu
Ne možete brisati vaše postove u ovom forumu
Ne možete slati prikačene fajlove u ovom forumu

Pronađi:
Idi na:  
Powered by phpBB® Forum Software © phpBB Group
Hosting BitLab
Prevod - www.CyberCom.rs