Deo zbornika Učimo Javu
Primer: klasa Porez
Ovaj program izračunava vrednost poreza. Cilj je prikazivanje načina na koji Java klase komuniciraju, kako se pozivaju metodi i kako se mogu koristiti promenljive.
Prvo je neophodno da se opredelimo koje Java klase treba da kreiramo za rešavanje problema. Zatim, razmislimo o atributima i metodima koje ove klase treba da imaju.
Deklarisanje klase
Pošto planirate da izračunavate vrednost poreza, nije potrebno da budete naučnik da biste utvrdili da je potrebno da kreirate klasu Porez. Počnite nazivom klase i velikim zagradama – to je najjednostavnija klasa koju možete da kreirate:
class Porez {
}
Šta je neophodno da bi ova klasa mogla određivati vrednost poreza? Definitivno morate znati koliki je prihod osobe kojoj određujete godišnji porez. Ukupan prihod je dobar kandidat za atribut klase. Izaberite jedan od numeričkih tipova podataka. Ukupan prihod nije uvek ceo broj, tako da možete da koristite double
tip podataka, jer je reč o broju sa decimalama. Možete da koristite i float
, ali double
omogućava da budete spremni i za veće prihode.
class Porez {
double ukupanPrihod;
}
Osim toga, neophodno je da znate u kojoj državi je osoba; pravila oporezivanja su različita u različitim državama. Sledi nekoliko skraćenica država u SAD: NY, NJ, CT. Upotrebite tip String
za čuvanje tekstualnih podataka:
class Porez {
double ukupanPrihod;
String drzava;
}
Dodajte još jedan atribut za izdržavana lica, za osobu čiji porez računate. Celobrojni tip (int
) biće odgovarajući – nije moguće da neko izdržava dva i po lica:
class Porez {
double ukupanPrihod;
String drzava;
int izdrzavanaLica;
}
Dodavanje metoda
Promenljive skladište podatke, dok metodi izvršavaju akcije. Vreme je za akcije. Prvi metod racunajPorez()
određuje vrednost poreza na osnovu vrednosti ukupnog prihoda, broja izdržavanih lica i države:
class Porez {
double ukupanPrihod;
String drzava;
int izdrzavanaLica;
public double racunajPorez() {
return 234.55;
}
}
Specifikacija metoda racunajPorez()
definiše sledeće:
- Bilo koja eksterna klasa može da pristupa ovom metodu (
public
). - Ovaj metod vraća vrednost tipa
double
. - Naziv metoda je
racunajPorez
.
Prazne zagrade nakon naziva metoda ukazuju da metod nema argumente, ili, drugim rečima, nije neophodna ni jedna vrednost izvan Porez
klase da bi bila izvršena izračunavanja. Zapravo, ova verzija racunajPorez()
metoda ne koristi čak ni vrednosti iz promenljivih klase za izračunavanje poreza. Uvek vraća vrednost 234,55, koja je uneta u sam kod.
Vraćanje vrednosti
Kako da procenite da li metod treba da vrati vrednost? Ukoliko vaš metod izvršava određena izračunavanja i mora da vrati određenu vrednost u program iz koga se poziva, tada će imati povratnu vrednost. Ukoliko metod direktno modifikuje promenljive klase ili jednostavno negde prikazuje podatke (monitor, disk, server), ne mora da vraća nikakvu vrednost. Vi i dalje morate da deklarišete da “ne vraća vrednost“ u specifikaciji metoda, koristeći ključnu reč void
:
public void stampajGodisnjiPorez() {
// Određeni kod unosi se ovde
}
Koristeći naredbu return
, metod može da vrati programu iz koga se poziva podatke koji se nalaze u promenljivoj, na primer:
return calculatedTax;
Ako deklarišete povratni tip u specifikaciji metoda, ali zaboravite return
naredbu u telu metoda, Java kompajler prijavljuje grešku.
Deklarisanje glavne klase
Porez
klasa omogućava određivanje načina na koji se računa porez, ali u realnim aplikacijama imaćete brojne klase koje predstavljaju različite tokove podataka u ovom procesu. Zavisno od tipa zaposlenja ili prihoda, računovođe koriste brojne druge različite forme za određivanje poreza.
Svaka od ovih klasa predstavlja određeni entitet, ali ni jedna nije izvršni program; to znači da ni jedna neće sadržati main()
metod. Neophodno je da kreirate još jednu klasu za startovanje aplikacije i kreiranje instanci drugih klasa. Nju ćemo nazvati TestPorez
.
Klasa TestPorez
treba da ima mogućnost izvršavanja sledećih akcija:
- Kreiranje instance
Porez
klase - Dodeljivanje podataka korisnika (ukupan prihod, država, izdržavana lica) promenljivim klase
Porez
. - Izvršavanje metoda
racunajPorez()
- Prikazivanje rezultata izvršavanja na ekranu Klasa
TestPorez
je smeštena u posebnu datoteku pod nazivomTestPorez.java
.
class TestPorez {
public static void main(String[] args){
Porez p = new Porez(); // kreranje instance
// dodeljivanje vrednosti članovima klase
p.ukupanPrihod= 50000;
p.izdrzavanaLica= 2;
p.drzava= "NJ";
double vasPorez = p.racunajPorez(); //određivanje poreza
// Prikazivanje rezultata
System.out.println("Vas porez je " + vasPorez);
}
}
U prethodnom kodu deklarisali smo promenljivu p
tipa Porez
. Metod main()
je početna tačka programa za izračunavanje poreza. Ovaj metod kreira instancu klase Porez
, a promenljiva p
ukazuje na mesto u memoriji vašeg računara gde je kreiran novi objekat. Od tog trenutka, ukoliko želite da referencirate ovaj objekat, koristite promenljivu p
.
Sledeće tri linije omogućavaju dodeljivanje vrednosti članovima Porez
objekta:
p.ukupanPrihod= 50000;
p.izdrzavanaLica= 2;
p.drzava= "NJ";
Nakon toga, možete da izračunate porez za objekat p
izvršavanjem metoda racunajPorez()
, a rezultat izvršavanja ovog metoda biće dodeljen promenljivoj vasPorez
. Metod racunajPorez()
i dalje vraća vrednost definisanu u kodu, ali to ćete promeniti sami. Poslednja linija služi za prikazivanje rezultata u sistemskoj konzoli.
U ovom trenutku imate dve klase koje međusobno komuniciraju - TestPorez
i Porez
. Klasa TestPorez
kreira instancu Porez
klase, inicijalizuje njene promenljive, a zatim izvršava njen metod racunajPorez()
, koji vraća vrednost klasi TestPorez
.
Probajte sami
Kreirajte pomoću Eclipse alata aplikaciju za određivanje poreza opisanu u ovoj lekciji, a zatim je modifikujte tako da zamenite vrednost unetu u kodu racunajPorez()
metodom sa pravim izračunavanjima. Recimo, ukoliko je ukupan prihod manji od 30.000 dolara, državni porez je 5 odsto. Ukoliko je ukupan prihod veći od 30.000 dolara, za porez se izdvaja 6 odsto:
public double racunajPorez() {
double stateTax = 0;
if (ukupanPrihod < 30000) {
stateTax = ukupanPrihod * 0.05;
}
else {
stateTax = ukupanPrihod * 0.06;
}
return stateTax;
}
Startujte program nekoliko puta, modifikujući vrednosti promenljivih Porez
klase. Proverite da li je u konzoli prikazana vrednost poreza ispravno određena.
Izvor: Yakov Fain, Java 8 programiranje (promo lekcija), Kompjuter biblioteka, Beograd, 2015.