Free Essay

Analiza I Dizajn

In:

Submitted By glavas
Words 19482
Pages 78
JAVA – PRIRUČNIK ZA PROGRAMIRANJE

Da biste pisali i izvršavali Java programe, potreban vam je Java Software Development Kit (Java SDK). To je besplatan proizvod koji možete preuzeti preko Interneta. To jednostavno znači da ćete iskopirati tzv. instalacionu datoteku na svoj računar, pokrenuti instalaciju i zatim početi sa radom. Ovaj proizvod možete naći na adresi http://java.sun.com.

Proces pravljenja i izvršavanja Java programa ima tri jasno razdvojene etape:

• Pisanje programa

• Kompajliranje (prevođenje) programa (generiše se datoteka koju računar može da razume)

• Izvršavanje programa.

Za sada, ne brinite se mnogo oko toga šta se tačno dešava u svakoj od ovih etapa. Jedan od načina da kompletirate ove tri etape je da prvo pišete program koristeći neki osnovni editor teksta i snimite dobijeni tekst u datoteku.
Potom, etape kompajliranja i izvršavanja mogu se obaviti kucajući u komandnoj liniji posebnih komandi predviđenih za te etape. Mali broj Java programera piše programe na taj način.
Skoro svi programeri razvijaju svoje programe koristeći tzv. Integrisano razvojno okruženje (Integrated Development Environment – IDE).
Postoji više IDE proizvoda za razvoj Java programa., neki su veoma složeni, a neki veoma prosti. Mi ćemo koristiti verziju koja je besplatna. Radi se o kruženju koje se naziva JCreator.
Radi se o interfejsu koji se lako koristi a može besplatno (verzija Lite) da se preuzme preko Interneta. Preporučujem da koristite ovaj softver zato što će vam olakšati programerski deo posla i omogućiti da se koncentrišete na učenje elemenata Java jezika.
Pre nego što preuzmete i instalirate JCreator, moram da vas upoznam sa jednom činjenicom. JCreator radi samo u Windows okruženju, to znači da korisnici Linuxa i Mac OS moraju da pronađu drugo rešenje.

Da biste preuzeli ovaj softver uradite sledeće:
Idite na JCreator web sajt: http://www.jcreator.com
Potražite link za preuzimanje Jcreatora LE (Freeware).

JCreator od vas traži informaciju o instaliranoj verziji Java SDK (odnosno JDK – Java Development Kit). Kliknite mišem na dugme Browse (ako je potrebno) da biste definisali putanju do Java direktorijuma (verovatno, c:\j2sdk1.4.1_02),

Pokretanje JCreatora

[pic]

Ovaj ekran prikazuje JCreatorovo integrisano razvojno okruženje (engl. Integrated Development Environment - IDE).
Obratite pažnju na lokacije radnog prostora, oblast datoteke i glavni meni. Radni prostor nam prikazuje koji Java programi su nam na raspolaganju. Oblast datoteke se koristi za prikaz aktuelnog koda, a glavni meni za kontrolu pristupa datoteci i funkcije uređivanja datoteke. Meni se takođe koristi za kompajliranje i izvršavanje programa.

Otvaranja Java projekta

Računarski programi (aplikacije) napisani u Javi često se nazivaju projektima.
Prvi korak kod otvaranja projekta je otvaranje radnog prostora koji sadrži projekat koji nas interesuje.
Sledite ove korake:

Izaberite u meniju File opciju Open Workspace.

Biće prikazano više projekata u radnom prostoru. Pronađimo projekat WelcomeProject.
Uradimo desni klik mišem na nazivu tog projekta i iz pomoćnog menija izaberimo stavku Sets as Active Project.
Klikom miša na znak + pored naziva projekta razvimo čvorište projekta. Sada ćemo videti da u njemu postoji jedna datoteka pod nazivom Welcome.java. Ako se sadržaj fajla ne pojavi u oblasti prikaza datoteke, dvo-kliknite na tu datoteku da bi se otvorila.
[pic]

Kompajliranje i izvršavanje Java projekta

Pošto razvijete Java projekat, prirodno je da želite da pokrenet ili izvršite taj program.
To se ostvaruje u dva koraka: kompajliranjem i izvršavanjem.

Da biste kompajlirali projekat Welcome, izaberite u glavnom meniju stavku Build, a zatim Compile Project. Druga varijanta je da pritisnete samo taster F7 na tastaturi. Na ekranu treba da se pojavi novi prozor koji je prikazan na sledećoj slici.

[pic]

Ako je sve instalirano kako treba, u donjem prozoru treba da vidite reči Process completed. Time nas JCreator obaveštava da je projekat uspešno kompajliran.

Ako program nije kompajliran, najverovatnije da JCreator nije mogao da pronađe Java SDK.
Da biste proverili da li JCreator „zna” gde je Java SDK, pokušajte sledeće:

U glavnom meniju izaberite stavku Configure.
Izaberite stavku Options.
U okviru za dijalog Open kliknite mišem na JDK Profiles.
U prozoru treba da bude direktorijum gde je Java instalirana.
Ako ga nema, izaberite stavku New i sledite instrukcije kako biste pronašli direktorijum.

Ako je direktorijum naveden ali to nije odgovarajući direktorijum, označite navedeni direktorijum i izaberite Edit. Uradite potrebnu korekciju naziva i lokacije direktorijuma.

Program se piše u notaciji koja se naziva programski jezik. Svako računalo (procesor) ima svoj programski jezik koji nazivamo strojni jezik (machine code). Taj jezik je dizajniran s fokusom na elementarne operacije koje se obavljaju nad hardverom računala. Radi se o jednostavnim operacijama poput pisanja ili čitanja iz memorije, aritmetičkim operacijama nad registrima procesora, itd.

Iako je teoretski svaki program moguće napisati koristeći strojni jezik to je vrlo teško čak i za jednostavne programe. U praksi se gotovo sve programiranje izvodi u jezicima koji su prilagođeni programeru. Takvi jezici se nazivaju jezici visokog nivoa.

Jezici koji se danas koriste u komercijalnoj upotrebi su C, C++,Java, C#,Perl,Phyton,Pascal(Delphi),Basic,Fortran....

Java jezik je jedan od najmlađih jezika. Prvi put se pojavio 1995. godine. Java 2 specifikacija jezika koju koristimo u ovom predmetu pojavila se 1998.
Rekli smo da programeri pišu programe uglavnom koristeći programske jezike visokog nivoa, a da računala izvršavaju instrukcije strojnog jezika.
Pitanje je što računalo radi s programom napisanim u jeziku visokog nivoa.
Najčešći način je koristiti računalni program koji nazivamo prevodilac (compiler).
Prevodilac prevodi program napisan u jeziku visokog nivoa u program sastavljen od strojnog jezika.
Prevedeni program onda možemo pokrenuti na računalu. (U čemu se piše prevodilac ?)
U slučaju Java jezika korišten je malo drukčiji pristup u kojem se u procesu pisanja Java koda do transformacije u računalu razumljiv kod koriste dva programa. Prvo se program koji je programer napisao u Javi, pomoću prevodioca prevodi u bytecode program. Bytecode je sličan strojnom jeziku, ali je neovisan o bilo kojem računalu.

Bytecode program nije više čitljiv od strane programera. Njega čita i izvršava program koji se naziva Java virtual machine.
Prednosti pristupa u dva koraka jest da se tako proizvode programi koji se ipak izvršavaju zadovoljavajućom brzinom te se Java okolina može brzo realizirati na bilo kojem računalu.
Originalni Java program koji piše programer i kojeg prevodi prevodilac naziva se izvorni kod.
Bytecode koji proizvodi prevodilac i interpretira Java virtual machine naziva se objektni kod.

[pic]

Da li ste sada spremni da pokrenete svoj prvi projekat?
Da biste to uradili, izaberite u glavnom meniju Build, a zatim stavku Execute Project (a možete isto dejstvo proizvesti i pritiskom na taster F5 na tastaturi). Na ekranu treba da se pojavi prozor sa Welcome porukom, kao na sledećoj slici.

[pic]

Ako se to desilo, sve je instalirano kako treba. Ako nije tako, nešto nije instalirano kako treba i moraćete kompletno da proverite instalaciju Jave i JCreatora kao biste bili sigurni da je sve urađeno na odgovarajući način.

Napuštanje JCreatora

Kada ste završili rad sa Java projektom, preostalo je još da napustite JCreator razvojno okruženje. To je ista procedura kao i kod svih drugih Windows aplikacija:
U glavnom meniju izaberete stavku File.
Izaberete sada stavku Exit (na dnu menija File).
JCreator će zatvoriti sve otvorene prozore i bićete vraćeni na radnu površinu Windowsa. Možete koristiti i alternativni način, tj. kliknuti mišem na dugme X u gornjem desnom uglu glavnog prozora JCreatora.

Osnove Java programa

Struktura Java programa

Java program (ili projekt) čini nekoliko datoteka. Ove datoteke se nazivaju klasama.
Svaka od tih datoteka ima Java kôd koji obavlja neki specifičan zadatak (zadatke). Svaka datoteka klase ima oznaku tipa datoteke (tzv. Ekstenziju) .java.
Naziv datoteke koji se koristi za snimanje klase mora da odgovara nazivu klase.
Jedna klasa u svakom projektu će imati nešto što se nekad zove glavni metod (engl. main method).
Kagdog izvršavate Java program, vaš računar će prvo potražiti glavni metod da bi nešto počelo da se dešava. Prema tome, da biste izvršili program, direktno navodite klasu koja sadrži glavni metod.

Pogledajmo kako to izgleda u primeru Welcome Project.

[pic]

Ovaj projekt ima jednu datoteku koja se naziva Welcome.java. Uočite da, kao što je zahtevano, naziv Welcome odgovara nazivu klase koji se vidi u kodu (public class Welcome).
Ako se kôd ne vidi, uradite dvo-klik mišem na datoteku koja ima naziv Welcome.java. Ako projekt ima još klasa, one bi trebalo da budu izlistane ispod foldera WelcomeProject. Takođe, uočite u kodu oblast koja ima reč main. To je glavni metod koji nam je potreban u jednoj od klasa projekta.

Struktura Welcome Project-a

/*
* Welcome Project
* Java for Kids
* KIDware (206) 721-2556
* www.KIDwareSoftware.com
*/
public class Welcome
{
public static void main(String[] args)
{
System.out.println("Welcome to Java for Kids!");
}
}

Prođimo kroz ovaj kôd red po red kako bi objasnili njegovu strukturu.

Prvih šest redova programa su:

/*
* Welcome Project
* Java for Kids
* KIDware (206) 721-2556
* www.KIDwareSoftware.com
*/

U tim redovima je komentar (engl. Comment).
Ti redovi obezbeđuju neke informacije o programu, tj. o kom programu se radi i informaciju za kontakt.

Komentar počinje sa simbolom /* i završava se sa simbolom */.
Ovi redovi su poznati i kao zaglavlje programa (engl. program header).

Dobro je da uvek stavite zaglavlje u svoje Java programe u kojima je informacija šta rade i ko ih je napisao. Java kompajler ignoriše svaki komentar – njihova uloga je samo da pruže objašnjenje.

Prvi red posle komentara sadrži sledeće:

public class Welcome
{

Taj red sadrži definiciju naše klase nazvane Welcome.
Ključna (službena; engl. keyword) reč public određuje da li drugi delovi programa mogu da pristupaju ovoj klasi.

Ključne reči su deo svakog programskog jezika – to su rezervisane reči i ne mogu se koristiti u regularnim Java izrazima.

Leva vitičasta zagrada ({) se koristi da označi početak definicije klase. Uočićete brzo da se mnogo vitičastih zagrada koristi u Java programima!

Sledeći red je:

public static void main(String[] args)
{

U ovom redu se kreira glavni metod koji smo ranije pominjali.

Uočite da se druga leva vitičasta zagrada koristi za početak definisanja glavnog metoda.

Jedini Java iskaz (naredba; engl. statement) u glavnom metodu je:

System.out.println("Welcome to Java for Kids!");

Kada ste ga pokrenuli, videli ste u izlaznom prozoru poruku koja je glasila - Welcome to Java for Kids!
Prethodni red koda je ispisao tu poruku. U tom redu System je klasa ugrađena u Javu, out je objekat klase (koji se odnosi na izlazni prozor (engl. output window)).
Reč println (izgovara se print line) prikazuje jedan red teksta i premješta kursor u novi red. Tekst koji se prikazuje je pod navodnicima. Uočite da se iskaz završava sa (;).

Posle tog reda slede dva reda od kojih svaki ima desnu vitičastu zagradu (}). Prva zagrada okončava glavni metod, dok druga okončava definiciju klase. Biće potrebno da uvek pazite da imate u Java programima vitičaste zagrade uparene, tj. da svakoj levoj odgovara jedna desna.

Mada je ovo veoma kratak i prost program, on ilustruje koje su glavne komponente u Java programu.
Potrebno vam je zaglavlje programa, definicija klase i glavni metod. Takođe, potrebno je da vodite računa i snimite datoteku klase pod istim nazivom pod kojim je klasa definisana. Ta datoteka ima oznaku tipa (tzv. ekstenziju) .java.

Java ima različite načine pisanja poruka po ekranu bilo da pišemo po prozoru, na web stranicu, itd.
U ovome slučaju koristimo jednu Java metodu koja se naziva System.out.println.
Rezultat izvršavanja bit će ispis poruke u najjednostavnijem obliku prozora kojeg nazivamo konzola (ili DOS prozor u Windows OS).

Slijedi program s dvije naredbe koje su tiskane podebljano (ne koristimo podebljane fontove u Java programima).

public class Hello
{
/* napiši jednostavnu poruku na ekran*/

public static void main(String[] args) { System.out.println("Hello, World!"); System.out.println("See you later."); }
}

Kada pokrenemo ovaj program izvršit će se obje naredbe jedna za drugom.
Prvo će se na ekranu ispisati u jednoj liniji Hello, World! , a nakon toga u drugoj liniji See you later.

Oba programa imaju formu:

public class Hello { /* komentar. */

public static void main(String[] args) {

Naredbe

} }

Objekti i Metode

Razmotrimo naredbu koja ispisuje poruku:

System.out.println(″Hello, World!″); .

Gdje su tu objekti ? Poznavalac Java jezika vidjet će dva objekta. Prvi je objekt System.Out , a drugi sami niz znakova ″Hello, World!″.

Java cijelo vrijeme radi s objektima. U Java biblioteci definirano je mnogo vrsta različitih objekata koje možemo koristiti u svojim programima.

Možemo i kreirati objekte prema našim potrebama.
Npr. pišemo program koji će pratiti koji su studenti na FESB-u prijavljeni na koji predmet. Tada ćemo napisati takav program koji će pokretanjem:

• za svakog studenta kreirati jedan objekt studenta
• za svaki predmet također jedan objekt predmeta.

Svaki objekt studenta sadržavat će određene podatke poput osobnih podataka studenta i liste upisanih predmeta.
Objekt predmeta može sadržavati naziv predmeta i druge podatke vezane za predmet.

U isto vrijeme kad definiramo izgled objekata trebamo i definirati koje će se operacije izvršavati nad tim objektima.
Što se tiče objekta student , bit će nam potrebne operacije kreiranja objekta studenta, ažuriranja liste predmeta koje je student upisao, operacije ispisa podataka o studentu na ekran, itd.

Te operacije koje se izvršavaju nad objektom nazivaju se metode.

Dosad smo već vidjeli primjer metode. Njen puni naziv je:

System.out.println

Ovaj naziv označava metodu println koja pripada objektu System.out.

System.out je objekt čiji je zadatak da primi poruku koju treba prikazati na ekranu.
Zamislimo ga kao osobu kojoj dajemo što treba ispisati na ploči.
Println metoda je operacija koja se izvršava nad porukom.

Tako nam izraz:

System.out.println(″Hello, World!″); kaže:

koristi println metoda za slanje poruke ″Hello, World!″ objektu System.out, koji će je prikazati na ekranu.

Svaki objekt pripada klasi (class) koja specificira od kojih podataka se objekt sastoji i koje metode posjeduje.

Npr. svi nizovi znakova pripadaju klasi koja se naziva String.
Klase String i System.Out definirane su u klasama koje pripadaju Java bibliotekama. Možemo kreirati i svoje klase npr. klasu Student i klasu Predmet.
Koji je odnos klasa-objekt ? Kažemo da je objekt instanca od klase. Jednostavno, klasa je opis objekta napisan u kodu. Možemo je promatrati kao kalup ili skicu prema kojoj se u tijeku izvršavanja programa kreiraju objekti.

Program može kreirati više objekata ,instanci iste klase. Java biblioteka je u potpunosti sastavljana od definicija klasa.
Ako napišemo bilo koji program u Javi i on će se sastojati od klasa. Većina klasa definira tipove objekata.
Postoje samo nekoliko klasa kojima se ne definira objekt već su sastavljene samo od samostalnih metoda.

Ipak nije sve u Javi objekt.

Najjednostavniji tipovi podataka poput cjelobrojnih i brojeva u pokretnom zarezu tretiraju se nešto drugačije. Takvi podaci, dakle nemaju obilježja objekata i nazivaju se primitivni tipovi podataka.

Kako je konstruiran program iz primjera

Prethodni dio pokazao nam je da se Java programi sastoje od klasa. Programi koji su navedeni kao primjer uklapaju se u tu tvrdnju, ali ipak na vrlo primitivan način.
Oba programa sastoje se od jedne klase (Hello) koja se sastoji samo od jedne statičke metode tj. metode koja ne pripada nijednom određenom objektu.
Svaki metoda bilo da pripada objektu ili ne, sadrži određeni broj naredbi koje izvršavaju neku korisnu operaciju. (U drugim računalnim jezicima imamo funkcije ili procedure).

Analizirat ćemo korak po korak kompletnu metodu iz zadnjeg primjera:

/* napiši jednostavnu poruku na ekran*/

public static void main(String[] args)
{ System.out.println(″Hello, World! ″); System.out.println(″See you later. ″);
}

Sastoji se od slijedećih dijelova:

1. /* napiši jednostavnu poruku na ekran*/

Ovo je komentar koji opisuje što ni program trebao raditi. To je jednostavno poruka za onoga tko čita izvorni kod programa. Svaki tekst između /* i */ bit će tretiran kao komentar i Java će ga u potpunosti ignorirati.

2. public static void main(String[] args)

Ovo predstavlja zaglavlje (heading) metode. Svaka metod ima svoj naziv. U ovom slučaju naziv metoda je riječ main koja se nalazi neposredno ispred zagrada.

Riječi public, static i void pokazuju Java prevodiocu način korištenja metoda main. (Bit će objašnjeno kasnije).

Dio u zagradama, String[] args, opisuje informaciju koja će biti proslijeđena metodu svaki put kad bude pozvan.
Naziva se lista parametara. U navedenom primjeru ta je informacija ignorirana, odnosno nije korištena u programu. (koko se koristi bit će objašnjeno poslije)

3. { System.out.println(″Hello, World! ″); System.out.println(″See you later. ″); }

Ovo je tijelo (body) metoda. Uvijek se sastoji od niza naredbi zatvorenih u vitičaste zagrade, {..}. Pozivom ovog metoda izvršava se svaka od naredbi.

Sve metode sastoje se od tri navedena dijela. Strogo rečeno komentar je opcionalan. Međutim preporuča se uvijek početi s komentarom koji ukratko kaže što radi metod koji slijedi. Taj dio nazivamo specifikacijom.
Gornji primjer je prejednostavan da bi specifikacija bila od veće koristi, ali u većim programima to je najefikasniji način da pomognemo razumijevanju programa. Posebno je to bitno ako na programu radi više programera.

Svaki program sastoji se od određenog broja definicija klasa. U dva gornja primjera u programu je definirana samo jedna jedina klasa nazvana Hello.

Definicija klase započinje s zaglavljem: public class Hello

Zaglavlje je praćeno elementima koji sačinjavaju klasu, zatvorenim u vitičaste zagrade.
U našim primjerima klasa se sastoji od samo jednog člana, metode nazvane main, koju smo već opisali.
Općenito program se sastoji od jedne ili više definicija klasa od kojih svaka sadržava jednu ili više metoda.

Java programeri koriste konvenciju po kojoj naziv klase započinje velikim slovom, a naziv metode malim slovom.
U ovome predmetu ćemo se nastojati strogo pridržavati navedene konvencije.

Općenito bilo koji naziv u Javi (identifikator) sačinjen je od slova, znamenki i mora počinjati sa slovom.
Za potrebe ove definicije se simboli valuta poput £ i $, i povlaka (‘_’) računaju kao slova. Duljina naziva nije ograničena.
Na slijedećoj slici prikazan je naš program koji se sastoji od dvije naredbe razdvojen okvirima koji nam pokazuju što je klasa, što je metoda a što su naredbe.
[pic]

Metoda System.out.println

System.out.println je prva metoda iz Java biblioteke koji smo upotrijebili.
Ova metoda će ispisati niz znakova na konzolu (DOS prozor).
Naziv println je skraćenica za ‘print line’.

Mjesto na ekranu na kojemu će se ispisati slijedeći znak označeno je na ekranu s malom treptajućom linijom nazvanom kursor.
System.out.println metoda ima tu osobinu da ispisom teksta pomiče kursor na početak slijedeće linije.
Ako želimo da kursor ostane na prethodnoj liniji koristit ćemo metodu System.out.print.

Drugi način određivanja kad želimo ispis u novoj liniji je korištenje para znakova \n u nizu znakova svaki put kad je potrebno da ispis krene u novu liniju.

Npr. : System.out.print(″Hello, World!\nSee you later\n″)

će ispisati Hello, World! , nakon toga pomaknuti kursor u novu liniju gdje će ispisati See you later. , i nakon toga pomaknuti kursor na novu liniju.
Ta će naredba imati isti rezultat kao i par naredbi:

System.out.println(″Hello, World! ″);
System.out.println(″See you later. ″)

Kako prevesti i pokrenuti Java program

Pretpostavimo da želite izvršiti program iz prvog primjera:

class Hello
{ /* napiši jednostavnu poruku na ekran*/

public static void main(String[] args)
{
System.out.println(”Hello, World!”);
}
}

Prvo morate pristupiti računalu na koje je instalirana podrška za Javu odnosno Java SDK.

A. Ispišite kod programa i pohranite ga u datoteku Hello.java.

Možete koristiti bilo koji tekst editor za unos koda, npr. Notepad. Korisno je imati i neki sofisticiraniji Java editor.
Takvi editori nam mogu omogućiti korisne funkcije poput sintaksnog naglašavanja ili automatskog uvlačenja teksta. Moguće je iz takvih editora pozvati i operacije prevođenja i izvršavanja.

Ako se vaš program sastoji od samo jedne klase potrebno ga je pohraniti u datoteku koja ima isti naziv kao i klasa uz dodanu ekstenziju ‘.java’.
Kako se naš jednostavni program sastoji od samo jedne klase nazvane Hello, datoteku moramo nazvati Hello.java.

B. Otvori DOS prozor i postavi trenutni direktorij na direktorij gdje je datoteka s programom.

Sve naredbe koje slijede tipkaju se u ovaj prozor.
Poruke prevodioca i sve što će program ispisati odvija se također u ovome prozoru.
Postoje i drugi načini koje ćemo obraditi na vježbama, ali ovo je općeniti način koji radi na svim računalima.
U ovome trenutku bit će otvorena dva prozora. Jedan s editorom (npr. Notepad), a drugi s DOS prozorom koji služi za interakciju s Java sustavom. U tom DOS prozoru prevodimo i izvršavamo program.

C. Korištenje JDK za prevođenje programa u Hello.java datoteci.

Za prevođenje programa treba utipkati:

javac Hello.java

Ako dobijete poruku da sustav ne može naći javac (Java prevodilac) znači da ili nije pravilno postavljena PATH varijabla sustava ili nije instaliran JDK.
Ako nema grešaka u programu prevodilac će proizvesti bytecode verziju vašeg programa u datoteci nazvanoj Hello.class.

Ako prevodilac nađe greške poput tipkanja Class umjesto class ili izostavljanja znaka ; na kraju naredbe, odbit će prevođenje i izvijestiti o pronađenim greškama.
To nazivamo greškom prevođenja (compiler error).
Najčešće je poruka o grešci takva da je jednostavno naći mjesto u kodu gdje smo učinili pogrešku. Ponekad iz poruke nije jasno odakle potječe greška i tada je potrebno pažljivo pregledati kod. Početnici često pogriješe tražeći grešku baš u liniji gdje je to prevodilac javio.
Međutim , greška se može nalaziti i negdje prije !
Ako postoje greške kod prevođenja potrebno ih je otkloniti u editoru. nakon otklanjanja grešaka ne zaboravite snimiti datoteku.

D. Korištenje JDK za pokretanje prevedene verzije programa koja se nalazi u Hello.class datoteci.

Nakon što je prevodilac proizveo bytecode verziju programa Hello.class, možete ga pokrenuti u Java Virtual machine tipkanjem:

java Hello

Ne tipkajte .class ekstenziju. JDK pretpostavlja da ste mislili na Hello.class.

Ovaj se program nakon toga treba izvršiti i ispisati poruku u DOS prozoru.
Ako želite modificirati ispis programa ili dodati još koju naredbu opet se trebate vratiti u prozor tekst editora, napraviti modifikacije i nakon toga u DOS prozoru ponoviti postupak prevođenja i izvršavanja.

U tijeku izvođenja programa može nastati greška. Takva greška naziva se run-time greška (run-time error) ili greška u izvršavanju (execution error).

U nekim slučajevima JVM neće moći izvršiti program do kraja. Tada će ispisati poruku o grešci s podatkom gdje je program došao u izvođenju prije nego što je prekinut.

Neka pravila Java programiranja

Pogledajmo još jednom kôd Welcome projekta kako bismo ukazali na neka osnovna pravila Java programiranja. Evo tog koda:

/*
* Welcome Project
* Java for Kids
* KIDware (206) 721-2556
*/
public class Welcome
{
public static void main(String[] args)
{
System.out.println("Welcome to Java for Kids!");
}
}

A evo i pravila:

• Java kôd zahteva perfekciju. Sve ključne reči moraju biti korektno zapisane. Ako napišete printline umesto println, čovek može da zna na šta ste mislili, ali računar ne.

• Java razlikuje mala i velika slova (engl. case-sensitive), što znači da se velika i mala slova smatraju različitim znakovima. Kada pišete kôd, vodite računa kako koristite slova. U Javi reči Main i main su potpuno različite.
U pisanju Java programa morate paziti na korištenje malih i velikih slova. Za razliku od nekih drugih programskih jezika Java razlikuje velika i mala slova (case sensitive). To znači da ne možete utipkati Class ili CLASS na početku programa. Potrebno je točno pisati class.
Riječ class ima u Java programima specijalno značenje i jedna je od ključnih riječi (keywords) Java jezika.
Java ima 47 ključnih riječi i sve se pišu malim slovima. kao što je prije napisano držat ćemo se konvencije po kojoj se nazivi klasa pišu s početnim velikim slovom, a nazivi metoda malim slovima.

• Java ignoriše beline (engl. “white space”; blankove). Često ćete koristiti beline da bi vaš kôd izgledao čitljivije.

• Vitičaste zagrade se koriste za grupisanje. One markiraju početak i završetak programskih sekcija. Vodite računa da vaši Java programi imaju jednak broj levih i desnih vitičastih zagrada. Sekcija koda između dve odgovarajuće vitičaste zagrade naziva se blok.

• Dobra praksa je da uvlačite kôd bloka prilikom pisanja programa. To olakšava praćenje koda. Uočite da je u datom primeru svaki blok uvučen tri blanka (beline). Ako koristite JCreator, on će automatski umesto vas uvlačiti kôd u blokovima.

• Svaki Java iskaz se završava tačka-zarezom. Iskaz je programski izraz koji proizvodi neku akciju (na primer, ranije pomenuti iskaz Println). Uočite da nisu svi Java izrazi iskazi (na primer, red koji definiše glavni metod nema tačku-zarez).

Kreiranje Java projekata pomoću JCreatora

U glavnom meniju izaberite File a zatim New. Kada se pojavi prozor New, kliknite na jezičak Workspaces :

[pic]

Kliknite na (…) pored okvira Location i izaberite c:\ disk (ili neku drugu lokaciju). Upišite MyJavaWorkspace u polje Workspace name. Kliknite mišem na dugme OK i kreiraće se prazan radni prostor u folderu pod nazivom MyJavaWorkspace na vašem disku c: .

Ovaj novi radni prostor pojavljuje se u prikazu radnog prostora programa JCreator:

[pic]

Možemo sada da dodamo projekt u radni prostor. Uradite desni klik u prikazu radnog prostora i izaberite Add new Project :

[pic]

Izaberite jezičak kartice Projects, zatim Empty Project i upišite WelcomeProject u polje Project name (kao što je prikazano). Kliknite na OK da biste dodali projekt.
Prozor za prikaz radnog prostora trebalo bi sada da prikaže projekt (WelcomeProject) u radnom prostoru:

[pic]

Po proceduri, sada treba da dodamo datoteku (našu datoteku sa Java programom) projektu.
Odaberite File iz glavnog menija JCreatora a zatim stavku New. Pojavljuje se sledeći prozor:

[pic]

Kao što je prikazano, izaberite karticu Files, izaberite Java File i upišite Naziv fajla u polje Filename (dobro je da steknete naviku da nazivi vaših datoteka imaju drugačije nazive od foldera projekta i radnog prostora), pri čemu treba voditi računa da naziv fajla odgovara nazivu deklarirane glavne klase u kodu programa. Kliknite na OK.

Snimanje Java projekata u JCreatoru

Pre nego što napustimo JCreator, potrebno je da znamo kako se snimaju projekti koje smo napravili. Postoje dve stvari koje treba razmotriti: snimanje projekata i snimanje radnih prostora (foldera koji sadrže projekte). Kadgod kompajlirate i/ili izvršavate Java projekt, JCreator automatiski snima i izvorne datoteke i datoteke kompajliranog koda. Prema tome, veći deo vremena ne morate brinuti o snimanju svojih projekata – Jcreator je to preuzeo na sebe. Ako želite da snimite kôd koji ste upravo napisali (pre kompajliranja), jednostavno izaberite u glavnom meniju File a zatim kliknite na Save All. Ili, samo kliknite na dugme Save All na paleti alatki:

[pic]

Treba da snimite radni prostor svaki put kada napravite promenu, na primer, ako dodate/obrišete datoteke projekta ili dodate/obrišete projekte. Da snimite radni prostor odaberite u glavnom meniju File a zatim Save Workspace. Ako pokušate da napustite JCreator a niste snimili projekte ili radne prostore, JCreator će vas preko okvira za dijalog upozoriti na to i pružiti vam mogućnost da snimite datoteke pre napuštanja.

JCreator i Java datoteke

Sada ćemo se upoznati kako su te sve informacije vezane za strukturu programa, datoteke, kompajliranje i izvršavanje uklopljenje u JCreator, koji je naše razvojno okruženje. Ranije smo videli da su Java projekti grupisani u radne prostore. A projekti se sastoje od .java datoteka.
Koristeći My Computer ili Windows Explorer, pređimo u folder koji sadrži Welcome Project koji ste upravo napravili, kompajlirali i izvršili.
Trebalo bi da vidite sledeće datoteke:

Welcome.java
Welcome.class
WelcomeProject.jcp src_welcomeproject.txt Welcome.java je izvorni kôd koji se pojjavljuje u oblasti za prikaz datoteke JCreatora.
Welcome.class je kompajlirana verzija tog izvornog koda (Welcome.java) – to je datoteka koja je potrebna Java virtualnoj mašini.
WelcomeProject.jcp je projektna datoteka Jcreatora koja se koristi za evidenciju koje sve datoteke čine projekat a src_welcomeproject.txt je druga datoteka Jcreatora koja je potrebna za organizaciju.
Pored toga, u folderu vašeg radnog prostora biće i datoteka:
MyJavaWorkspace.jcw

(Naravno, ovde se podrazumeva da ste radnom prostoru dodelili naziv MyJavaWorkspace).
To je još jedna datoteka Jcreatora koja se koristi za evidenciju projekata u radnom prostoru JK Code.
Imajte na umu da su ovde prave Java datoteke samo one koje imaju oznaku tipa .java i .class.
Ostale datoteke stvara i menja naše konkretno razvojno okruženje, u ovom slučaju JCreator. Ako želite da delite svoj Java program sa prijateljem ili da ga prebacite u neko drugo razvojno okruženje, jedine datoteke koje treba da prebacite su .java datoteke. Te datoteke može da koristi svaki Java programer ili programsko okruženje da bi napravio program koji može da se izvršava.

Kreiranje Java programa

Promenljive

Svi računari rade sa nekom vrstom informacije. Brojevi, tekst, datumi i slike su uobičajeni tipovi informacija sa kojima oni rade. Računarskim programima je potreban prostor da smeste informacije dok sa njima rade. Šta ako nam je potrebno da znamo koliko košta deset banana ako je cena jedne 25 dinara? Nama je potreban prostor da smestimo broj banana, cenu banane i rezultat množenja ta dva broja. Da bismo smestili takve informacije, koristimo nešto što se naziva promenljiva. Ona se naziva promenljiva zato što informacija tu

smeštena može da se menja za vreme izvršavanja programa. Promenljive su primarni metod za premeštanje informacija u Java projektu. Prilikom korišćenja promenljivih određena pravila se moraju poštovati.

Nazivi promenljivih

Svakoj promenljivoj koju koristite u svom projektu morate dodeliti naziv (ime).
Pravila za imenovanje promenljivih su:

• Mogu se koristiti samo slova, brojevi i znak podvlake (_) (mada se on vrlo retko koristi).
• Prvi znak mora biti slovo.
• Ne mogu se koristiti službene (rezervisane) reči Java programskog jezika (na primer, ne možete dodeliti promenljivoj naziv println ili System).

Po konvenciji, nazivi promenljivih počinju sa malim slovom.
Ako se naziv promenljive sastoji od više reči, tada su reči spojene a svaka reč posle prve počinje sa velikim slovom.

Najvažnije pravilo je da se koriste nazivi promenljivih koji nešto znače. Trebalo bi da možete da identifikujete informaciju smeštenu u promenljivoj po nazivu promenljive.
Za naš primer sa bananama, dobri nazivi bi bili:

Količina Naziv promenljive

Jedinična cena banane bananaCost
Broj poručenih banana numberBananas
Cena svih banana totalBananaCost

Uočite konvenciju, tj. naziv svake promenljive počinje sa malim slovom a velikim slovom počinje svaka potonja reč u nazivu promenljive.

Tipovi promenljivih

Potrebno je da znamo tip informacije koju čuva (drži) svaka promenljiva. Da li sadrži broj? Da li broj ima decimalnu tačku (zarez)? Da li sadrži tekstualnu informaciju?

Pogledajmo neke tipove promenljivih.

Prva promenljiva je tipa int (integer).
Ovaj tip promenljive se koristi za predstavljanje celih, ne-decimalnih, brojeva.

Primeri tih brojeva su:

1 -20 4000

Uočite da pišemo 4,000 (anglosaksonski oblik zapisivanja brojeva) kao 4000 u Javi – ne možemo koristiti zareze kod velikih brojeva. U našem primeru sa bananama, numberBananas treba da bude promenljiva tipa int.

Šta ako promenljiva koju želimo da koristimo treba da čuva broj koji ima decimalnu tačku (tj. decimalni zarez). Na ovom kursu, takve promenljive će biti tipa double.
U tehničkom žargonu kažemo da su takve promenljive dvostruke preciznosti (double-precision), brojevi sa pokretnim zarezom (floating point numbers) – decimalna tačka je stvar koja se “pomera”).
Sve što vi treba da znate o promenljivama tipa double je da one drže brojeve sa decimalnom tačkom.

Primeri tih brojeva su:

-1.25 3.14159 22.7

U našem primeru sa bananama, promenljive bananaCost i totalBananaCost treba da budu promenljive tipa double.

U Javi (i većini drugih programskih jezika višeg nivoa) brojevi su cjelobrojni ili brojevi u pokretnom zarezu (integers or floating-point numbers).
Ove dvije vrste vrijednosti pohranjuju se u memoriji na različite načine.
Ako vrijednost napišemo bez decimalne točke , npr. 4 ona će biti tretirana kao cjelobrojna vrijednost.
Ako je napišemo s decimalnom točkom npr. 4.0 bit će tretirana kao broj u pokretnom zarezu.
Uvijek trebamo koristiti cijele brojeve kad to možemo. Računanja s njima su brža, koriste manje memorije i nisu podložni greškama zaokruživanja poput brojeva s pokretnim zarezom.

Naziv 'broj s pokretnim zarezom' proizlazi iz načina pohrane takvih brojeva u memoriji.
U Javi tip double se najčešće koristi za brojeve u pokretnom zarezu. Vrijednost tipa double zauzima 64 bita.
To omogućava veoma velik opseg vrijednosti, približno 1.8×10308, što izraženo preko preciznosti iznosi 15 značajnih znamenki.
Naziv double je skraćenica za ‘double precision floating-point’.

Java posjeduje i drugi tip za rad s brojevima s pokretnim zarezom koji se naziva float. Taj tip podataka zauzima samo 32 bita tako da predstavlja ekonomičnije korištenje memorije, ali ima samo pola preciznosti tipa double te ekvivalentno manji opseg od oko ?3.4×1038.

Broj s pokretnim zarezom može se pisati s decimalnom točkom, npr. 14.56 ili 14.0, a može biti pisan i s eksponentom, npr. 14.56E-12.

U Java programiranju se koristi i bulov (boolean) tip promenljive.
Taj tip je dobio naziv po poznatom matematičaru (Boole).
Može da ima jednu od dve vrednosti: true (tačno) ili false (netačno).
Videćemo da su promenljive tog tipa osnova računarevih sposobnosti za donošenje odluka. Ako želite da znate da li je banana trula, možete imenovati bulovu promenljivu isBananaRotten, koja će sadržavati informaciju ''točno'' ili ''netočno'' te tako predstavljati stvarno stanje banana.

Sledeći “tip” promenljive koji koristimo nije uopšte tip.
Preciznije, to je Java klasa – String klasa (činjenica je da počinje sa velikim slovom).
String promenljiva je upravo to – ona čuva string (nisku, listu) različitih znakova. String može biti slovo, karakter, riječ, string brojeva, rečenica, pasus, bilo koji znaci uopšte.
Često, string neće sadržati bilo kakav znak (prazan string). Mi ćemo mnogo koristiti stringove u Javi, zato treba dobro da ih znate. Stringovi su uvek omeđeni (ograničeni) navodnicima.

Primeri za string su:

“I am a Java programmer” “012345” “Title Author”

Ako želite uključiti kontrolni karakter u literalni string, potrebno je korištenje \ karaktera nakon kojega slijedi slovo.
‘\’ se naziva escape karakter.
Koristi se i za uvođenje određenih karaktera u stringu poput " koji bi inače značio kraj stringa.

Slijedi lista najznačajnijih kombinacija karaktera:

\n novi red (newline)
\t tabulator – pomak (tab)
\b nazad (backspace)
\r return – pomak na početak slijedeće linije
\f line feed – pomak na slijedeću liniju bez odlaska na početak
\ \ znak
\′ ′ znak
\″ ″ znak

Npr. izraz System.out.print(″Jedan\ndan″);

napisat će ‘Jedan’ u jednu liniju te ‘dan’u slijedeću liniju.

Ako želite pohraniti string da bismo ga koristili kasnije u programu koristit ćemo varijablu tipa String.
Slijedi primjer izraza koji kreira novu varijablu tipa String, nazvanu automobil kojoj dodjeljuje vrijednost "BMW".

String automobil = ″BMW″;

Nije ispravno da će ovaj izraz pohraniti string ″BMW″ na memorijsku lokaciju varijable automobil.
Što se stvarno događa uključuje jednu vrlo bitnu osobinu rada s memorijom Svaka lokacija u memoriji ima svoju adresu (reference value or address).

To je slično kao što svaka kuća u gradu ima svoju poštansku adresu

Kad se izvrši gornji izraz izvrše se slijedeći koraci:

(1) Kreira se varijabla nazvana automobil
(2) String ″BMW″ pohrani se u drugi dio memorije !
(3) Referenca (adresa) gdje je string pohranjen dodijeli se varijabli automobil.

Način zapisivanja vrijednosti varijable string.

Ovaj način tretiranja String varijable znači da je sama varijabla uvijek iste veličine – dovoljno velika da sadrži vrijednost reference (adrese)

Npr. ako kasnije izvršimo naredbu:

automobil = ″Alfa Romeo″;

varijabla automobil će nakon toga opet sadržavati vrijednost reference, dakle istu količinu memorije.
Razlika je u tome što će to biti referenca na neki drugi dio memorije koji sada sadrži drugi(duži) string ″Alfa Romeo″.

Postoji jedan vrlo koristan operator koji se može primijeniti na stringove. Naziva se operator spajanja (concatenation) i označava se znakom ‘+’.

Ako su st1 i st2 stringovi, onda st1+ st2 znači string koji se sastoji od svih karaktera st1 nakon kojih slijede karakteri iz stringa st2.

Npr. ako je varijabli automobil dodijeljena referenca na string "BMW" onda će izraz
″Novi ″ + automobil + ″ je skup.″ znači string:

″Novi BMW je skup.″

Izrazi poput ovoga mogu se koristiti bilo gdje u programu gdje je potreban neki složeni izraz.
Npr. slijedeći izraz :

System.out.println(″Novi ″ + automobil + ″ je skup.″); će ispisati na ekranu ″Novi BMW je skup.″

Kako često trebamo ispisivati poruke koje sadrže i brojeve Java dopušta da se kombiniraju brojevi i stringovi korištenjem + operatora.

Npr. cijena je cjelobrojna vrijednost koja sadrži vrijednost 30000.

Tada će izraz:

″Cijena novog ″ + automobil + ″ je ″ + cijena + ″ eura″.

značiti string:

″Cijena novog BMW je 30000 eura″.

Primijetite da je Java uzela vrijednost iz varijable cijena i pretvorila je u string sa znamenkama pogodnim prikazu cijelih brojeva.
I u primjerima 2 i 3 mogli smo koristiti sličan način :
Izraze:

System.out.print("Racun je: ");
System.out.print(total/100);
System.out.print(" kn i ");
System.out.print(total%100);
System.out.println(" lipa.");

Mogli smo zamijeniti s jednim izrazom:

System.out.println ("Racun je: "+ (total/100) + " kn i " +
(total%100) + " lipa." );

Točnije, zagrade oko izraza total/100 i total%100 nisu potrebne jer Java primjeni pravilo da operatori / i % imaju veći prioritet od operatora +.

Slijedi program koji obavlja luckastu konverzaciju s korisnikom. Program čita korisnikovo ime i dodjeljuje ga varijabli ime. Također program starost korisnika i dodjeljuje ga varijabli godina. Nakon toga koristi te dvije vrijednosti da bi konstruirao par rečenica koje će ispisati na ekran.

Program započinje konstrukcijom ConsoleReader objekta da bi mogao čitati što korisnik utipka.
U ovom slučaju taj objekt je označen nazivom korisnik.

Metoda korisnik.readLine() koristi se za čitanje imena , a metoda user.readInt() za čitanje broja godina.

public class Prica
{
/* Pricaj s korisnikom. */ public static void main(String[] args)
{
ConsoleReader korisnik = new ConsoleReader(System.in);
System.out.println("Cao. kako se zoveš?");

String ime = korisnik.readLine();
System.out.println("Koliko imaš godina " + ime + "?"); int godina = korisnik.readInt();
System.out.print(godina + " su lijepe godine, ");
System.out.println("ali " + (godina+1) + " je bolje.");
System.out.println("Vidimo se kasnije " + ime + "!");
}
}

Ovo bi se trebalo pojaviti na ekranu kad se program pokrene. (Korisnikov unos je podebljan.)

Cao. kako se zoveš?
Ivica.
koliko imaš godina Ivica?
20
20 su lijepe godine , ali 21 je bolje.
Vidimo se kasnije Ivica!

Stringovi imaju mnogo korisnih metoda koje su vezane za njih.
Jedna od vrlo korisnih se naziva substring.
Java koristi konvenciju da su karakteri unutar stringa numerirani s 0, 1, 2, … s lijeva nadesno.
Pretpostavimo da st označava string , a da su m i n cjelobrojne vrijednosti.

Tada izraz : st.substring(m,n)

daje novi string koji se sastoji od karaktera stringa st, počevši od pozicije m i završavajući s pozicijom n-1. (n je prva pozicija koja nije uključena !).
Npr. ako varijabla automobil označava string ″Mercedes″, onda izraz

automobil.substring(5,8) će dati string ″des″,kako je to dolje pokazano.

M e r c e d e s
0 1 2 3 4 5 6 7 8

Navest ćemo još neke standardne metode koje možemo koristiti u radu sa stringovima.
U svakom primjeru st označava string.

st.length() Daje broj znakova u stringu ("duljina" stringa st)

Npr. ″Mercedes″.length() vraća vrijednost 8.

st.toLowerCase() Daje string sa svim velikim slovima pretvorenim u mala slova.

Npr. ″Mercedes″.toLowerCase() vraća string ″mercedes″

st.UpperCase() Daje string sa svim malim slovima pretvorenim u velika slova.
Npr. ″Mercedes″.toUpperCase() vraća string ″MERCEDES″

Ako ste izračunali broj i želite ga pretvoriti u odgovarajući string sve što je potrebno je kombinirati prazni string i broj koristeći + operator.

Npr. ako varijabla rezultat sadrži vrijednost 142, onda izraz ″″ + rezultat će proizvesti string ″142″.

To radi jer Java koristi pravilo koje kaže da ako kombinirate string i broj pomoću operatora +, broj će biti konvertiran u string, a zatim će oba stringa biti spojena. U ovome slučaju string nastao iz zbroja je spojen s praznim stringom.

U drugom smjeru nije tako jednostavno. Potrebno je koristiti neki od slijedećih metoda.

Integer.parseInt(st) Ako string st predstavlja cjelobrojnu vrijednost ovo će dati odgovarajuću vrijednost.

Double.parseDouble(st) Ako string st predstavlja broj u pokretnom zarezu ovo će dati odgovarajuću vrijednost.

Na kraju ovog dijela još pokoje pravilo o kombiniranju brojeva i stringova korištenjem + operatora.
Razmotrimo slijedeće izraze:

″Rezultat je ″ + 3 + 7
3 + 7 + ″ je rezultat″

na prvi pogled izgleda kao da želimo reći istu stvar.
Međutim ako ih ispišemo koristeći metodu System.out.println vidjet ćete da ćete dobiti sasvim nešto drugo.
Da biste predvidjeli što će se u ovakvim slučajevima potrebno je koristiti slijedeće pravila:
Ako Java treba odrediti vrijednost izraza x+y gdje su x i y bilo brojevi ili stringovi, tada će se dogoditi slijedeće:

Ako su x i y oboje stringovi onda će ih spojiti.
Ako je jedan string, a drugi broj onda će pretvoriti broj u string i spojiti ga s drugim stringom
Ako su x i y oboje brojevi bit će zbrojeni.
Ako se računa izraz koji sadrži više + operatora izraz se računa slijeva nadesno !

Ponovo razmotrimo izraz:
″Rezultat je ″ + 3 + 7

Prvo što će Java obraditi je ″rezultat je ″ + 3. Pretvorit će broj 3 u string "3", spojiti ga s prvim stringom i dati ″Rezultat je 3″.
Zatim će obraditi ″Rezultat je 3″ + 7, i konačno dati string:

″Rezultat je 37″

Sad razmotri:

3 + 7 ″ je rezultat″

Ovaj put će Java prvo zbrojiti 3 i 7 i dati broj 10. Zatim će obraditi 10 + ″ je rezultat ″ i konačno dati:

″10 je rezultat ″

Deklarisanje promenljivih

Kada imenujete promenljivu i odredite kog tipa želite da bude, morate te informacije proslediti Java projektu.
Potrebno je da deklarišemo svoje promenljive. Java naredba koja se koristi za deklarisanje promenljive imenovane variableName a tipa type je:

type variableName;

Nemojte zaboraviti tačku-zarez (;) – svaka Java naredba se završava sa time. Potrebna nam je naredba deklaracije kao ova za svaku promenljivu u našem projektu. To izgleda mnogo zametno, ali vredi potruditi se. Odgovarajuće deklarisanje promenljivih olakšava programiranje, smanjuje mogućnost pojavljivanja grešaka i olakšava menjanje programa.
Gde treba da se stave deklaracije promenljivih? U prvih nekolikoa projekata, pisaćemo samo kôd unutar glavnog metoda (main method) Java projekta. Stoga će deklaracije promenljivih biti smeštene posle reda u kome je definisan glavni metod. Usled toga promenljive imaju lokalni karakter (local scope), što znači da su na raspolaganju samo metodu u kome su definisane. Ovaj nivo oblasti definisanosti je sasvim zadovoljavajući za naše početne projekte.
Primeri deklaracije promenljivih:

int numberBananas; double bananaCost; double totalBananaCost; boolean isBananaRotten;
String myBananaDescription;

Uočite da su deklaracije int, double i boolean napisane malim slovima, a String velikim slovom.

Java dozvoljava da deklarišete više promenljivih istog tipa u jednom redu razdvajajući nazive sa zarezom.
Na primer, možemo kombinovati dve od prethodnih deklaracija (za double promenljive) u:

double bananaCost, totalBananaCost;

U glavnom metodu Java programa, ove deklaracije promenljivih treba da se pojave na vrhu:

public static void main(String[] args)
{
int numberBananas; double bananaCost, totalBananaCost; boolean isBananaRotten;
String myBananaDescription;
[Ostatak glavnog metoda]
}

Sada ćemo razmotriti kako se dodeljuju promenljivama vrednosti.

Naredba dodeljivanja

Najprostija i najviše korišćena naredba u Javi je naredba dodeljivanja (assignment statement).
Ta naredba ima oblik:

variableName = variableValue;

Uočite da samo jedna promenljiva može biti na levoj strani operatora dodeljivanja (=).
Evo nekoliko prostih primera dodeljivanja korišćenjem naše “banana” promenljive:

numberOfBananas = 22; bananaCost = 0.27; isBananaRotten = false; myBananaDescription = “Yes, we have no bananas!”;

Stvarne vrednosti ovde dodeljene promenljivama nazivaju se literali, pošto one literarno pokazuju svoje vrednosti.
Operator dodeljivanja možete prepoznati kao znak jednako koji koristite u aritmetici, ali se on ne naziva tako u računarskom programiranju.
Zašto? U stvari, desna strana (variableValue u našem primeru) operatora dodeljivanja nije ograničena na literale. Svaki ispravan Java izraz, sa bilo kojim brojem promenljivih ili drugih vrednosti, može biti sa desne strane operatora.

U tom slučaju, Java prvo izračunava variableValue, a zatim dodeljuje rezultat variableName. Ovo je veoma važan koncept programiranja i treba da ga zapamtite – “izračunajte desnu stranu, a zatim dodelite levoj strani”.

Kadgod Java obavlja dodjeljivanje ono se obavlja u dva koraka:

(1) Prvo se računa vrijednost s desne strane od znaka ‘=’.
(2) Zatim se ta vrijednost sprema u varijablu naznačenu s lijeve strana izraza

Moguće je mijenjati vrijednost spremljenu u varijablu, ali nije moguće mijenjati tip (type) varijable.
Moguće je deklarirati varijablu bez specificiranja njene inicijalne vrijednosti. Ako Java izvrši slijedeći izraz:

int total;

kreirat će varijablu tipa int i dati joj naziv total, ali neće spremiti nikakvu vrijednost u istu.
Vrijednost varijabli će biti potrebno dodijeliti kasnije u programu. U međuvremenu nije moguće znati što sadrži varijabla total . U njoj će biti neki bitovi koji su ostali u memoriji otprije.
Kažemo da vrijednost varijable ‘nije definirana’.

Opći oblik deklaracije varijable je dakle:

deklaracija (s inicijalnom vrijednosti)

TIP NAZIV = IZRAZ ;

Npr. TIP može biti double, NAZIV može biti eura, a IZRAZ može biti 64.45., dakle

double eura = 64.45;

deklaracija (bez inicijalne vrijednosti)

TIP NAZIV;

dodjeljivanje

NAZIV = IZRAZ;

Java omogućava deklaracije varijabli u kojima se istovremeno deklarira više varijabli odjednom.
Primjer: kreiranje varijabli w, x, y i z, i dodjeljivanje inicijalnih vrijednosti varijablama x i z.

int w, x = 1, y, z = 2;

Često je nekoj varijabli potrebno samo nadodati neku vrijednost i postoji skraćeno pisanje za takav tip operacije.
Npr. za dodati 3*jabuka varijabli total pisat ćemo slijedeći izraz:

total += 3*jabuka;

Slično možemo koristiti simbol −= kada želimo oduzeti vrijednost od varijable , *= kada želimo pomnožiti varijablu s izrazom , itd.

Općenito izraz:

x OP= y; ekvivalentan je izrazu

x = x OP y; gdje je OP bilo koji binarni operator

Jedan od najčešćih slučajeva promjene vrijednosti varijable je povećavanje za jedan.
Možemo pisati:

x = x+1; ili kraće x += 1; ili još kraće x++;

Slično za oduzimanje 1od x, pišemo x--.

Takođe je važno da imate na umu da ako tip od variableValue ne odgovara tipu od variableName.
Java će konvertovati (ako je to moguće) variableValue u odgovarajući tip. Na primer, ako je variableName tipa int (celobrojna) a variableValue je izračunato 25.6, variableName će imati vrednost 25 (uzima se celobrojna vrednost). Pogledajmo sada neke operatore koji mogu da pomognu kod izračunavanja Java izraza.

Inicijalizacija promenljive

Ranije smo razmatrali potrebu da se deklariše svaka promenljiva koja se koristi u Java programu. Opšta naredba koja se koristi za deklarisanje promenljive je oblika:

type variableName;

Ovde mi kažemo da se promenljiva variableName deklariše da je tipa type.
Tipovi promenljivih sa kojima ćemo se susretati su int (celi brojevi), double (decimalni brojevi), boolean (vrednosti tačno i netačno) i String promenljive.
Evo nekoliko primera deklaracije promenljivih:

int numberLightBulbsPerPack; int numberPacks; double costOfPack; boolean anyBurnedOut;
String myQuestion;

Kada deklarišete promenljivu, njoj se dodeljuje neka lokacija u memoriji računara u kojoj se nalazi neka nepredvidiva vrednost. Često, to je sasvim dovoljno, ukoliko ne zaboravite da promenljivoj dodelite neku korisnu vrednost negde u svom programskom kodu. Postoje slučajevi kada treba da dodelite inicijalnu vrednost promenljivoj kada je deklarišete. To je prilično dobra programerska praksa da radite takvu inicijalizaciju, ako znate vrednost koju promenljiva treba da ima (često to nećete znati). Postoje i situacije kada će Java insistirati da inicijalizujete promenljive. U tim situacijama radi se o jednostavnom proširenju deklaracije:

type variableName = variableValue;

Naredaba deklaracije u ovom slučaju je i naredba inicijalizacije, kreira se promenljiva pod nazivom variableName tipa type i dodeljuje joj se početna (inicijalna) vrednost od variableValue.
Vodite računa da dodelite vrednost odgovarajućeg tipa. Ne možete dodeliti decimalnu vrednost promenljivoj celobrojnog tipa! Ove naredbe se smeštaju zajedno sa uobičajenim deklaracijama na vrhu metoda da bi se obezbedila lokalna definisanost.
Evo nekoliko primera deklarisanja i inicijalizacije promenljivih u Java programu:

int numberLightBulbsPerPack = 8; int numberPacks = 7; double costOfPack = 2.45; boolean anyBurnedOut = false;
String myQuestion = “How many Java programmers does it take to change a light bulb?”;

I sami vidite kako je lako koristiti takve naredbe. Kao programer, biće potrebno da odlučite kada želite da inicijalizujete promenljive a kada ne.

Aritmetički operatori

Jedna od stvari u kojoj su računarski programi jako dobri je aritmetika. Oni mogu veoma brzo da sabiraju, oduzimaju, množe i dele brojeve. Mi treba da naučimo kako da napravimo da naš Java projekt radi aritmetiku.
Postoji pet aritmetičkih operatora koje ćemo koristiti iz Java jezika.

U Java programu slijedeći operatori mogu se koristiti u aritmetičkim izrazima:

+ zbrajanje (addition)
− oduzimanje (subtraction) (koristi se i za minus predznak)
* množenje (multiplication)
/ dijeljenje (division)
% ostatak (remainder)

Sabiranje se obavlja pomoću znaka plus (+) a oduzimanje se obavlja pomoću znaka minus (-). Evo nekoliko prostih primera:

Operacija Primer Rezultat
Sabiranje 7 + 2 9
Sabiranje 3 + 8 11
Oduzimanje 6 - 4 2
Oduzimanje 11 - 7 4

Množenje se obavlja pomoću znaka zvezdice (*) a deljenje se obavlja pomoću znaka u vidu kose crte (/). Evo primera:

Operacija Primer Rezultat
Množenje 8 * 4 32
Množenje 2 * 12 24
Deljenje 12 / 2 6
Deljenje 42 / 6 7

Siguran sam da ste radili sabiranje, oduzimanje, množenje i deljenje i pre nego što ste razumeli kako svaka od tih operacija radi.
Ovde ćemo koristiti još jedan operator koji se naziva operator ostatka (%). Taj operator daje ostatak koji se dobija prilikom deljenja dva cela broja. Možda vam to sada neće biti jasno, ali taj operator se mnogo koristi u računarskom programiranju. Evo primera:

Primer Rezultat deljenja Ostatak - rezultat
7 % 4 1 ostatak 3 3
14 % 3 4 ostatak 2 2
25 % 5 5 ostatak 0 0

Proučite ove primere kako biste razumeli kako operator ostatka radi u Javi.

Operator dijeljenja , / , u stvari ima dva značenja. Ako ga koristimo s cijelim brojevima tada znači cjelobrojno dijeljenje . Npr. 11 / 4 = 2, (−11) / 4 = −2.
Ako se koristi s dva broja s pokretnim zarezom onda znači normalno dijeljenje. Npr. 10.5 / 2 = 5.25. Operator ostatka koristi se samo s cijelim brojevima. Npr. 11%4 = 3 and (−11)%4 = −3.

Format pohrane je rijetko važan programeru. Bitniji je opseg vrijednosti koji se može pohraniti u zadanu varijable.

Vrijednost int varijable može biti u području od −2147483648 do 2147483647.

Ako su potreban veći opseg vrijednosti potrebno je umjesto int upotrijebiti long tip varijable. Taj tip zauzima 64 bita, a opseg je od - 9223372036854775808 do 9223372036854775807.
Postoje i kraći tipovi cjelobrojnih varijabli short (16 bita) i byte (8 bita).

Šta se dešava ako naredba dodeljivanja ima više od jednog aritmetičkog operatora? Da li to nešto menja? Pogledajmo primer:

7 + 3 * 4

Koji je rezultat? Zavisi kako računate. Ako krenete sa leva na desno i prvo saberete 7 i 3, zatim pomnožite sa 4, rezultat je 40. Ako prvo pomnožite 3 i 4, zatim saberete 7, rezultat je 19. Konfuzija? Međutim, Java sprečava mogućnost pojave konfuzije svojim pravilima prvenstva (prioriteta, engl. precedence). To znači da postoji određeni redosled po kome se aritmetički operatori primenjuju. Taj redosled je sledeći:

1. Množenje (*) i deljenje (/)
2. Ostatak (%)
3. Sabiranje (+) i oduzimanje (-)

Prema tome, kod naredbe dodeljivanja prvo se urade sva množenja i deljenja, zatim operacija ostatka i na kraju, sabiranja i oduzimanja. U našem primeru (7 + 3 * 4), množenje će se uraditi pre sabiranja tako da će rezultat koji daje Java biti 19.
Ako dva operatora imaju isti nivo prioriteta, na primer, množenje i deljenje, operacije se u naredbi dodeljivanja obavljaju sa leva na desno. Primer:

24 / 2 * 3

Prvo se obavlja deljenje (24 / 2) koje daje 12, zatim množenje (12 * 3), tako da je rezultat 36.

A šta ako želimo da uradimo množenje pre deljenja – da li je to moguće? Da - pomoću Java operatora za grupisanje - zagrade ().

Pomoću zagrada u naredbi dodeljivanja dajemo prioritet operacijama u zagradama i one se prve obavljaju. Prema tome, ako napišemo naš primer kao:

24 / (2 * 3)

množenje (2 * 3) će biti prvo obavljeno, što daje 6, zatim deljenje (24 / 6), koje daje željeni rezultat, 4.
Možete koristiti zagrada koliko hoćete, ali one se uvek moraju koristiti u paru – svaka leva zagrada mora imati svoju desnu.
Ako ugnježdavate zagrade, tj. imate jedan skup unutar drugog, izračunavanje počinje iz najdubljeg skupa i ide ka spolja.
Evo primera:

((2 + 4) * 6) + 7

Prvo se radi sabiranje 2 i 4, što daje 6, koje se množi sa 6, i rezultat je 36. Taj rezultat se zatim sabira sa 7, tako da je konačni rezultat 43.

Možete koristiti zagrade čak i ako one ne menjaju prioritet. Često, one se koriste da bi izraz bio razumljiviji.
Evo nekoliko primera Java naredbi dodeljivanja sa aritmetičkim operatorima:

totalBananaCost = numberBananas * bananaCost; numberOfWeeks = numberOfDays / 7; averageScore = (score1 + score2 + score3) / 3.0;

Ovde treba da uočite nekoliko stvari. Prvo, uočite da zagrade kod averageScore izračunavanja primoravaju Javu da sabere tri rezultata pre deljenja sa 3.
Takođe, uočite upotrebu “belina”, razmaka koji odvajaju operatore od promenljivih. To je uobičajena praksa u Javi koja pomaže da kôd bude čitljiviji. Na ovom kursu imaćete prilike da se susretnete sa mnoštvom primera naredbi dodeljivanja.

Matematičke funkcije

U jednom od prethodnih nastavaka, susreli smo se sa aritmetičkim operatorima koji nam omogućuju da obavimo osnovno sabiranje, oduzimanje, množenje i deljenje.
Kao i drugi računarski jezici, Java ima mogućnosti da obavlja veoma moćna matematička izračunavanja.
Ugrađene Java matematičke funkcije (nazivaju se i metodi) vrlo često se koriste u takvim izračunavanjima.
Ne očekujem da ste matematički genije i zato ćemo se pozabaviti samo sa tri matematičke funkcije.
Prvo, šta je to uopšte funkcija? Funkcija je rutina koja izračunava neku vrednost za vas na osnovu date informacije.
Funkcija se koristi u sledećem formatu:

functionValue = functionName(argumentList);

functionName je ime funkcije a argumentList je spisak (lista) vrednosti (argumenata, razdvojenih zarezima) koje su obezbeđene funkciji kako bi mogla da radi.

U ovoj naredbi dodeljivanja, functionName koristi vrednosti iz argumentList da izračuna rezultat I dodeli ga promenljivoj pod nazivom functionValue. Moramo se postarati da promenljiva functionValue bude istog tipa kao vrednost koju izračunava funkcija functionName.
Kako da znate koje Java matematičke funkcije postoje, koje tipove informacija obezbeđuju i koje argumente koriste? Potražite informacije u Java referentnim priručnicima i na Sunovom Java websajtu. Kao što sam već pomenuo, razmatraćemo samo tri matematičke funkcije. Metodi koji podržavaju matematičke funkcije implementirani su u Java klasi Math. Prema tome, da biste koristili konkretnu funkciju, pišete Math, zatim tačku i posle toga ime funkcije.

Prva funkcija koju ćemo razmatrati je funkcija apsolutne vrednosti. U matematici, apsolutna vrednost je pozitivni deo broja. Java funkcija je:
Math.abs(argument)
gde je argument broj čiju apsolutnu vrednost izračunavamo. Argument može biti ili int ili double tipa a vraćena vrednost će biti istog tipa kao argument. Evo nekoliko primera:

Primer Rezultat
Math.abs(7) 7
Math.abs(-11) 11
Math.abs(-3.14) 3.14
Math.abs(72.1) 72.1

Da li vam je ikada trebao kvadratni koren nekog broja? Kvadratni koren je broj koji pomnožen samim sobom daje originalni broj. Na primer, kvadratni koren od 4 je 2, pošto je 2 puta 2 četiri. Na vašem kalkulatoru postoji dugme (√) koje će to da uradi za vas. U Javi,kvadratni koren je:

Math.sqrt(argument)

gde je argument broj čiji kvadratni koren izračunavamo. Argument mora da bude ne-negativan double broj i vraćena vrednost je double. Evo nekoliko primera:

Primer Rezultat
Math.sqrt(4.0) 2.0
Math.abs(36.0) 6.0
Math.abs(72.1) 8.491

Treća funkcija koju ćemo ovde koristiti je stepenovanje. Kod stepenovanja, broj se množi samim sobom određen broj puta. Ako množimo broj samim sobom četiri puta, kažemo da je broj dignut na 4-ti stepen. Java funkcija za stepenovanje je:

Math.pow(argument1, argument2)

Uočite da pow (skraćenica za power) funkcija ima dva argumenta. argument1 je broj koji množimo samim sobom argument2 puta. Drugim rečima, ova funkcija diže argument1 na argument2 stepen. I argument i vraćena vrednost su brojevi tipa double. Evo nekoliko primera:

Primer Rezultat
Math.pow(4.0, 2.0) 16.0
Math.pow(-3.0, 3.0) -27.0
Math.pow(10.0, 4.0) 10000.0

U ovde datim primerima, argumenti nisu imali decimalne delove. To je namerno urađeno da bi primeri bili jasniji. Vi niste ograničeni na takve vrednosti. Možete, na primer da koristite ovu funkciju da izračunate 7.654 na 3.16!! (Uzgred, odgovor je 620.99)
Za one koje matematika malo više interesuje, rećiću da postoji još Java funkcija. Možete pokušati sami da ih koristite. Postoje trigonometrijske funkcije I inverzne trigonometrijske funkcije, funkcije koje pretvaraju radijane u stepene I obratno, funkcije koje nalaze ekstremne vrednosti, funkcije za zaokruživanje, logaritam itd..

Java sadržava niz metoda koje računaju širok opseg matematičkih funkcija koje koriste double vrijednosti. Sve su statičke metode (ne pripadaju nijednom objektu) iz klase Math koja se nalazi u Java biblioteci.
Kadgod koristite statičku metodu koja pripada klasi biblioteke potrebno je kao prefiks naziva metode staviti i naziv klase.

Math.sin(x) sinus od x
Math.cos(x) cosinus od x
Math.tan(x) tanges od x
Math.exp(x) ex
Math.log(x) prirodni logaritam od x
Math.abs(x) apsolutna vrijednost od x
Math.floor(x) najveći cijeli broj ≤ x
Math.ceil(x) najmanji cijeli broj ≥ x

U svakoj od metoda parametar x je tipa double , a rezultat je tipa double.
Java se neće buniti ako nađe vrijednost tipa int na mjestu gdje je predviđen tip double.
Kadgod se to dogodi Java će konvertirati cijeli broj u odgovarajući broj s pokretnim zarezom
Razmotrite slijedeće izraze:

int m = 3; int n = 4; double x = m*n;

Kada Java bude izvršavala treći izraz. izračunat će m*n koristeći cjelobrojnu aritmetiku te rezultat privremeno spremiti kao 32-bitnu vrijednost odnosno cijeli broj 6.
Zatim će tu vrijednost konvertirati u 64-bitni broj u pokretnom zarezu (6) te ga spremiti u varijablu x.

Što će biti rezultat izvršavanja slijedećeg izraza: double x = m/n;

Odgovor je da će x biti postavljen na vrijednost 0. Razlog tome je da će za izračunavanje izraza m/n biti upotrijebljena cjelobrojna aritmetika, jer su oba operanda cjelobrojna
Pretpostavimo da ipak želimo koristiti normalno dijeljenje brojeva s pokretnim zarezom.
Potrebno je Javu uvjeriti da vrijednosti m i n tretira kao brojeve s pokretnim zarezom. Možemo to učiniti na slijedeći način:

double x = ((double) m) / n;

Izraz (double) naziva se cast operator.
Stavljanjem cast operatora ispred m kažemo Javi da konvertira vrijednost od m u ekvivalentnu double vrijednost. Kad smo to učinili operator se sada odnosi na jednu double vrijednost i jednu int vrijednost. U tom slučaju Java će koristiti dijeljenje za brojeve s pokretnim zarezom.

Kada želimo konvertirati broj u pokretnom zarezu u cijeli broj postoje dva načina.

Prvi je način da od broja s pokretnim zarezom uzmemo cijeli dio, dakle dio koji ostane kad oduzmemo decimalni dio.
Npr., broj u pokretnom zarezu 4.7 tada postaje cijeli broj 4.
Način kako to postižemo je upotreba int cast operatora:

double x = 4.7; int i = (int) x;

Drugi izraz će konvertirati vrijednost od x u cijeli broj 4 i nakon toga pohraniti ga u varijablu i.
Da je x bio postavljen na −4.7, i bi primio vrijednost −4.

Drugi način konvertiranja brojeva u pokretnom zarezu u cijele brojeve je zaokruživanje na najbliži cijeli broj.
Npr. najbliži cijeli broj za 4.7 je 5.

Npr. slijedeći izraz obavit će zaokruživanje pozitivnog broja x i pohraniti zaokruženu vrijednost u varijablu i :

int i = (int) (x + 0.5);

Npr., ako je x jednak 4.7, vrijednost od x + 0.5 bit će 5.2, a vrijednost od (int)(x + 0.5) bit će 5.
(Upozorenje. Ne piši: int i = (int)x + 0.5; )

Kako bi bilo izvedeno zaokruživanje za negativne brojeve ?

U zaokruživanju broja u pokretnom zarezu(i pozitivnih i negativnih) na najbliži cijeli broj možete koristiti i metodu iz Math klase:

Math.round(x)

To je zgodno rješenje osim što Math.round(x)kao rezultat vraća vrijednost tipa long.
Sve što je potrebno da bi se rezultat dodijelio varijabli tipa int je primjena (int) cast operatora :

int i = (int) (Math.round(x));

Nadovezivanje stringova

Možemo da primenimo aritmetičke operatore na numeričke promenljive (tip int i tip double).
Takođe, može se operisati i sa string promenljivama. Često u Java projektima uzimate string promenljivu sa jednog mesta i dodajete je na kraj drugog stringa. Ovo se naziva nadovezivanje (engl. concatenation) stringova. Operator nadovezivanja je znak plus (+) i lako se koristi. Na primer:

newString = “Java for Kids ” + “is Fun!”;

Posle ove naredbe, string promenljiva newString će imati vrednost “Java for Kids is Fun!”.

Uočite da je operator nadovezivanja identičan sa operatorom sabiranja. Potrebno je da uvek obezbedimo da ne dođe do konfuzije kada koristimo oba operatora. String promenljive čine veliki deo Jave. Kako se budete razvijali kao programeri biće potrebno da postanete „bliski” sa stringovima i operacijama sa njima.

Komentari

Poželjno je da uvek sledite odgovarajuća pravila programiranja kada pišete svoj Java kôd.
Jedno od tih pravila je da na odgovarajući način komentarišete svoj kôd. Možete da stavite ne-izvršne naredbe (koje računar ignoriše) u svoj kôd koje objašnjavaju šta vaš program radi. Ovi komentari mogu biti od pomoći u razumevanju vašeg koda. Takođe, oni olakšavaju buduće promene vašeg koda.
Da biste stavili komentar u svoj kôd, koristite simbol za komentar, dve kose crte (//). Sve što je napisano posle simbola za komentar računar će ignorisati. Možete imati kao komentar poseban ceo red Java koda, kao u ovom slučaju:

// Postavi broj banana numberBananas = 14;

Ili, možete staviti komentar u isti red sa naredbom dodeljivanja:

numberBananas = 14; // Postavi broj banana

Takođe, možete imati komentar koji zahvata više redova. Počnite komentar sa simbolom (/*) i završite ga sa simbolom (*/):

/*
Ovo je veoma dug komentar
Zauzima dva cela reda!!
*/

Vi, kao programer, treba sami da odlučite koliko želite da komentarišete svoj kôd. Pokušaću u projektima koji se budu ovde razmatrali da obezbedim adekvatne komentare.

Programski izlaz

Skoro da ste spremni da napravite svoj prvi Java program. Ali, potrebna je još jedna stvar. Upoznati smo sa kao se imenuju i deklarišu promenljive i kako se radi matematika sa njima, ali kada dobijemo rezultate, kako ti rezultati mogu da budu prikazani? Na ovom „času” koristićemo metod koji ste već videli u našem malom programu Welcome, Java metod println (da vas podsetim, izgovara se „print lajn”). Ono što taj metod radi je štampanje stringa rezultata u jednom redu:

System.out.println(stringValue);

U ovom izrazu, stringValue mogla bi biti promenljiva tipa String koja se negde izračunava (možda pomoću operatora nadovezivanja) ili literal (stvarna vrednost).
U primeru Welcome, mi smo koristili literal:

System.out.println(“Welcome to Java for Kids!”);

I videli da se kao izlaz na ekranu pojavilo Welcome to Java for Kids!

Šta ako želite da izlaz bude numerička informacija? To je sasvim lako. Metod println će automatski konvertovati numeričku vrednost u string za potrebe izlaza. Na primer, pogledajte ovaj mali segment koda:

numberBananas = 45;
System.out.println(numberBananas);

Ako pokrenete izvršavanje ovog segmenta, na ekranu će se kao izlaz pojaviti 45.

Takođe, možete kombinovati tekstualnu informaciju sa numeričkom informacijom pomoću operatora nadovezivanja. Na primer:

numberBananas = 45;
System.out.println(“Number of Bananas is ” + numberBananas);

Štampaće na ekranu kao izlaz Number of Bananas is 45. Numerički podatak (numberOfBananas) konvertovan je u string pre nego što je nadovezan na tekstualni podatak.

Prema tome, prilično je lako kao izlaz dobiti tekstualnu i numeričku informaciju. Budite spremni na to da se ponekad mogu pojaviti i izvesni problemi. Da vas podsetim na činjenicu da je operator nadovezivanja identičan sa aritmetičkim operatororm sabiranja. Pogledajte sledeći segment koda:

numberBananas = 32; numberApples = 22;
System.out.println(“Pieces of fruit ” + numberBananas + numberApples);

Možda mislite da sa ovom naredbom štampate ukupan broj voća (numberBananas + numberApples = 54). Međutim, ako izvršite ovaj kôd, dobićete Pieces of fruit 3222. Ono što se desilo je da je Java konvertovala oba numerička podatka u string pre nego što je obavljeno sabiranje. Tada znak plus koji ih razdvaja ima ulogu operatora nadovezivanja i stoga se dobija 3222. Da biste štampali sumu, potrebno je da pomoću zagrada izvedete prisilno numeričko sabiranje:

numberBananas = 32; numberApples = 22;
System.out.println(“Pieces of fruit ” + (numberBananas + numberApples));

U ovom slučaju, dve numeričke vrednosti se sumiraju pre konvertovanja u string i dobija se željeni izlaz Pieces of fruit 54. Prema tome, vidimo da metod println nudi pogodan način za dobijanje izlaza i sa numeričkom i sa tekstualnom informacijom, ali mora korektno da se koristi.
Uočite još jednu stvar u ovom primeru. Zadnji red koda izgleda kao da ima dužinu za dva reda! Ovo je se pojavilo zbog osobine programa za obradu teksta da prelama red. U pravom Java programu taj red će se pojaviti kako je i ukucan, kao jedan red. Imajte to na umu dok čitate tekstove ovog serrijala.

Projekt – Sendvič žurka

Vaš razred je odlučio da napravi žurku. Napravljena su dva veoma velika „podmornica” sendviča i vaš zadatak je da definišete koliko svaki gost (student) može da pojede. Svakako, to možete da uradite pomoću kalkulatora, ali ovoga puta ćemo koristiti Javu.
Projekat ćemo snimiti pod nazivom FirstProject u folderu ovog kursa (\JavaKids\JK Code).

Dizajniranje projekta

Predpostavimo da znate dužinu svakog „podmornica” sendviča. Da bismo olakšali sečenje, reći ćemo da će svaki gost dobiti celi broj inča (ili centimetara) od sendviča (bez decimala).
Uz ovaj podatak, možete izračunati koliko gostiju se može nahraniti od jednog sendviča. Ako je ukupni broj veći od broja gostiju, tj. đaka u razredu, svi će jesti i sve je u redu. A ako nije tako, moraćete da uradite podešavanje. Koraci u programu bi trebalo da budu sledeći:

1. Postaviti vrednost za broj inča sendviča koje gost može pojesti.
2. Odrediti dužinu oba sendviča.
3. Odrediti koliko gostiju može da se nahrani od svakog sendviča.
4. Povećati ili smanjiti broj inča sve dok se ne postigne da ceo razred, tj. svi gosti mogu da jedu.

Prevedimo svaki od ovih koraka u Java kôd i postepeno izgradimo naš projekt. Pošto je ovo vaš prvi projekt, razmotrićemo svaki korak (kreiranje novog projekta i dodavanje datoteke (fajla)) i pisaćemo i diskutovati kôd.

Razvoj projekta

Pokrenite JCreator i proverite da li je vaš radni prostor (MyJavaWorkspace) otvoren. WelcomeProject bi trebalo da je tu. Ako nema vašeg radnog prostora, kliknite mišem na File, zatim Open Workspace da bist ga otvorili. Kreirajte novi projekt:

• Kliknite mišem na File
• Izaberite New
• Kliknite mišem na jezičak Projects
• Selektujte Empty Project
• Dodelite naziv: FirstProject

Prozor vašeg Jcreatora trebalo bi da ima sledeći izgled:

[pic]

Kliknite na dugme OK. Uradite desni klik nad projektom FirstProject u prikazu radnog prostora i selektujte Sets as Active Project.

Dodajte fajl projektu:

• Kliknite mišem na File
• Izaberite New
• Kliknite na jezičak Files
• Selektujte Java File
• Dodelite naziv: SubSandwich

Prozor vašeg Jcreatora trebalo bi da ima sledeći izgled:

[pic]

Kliknite na OK i prazan fajl bi trebalo da se pojavi u oblasti prikaza fajla. To je mesto gde ćete upisivati svoj kôd.

Prvo, upišite sledeće zaglavlje kao višeredni komentar:

/*
* Sub Sandwich Project
* Java for Kids
*/

Sada, upišite u red definiciju klase i levu vitičastu zagradu za otvaranje klase ({). Da vas podsetim, zagrade se koriste za definisanje blokova sa kodom:

public class SubSandwich
{

Sada sledi definicija glavnog metoda i njegova pripadna zagrada:

public static void main(String[] args)
{

Uočite, kako upisujete nove blokove koda, JCreator uvlači odgovarajuće blokove. Proverite da pišete svaki red tačno kako je prikazano. Za računarsko programiranje vezano je mnogo kucanja – korisno je da pohađate kurs daktilografije kako biste usavršili kucačku veštinu. Dobra tehnika kucanja znači brže i bez grešaka kucanje, a time i vađi Java programi neće imati kucačke greške.
Spremni ste da počnete da pišete Java kôd. Koristićemo u ovom programu pet promenljivih: jednu za to koliko svaki student može da pojede, dve za dužine sendviča, i dve za to koliko gostiju može da se nahrani od jednog sendviča. Sve promenljive će biti celobrojnog (integer) tipa.

Upišite sada njihove deklaracije (svaku deklaraciju završite sa znakom tačka-zarez):

int inchesPerStudent; int lengthSandwich1, lengthSandwich2; int students1, students2;

Postavite vrednosti za neke promenljive (takođe, stavite komentar za ono što radite):

// set values inchesPerStudent = 5; lengthSandwich1 = 114; lengthSandwich2 = 93;

Mi smo postavili navedene vrednosti, vi možete postaviti neke druge ako želite. Uočite da smo pretpostavili da svaki gost može da pojede 5 inča od sendviča.
Zatim, pomoću običnog deljenja računamo koliko gostiju može da se hrani iz svakog sendviča:

// odredite koliko gostiju može da se hrani iz svakog ---//sendviča students1 = lengthSandwich1 / inchesPerStudent; students2 = lengthSandwich2 / inchesPerStudent;

Uočite da će students1 i students2 biti (kako smo želeli) celi (integer) brojevi. Prikažite rezultate pomoću metoda println:

// ispiši rezulatet
System.out.println("Letting each student eat " + inchesPerStudent + " inches");
System.out.println((students1 + students2) + " students can eat these two sandwiches!");

Uočite kako nadovezivanje stringova funkcioniše. Takođe, uočite da sumiramo broj gostiju pre ispisivanja. Na kraju, završite program sa dve desne zagrade (}), jednom za zatvaranje metoda i drugom za zatvaranje klase.
Konačni kôd u JCreatoru treba da ima sledeći oblik:

/*
* Sub Sandwich Project
* Java for Kids
*/
public class SubSandwich
{
public static void main(String[] args)
{
int inchesPerStudent; int lengthSandwich1, lengthSandwich2; int students1, students2;
// set values inchesPerStudent = 5; lengthSandwich1 = 114; lengthSandwich2 = 93;
// determine how many students can eat each sandwich students1 = lengthSandwich1 / inchesPerStudent; students2 = lengthSandwich2 / inchesPerStudent;
// print results
System.out.println("Letting each student eat " + inChesPerStudent + " inches");
System.out.println((students1 + students2) + " students can eat these two sandwiches!");
}
}

Snimite svoj projekt (kliknite mišem na dugme Save All na paleti alatki). Kompajlirajte svoj kôd tako što ćete pritisnuti taster , ili izaberite opciju Build iz glavnog menija i kliknite na stavku Compile Project. Treba da dobijete poruku Process completed. Ako se to ne desi, bilo koja poruka o grešci koja se pojavi verovatno će ukazivati na grešku u kucanju koda. Još jednom proverite svoj kôd – tačka-zarez postoje na odgovarajućim mestima kao i znaci navoda, nema neslaganja kod imenovanja promenljivih i funkcija.
Kada je kôd kompajliran, pokrenite njegovo izvršavanje pritiskom na taster , ili izaberite u glavnom meniju Build, zatim Execute Project. Na ekranu bi trebalo da se pojavi sadržaj prikazan na sledećoj slici:

[pic]

Kod prethodnog izvršavanja videli smo da 40 učenika (studenata) može da jede. Šta ako treba da nahranite više ili manje osoba? Podesite promenljivu inchesPerStudent i odredite broj osoba koje mogu da se nahrane za tu novu vrednost. Posle svakog podešavanja (izmene), moraćete da ponovo kompajlirate i izvršavate program. Pretpostavimo da sendviči prilično koštaju po inču veličine. Izmenimo program tako da on izračunava i cenu sendviča. Odredite sa kolikom sumom novca svaki učenik treba da učestvuje da bi pokrio troškove svog jela. Možete koristiti double tip promenljive da bi mogli da koristite decimale. Pokušajte sami da to uradite!
Pošto smatramo da svaki učenik treba da pojede ceo broj sendviča, može da se desi da kod računanja imamo ostatke za svaki sendvič. Kako bi mogli da izračunamo tu količinu? To bi bila mala primena operatora ostatka koga smo ranije upoznali. Treba samo malo kôd prepraviti. Prvo, definišimo promenljivu koja izračunava veličinu ostatka: int inchesLeftOver;

Sada je na redu kôd koji izračunava vrednost:

// izracunava leftovers inchesLeftOver = lengthSandwich1 % inchesPerStudent + lengthSandwich2 % inchesPerStudent;
System.out.println("Postoji " + inchesLeftOver + " inca ostatka.");

Dodajte ovaj kôd svom projektu, ponovo ga kompajlirajte i izvršite. Da li vidite ukupni ostatak u vrednosti od 7 inča? Da li znate zašto kod računanja inchesLeftOver nismo sabrali obe dužine sendviča pre primene operatora ostatka?

Ulazni metodi programa

U primeru Sub Sandwich Project pravili smo klasu, zatim postavljali vrednosti promenljivih u kodu i izvršili program da bi videli rezultat. Rezultat je ispisao Javin izlazni metod println. Ako želimo da koristimo druge vrednosti, potrebno je da promenimo kôd, ponovo kompajliramo program i ponovo izvršimo. To je prilično zametno! Bilo bi lepo ako bi omogućili korisniku da upiše vrednosti dok se program izvršava i prepustimo računaru da uradi računanje na osnovu ulaznih vrednosti. Na taj način nema promene koda i ponovnog kompajliranja da bi se dobio novi rezultat. Nama je potrebno da tako nešto imamo u svojim programima.

Dosada smo u primjerima prikazivali informacije na ekranu koristeći println i print metode koje pripadaju objektu System.out.
Objekt System.out ima pristup ekranu i može proslijediti na njega bilo koje brojeve ili stringove koje mu damo kao parametre. Isto je točno kada čitamo s tipkovnice. U tom slučaju trebamo objekt koji je spojen na tipkovnicu i koji ima metode kojima možemo pristupiti znakovima koje kucamo na tipkovnici.
U Javi postoji takav objekt i naziva se System.in. Nažalost posjeduje veoma limitiran broj metoda.
Posjeduje jednu metodu read koji će pročitati sve što korisnik upiše, ali ga je teško koristiti jer čita samo jedan karakter.

Nažalost, Java nema opšti metod koji podržava upisivanje ulaznih vrednosti preko tastature. Da li treba da budemo nesrećni zbog toga? Ne. Napisaćemo sopstvenu ulaznu rutinu pomoću Jave. Mada taj kôd nije teško napisati, to je prilično van okvira ovog kursa. Zato će ovde biti dat taj kôd. Vi zatim možete da koristite taj kôd u bilo kom programu koji zahteva upis vrednosti preko tastature. Korišćenje tog koda je slično korišćenju matematičkih funkcija iz prethodne lekcije.
Kôd ulaza je sadržan u klasi pod nazivom Typeit (fajl Typeit.java).
Klasa Typeit sadrži tri metoda:

inInt(prompt) prihvata ceo (int) broj inDouble(prompt) prihvata decimalni (double) broj inString(prompt) prihvata string (String) vrednost

Svaki metod ima odzivnik (prompt) u obliku string poruke koja se pojavljuje kada se metod izvršava. Kada se odzivnik pojavi, korisnik upisuje zahtevani ulaz i pritiska taster kako bi računar prihvatio vrednost. Pogledajte primer.
Recimo da imate program gde želite da saznate koliko korisnik ima godina. Dva reda Java koda obavljaju taj posao:

int userAge; userAge = Typeit.inInt(“Koliko imate godina?”);

Uočite da kod korišćenja inInt metoda, prvo pišete ime klase Typeit, zatim tačku i a kraju ime metoda.

Kada se ovaj kôd izvrši, korisnik će videti na ekranu odziv u sledećem obliku:

Koliko imate godina?

Korisnik upisuje celobrojnu vrednost i pritiska taster .
U ovom trenutku ulazna vrednost je dodeljena promenljivoj userAge.

Metod inInt obezbeđuje da korisnik može da upiše samo celobrojnu vrednost. Korišženje druga dva metoda inDouble i inString je slično.

Postavlja se pitanje kako da naš program zna da su ovi ulazni metodi za tastaturu na raspolaganju?
Vaš program treba da pristupi klasi Typeit. Najlakši način da se ovo postigne je da fajl Typeit.java bude deo vašeg projekta.
Da vas podsetim projekat je sastavljen od fajlova (klasa). Do sada, naši projekti su imali samo po jedan fajl (klasu). Sa te tačke gledišta, većina naših projekata će imati dva fajla – naš programski fajl (fajl sa metodom main gde pišemo Java kôd) i fajl Typeit.java koji sadrži naše ulazne metode.
Kako da ubacimo ovaj drugi fajl? Pogledajmo jedan primer kako bi pokazali kako se dodaje Typeit.java u project i kako se koristi svaki od ulaznih metoda.

Primer ulaznih metoda

Pokrenite JCreator, otvorite MyJavaWorkspace i sledite uobičajene korake za kreiranje novog projekta pod nazivom InputProject. Aktivirajte InputProject. Ako je potrebno podsetite se kako se kreira projekt. Dodajte fajl InputTest u projekt. To je fajl u kome ćemo pisati naš kôd za testiranje ulaznih rutina. Sada možemo da dodamo drugi fajl (klasu), Typeit.java.

/*
* Program: Typeit
* Class that provides keyboard input
* Java for Kids
* KIDware (206) 721-2556
*/
import java.io.*; public class Typeit
{
public static void printPrompt(String prompt)
{
// print the prompt
System.out.print(prompt + " ");
System.out.flush();
} public static void inputFlush()
{
int dummy; int bAvail;
// flush the data stream try { while((System.in.available()) != 0)
{
dummy = System.in.read();
}
} catch(java.io.IOException e)
{
System.out.println("Input error");
}
} public static String inString(String prompt)
{
// returns input string inputFlush(); printPrompt(prompt); return inString();
}
public static String inString()
{
int aChar;
String s = ""; boolean finished = false; while(!finished) { try { aChar = System.in.read(); if (aChar < 0 || (char)aChar == '\n')
{
finished = true;
}
else if ((char)aChar != '\r')
{
s = s + (char) aChar;
}
} catch(java.io.IOException e)
{
System.out.println("Input error"); finished = true;
}
} return s;
}
public static int inInt(String prompt)
{
// returns input int while(true) { inputFlush(); printPrompt(prompt); try { return Integer.valueOf(inString().trim()).intValue();
}
catch(NumberFormatException e)
{
System.out.println("Invalid input. Not an integer");
}
}
}
public static double inDouble(String prompt)
{
// return input double while(true) { inputFlush(); printPrompt(prompt); try { return Double.valueOf(inString().trim()).doubleValue();
}
catch(NumberFormatException e)
{
System.out.println("Invalid input. Not a floating point number");
}
}
}
}

Ne očekuje se od vas da u ovom trenutku razumete taj kôd. Ali ipak ćemo ga proanalizirati. Bez obzira na vaš nivo znanja, Ipak ćete neke delove prepoznati.
Bitno je jednu stvar uočiti a to je da glavni metod ne postoji nigde u klasi Typeit. To znači da taj kôd ne može da radi samostalno. On zahteva neku klasu za podršku da bi bio korišćen sa glavnim metodom. Taj kôd će biti napisan u našoj glavnoj klasi, InputTest.java. Uradimo to sada. Otvorimo fajl InputTest.java. On treba da je prazan. Koristićemo taj program da testiramo korišćenje ulaznih metoda. Probaćemo sistemom metod po metod, sledeći preporuke koje smo ranije naveli da je najbolje postepeno stvarati kôd.
Upišite uobičajene informacije u zaglavlje, definiciju klase i definiciju glavnog metoda:

/*
* Input Project
* Java for Kids
*/
public class InputTest
{
public static void main(String[] args)
{

Upišite neki kôd da biste dobili korisnikovu starosnu do bi dodajte dva para zagrada:

int ageUser; ageUser = Typeit.inInt("What is your age?");
System.out.println("You typed " + ageUser);

Završeni kôd u JCreatoru bi trebalo da ima sledeći oblik:

/*
* Input Project
* Java for Kids
*/
public class InputTest
{
public static void main(String[] args)
{
int ageUser; ageUser = Typeit.inInt("What is your age?");
}
}

Kompajlirajte projekt (pritisnite ). Ako se program ne kompajlira, proverite da ste uključili klasu Typeit id a ste kôd upisali tačno kako je pokazano.
Izvršite projekt (pritisnite ). Treba da vidite sledeće:

[pic]

Uočite kako se prompt (komandni odzivnik) pojavljuje. Upišite vrednost i pritisnite . Treba da vidite:

[pic]

Rutina inInt radi!!
Testirajmo sada metod inDouble.
Dodajmo deklaraciju nove promenljive:

double myDouble;

Pošto kôd pita za korisnikovu starosnu dob, dodajte sledeća dva reda:

myDouble = Typeit.inDouble("Type in a decimal number");
System.out.println("You entered " + myDouble);

Ponovo kompajlirajte i izvršite kôd. Upišite neke godine i videćete:

[pic]

Upišite vrednost i pritisnite . Videćete vaš unos „preslikan” kao u ogledalu:

[pic]

Na kraju, testirajmo inString. Dodajmo sledeću deklaraciju promenljive:

String myString;

A zatim dodajte seldeća dva reda koda:

myString = Typeit.inString("Type in some string");
System.out.println("You entered " + myString);

Ponovo kompajlirajte i izvršite program. Upišite svoje godine, upišite decimalni broj i videćete prompt koji vas pita za string:

[pic]

Upišite string i pritisnite . Evo primera ekrana:

[pic]

Pre nego što napustite ovaj primer i pređete na gradnju nekog drugog primera, pogledajte druge korisne Java koncepte. U prethodno datom izlaznom prozoru bilo bi lepo ako bi postojao prazan red između svih ulaznih zahteva za upisivanje. To će uticati da izlaz bude čitljiviji. Jedna od mogućnosti da ubacite prazan red u izlaz je da koristite metod println bez argumenata:

System.out.println();

Ovo može biti zametno ako vam je potrebno više praznih redova.

Lakši način je da se koristi Java „escape” sekvenca za novi red (\n). Jednostavno umetnete sekvencu od ova dva znaka u bilo koji string koji prosleđujete na izlaz sa println. Kada se to pojavi novi red se započinje. Na primer,

System.out.println(“This is a line\n”);

će štampati na ekranu prazan red posle iskaza This is a line. Dok će,

System.out.println(“\nThis is a line”);

štampati prazan red pre ispisivanja iskaza This is a line na ekranu. Uverićete se i sami da je „escape” sekkvenca za novi red veoma korisna.

Projekt – Savings Calculator

U ovom projektu, pravićemo „kalkulator za štediše”. Scenario rada kalkulatora je sledeći: svake sedmice stavljamo novac na račun, banka daje određenu kamatu i mi možemo pomoću ovog kalkulatora da izračunamo koliko ćemo novca imati na računu posle određenog broja sedmica. Ovaj projekt je snimljen pod nazivom SavingsProject u folderu (\JavaKids\JK Code).

Dizajn projekta

Po koracima, kalkulator treba da uradi sledeće:
1. Dobije iznos sedmičnog depozita.
2. Dobije broj sedmica.
3. Pomnoži ta dva broja.
4. Kao izlaz prikaže dobijeni proizvod.
Koristićemo ulazni metod Typeit za prihvat korisnikovog unosa. Metod println će se koristiti za ispis iznosa izlaza. Dodaćemo još jedan korak, tj. pitaćemo korisnika za njegovo ime (primer korišćenja metoda inString).

Razvoj projekta

Pokrenite JCreator, otvorite radni prostor i kreirajte novi projekt pod nazivom SavingsProject. Dodajte prazan fajl pod nazivom Savings (.java ekstenzija će biti po automatizmu dodata) a zatim fajl Typeit.java (trebalo bi da se nalazi u vašem radnom folderu).. Podsetite se primera iz prošlog broja i dodavanja klase Typeit.java svom projektu.
Otvorite prazan fajl Savings.java. Prvo, upišite sledeće informacije u zaglavlje, definiciju klase i definiciju glavnog metoda (sa svim potrebnim levim zagradama:

/*
* Savings Project
* Java for Kids
*/

public class Savings
{
public static void main(String[] args)
{

Koristićemo četiri promenljive u ovom programu: jednu za korisnikovo ime, jednu za iznos depozita, jednu za broj sedmica i jednu za iznos ukupne sume (totala). Upišite sada njihove deklaracije:

// deklarisanje i inicijalizacija promenljivih
String yourName; double deposit = 0.0; int weeks = 0; double total = 0.0;

Sada pristupamo kodiranju prema koracima navedenim u dizajnu projekta. Svaki put kada upišemo neki kôd, možemo da se zaustavimo, kompajliramo i izvršimo program da bi videli da li je sve u redu. To je dobra praksa i trebalo bi da vam pređe u naviku. Prvo, pitamo korisnika za ime koristeći sledeći kôd:

// pitamo korisnika za ime yourName = Typeit.inString("Hello, what is your name?");

Uočite da je yourName tipa string. Zatim, utvrdite koliki će biti sedmični depozit:

// dobijanje iznosa depozita deposit = Typeit.inDouble("\nHow much will you deposit each week?");

Iznos za depozit je tipa double. Uočite korišćenje tzv. escape sekvence za prelazak u novi red pre pojavljivanja ispisa komandnog prompta (\n). Na kraju, dobijamo broj sedmica, vrednost tipa int:

// dobijanje broja sedmica weeks = Typeit.inInt("For how many weeks?");

Korišćenjem ovh informacija može se izračunati ukupni depozit i prikazati korišćenjem metoda println (nemojte zaboraviti desne zagrade):

// izračunavanje i prikazivanje ukupne sume total = deposit * weeks;
System.out.println("\n" + yourName + ", after " + weeks + " weeks, you will have $" + total + " in your savings.\n");

Snimite projekt klikom miša na dugme Save All.
Konačan kôd u prozoru Jcreatora trebalo bi da ima sledeći oblik:

/*
* Savings Project
* Java for Kids
*/
public class Savings
{
public static void main(String[] args)
{
// declare and initialize variables
String yourName; double deposit = 0.0; int weeks = 0; double total = 0.0;
// ask user name yourName = Typeit.inString("Hello, what is your name?");
// get deposit amount deposit = Typeit.inDouble("\nHow much will you deposit each week?");
// get number of weeks weeks = Typeit.inInt("For how many weeks?");
// compute and display total total = deposit * weeks;
System.out.println("\n" + yourName + ", after " + weeks + " weeks, you will have $" + total + " in your savings.\n");
}
}

Izvršavanje projekta

Kompajlirajte i izvršite projekt. Ako se projekt ne izkompajlira uspešno, pokušajte da pronađete gde su greške pomoću poruka o greškama koje će se pojaviti ukoliko ima grešaka. Jedna moguća greška da program ne može “resolve the symbol Typeit”. Ta greška će se pojaviti ukoliko ste zaboravili da dodate fajl Typeit.java svom projektu. Zato još jednom proverite da li ste dodali taj fajl svom projektu.
Kada program radi kako treba vi treba na svom ekranu da dobijete prikaz dat na sledećoj slici:

[pic]

Upišite svoje ime, iznos depozita i broj sedmica. Vaša ukupna suma biće prikazana u obliku lepo formatiranog string. Uočite kako su ime, depozit, sedmice i ukupna suma stavljeni zajedno
(nadovezani) u jednu rečenicu, zajedno sa znakom za dolar ($). Proverite da li je odgovor tačan. Da vas podsetim, veliki korak u programiranju je proveravanje da li sve radi kako treba! Ako ste naveli da štedite 10 dolara nedeljno u narednih 10 nedelja i vaš program kaže da ćete tada imati milion dolara, znate da negde nešto nije u redu!
Kada sam probao program dobio sam:

[pic]

Uočite da je depozit 40.52 (znak za dolar se ne unosi) u toku 10 sedmica, a program saopštava da ću imati $405.20000000000005 na računu!! Ovde se pojavljuje mnogo nula zato što računar nije sposoban da precizno izvrši aritmetiku – dobili smo ono što se naziva greška zaokruživanja (round-off error). Rezultat može biti korektnije prikazan korišćenjem samo dve decimale ($405.20). To je lako uraditi u Javi, ali je u ovom trenutku van našeg interesovanja.
Čini se da ovaj projekt nije komplikovan. I nije. Mi smo samo množili dva broja. Međutim, projekt demonstrira korake koji se koriste u svakom Java projektu. Vredno iskustvo se stiče saznavanjem kako se čitaju ulazne vrednosti, proverava da su vrednosti odgovarajućeg tipa, rade matematiku tako da se dobijaju tačni rezultati i prikazuju ih korisniku.

Nije teško konstruirati klasu s boljim setom metoda. U ovome tečaju koristit ćemo jednu klasu nazvanu ConsoleReader.

Kad je želimo koristiti u programu na početku programa napišemo:

ConsoleReader in = new ConsoleReader(System.in);

Primijetite da se radi o deklaraciji varijable.
Ova deklaracija kreira novi objekt tipa klase ConsoleReader koji može pristupiti System.in objektu koji je spojen na tipkovnicu.
U isto vrijeme kreira se varijabla in tipa ConsoleReader koja označava taj objekt.

Kad se izvrši ta naredba objekt koji nam je potreban odsad je prisutan u memoriji i njegove metode možemo pozivati koristeći njegov naziv in . (Možemo ga i drukčije nazvati)

ConsoleReader objekt posjeduje tri korisne metode:

in.readInt() vraća int vrijednost.

To će biti cijeli broj koji korisnik utipka. Npr. izraz :

int broj = in.readInt(); //će kreirati varijablu broj i pridružiti joj vrijednost koja se ukuca s tastature.

in.readDouble(); // vraća double vrijednost. in.readLine(); // vraća string.

Sastojat će se od znakova koje korisnik ukuca do kraja linije.

Ovo je nova verzija programa za preračun maraka u eure.
Započinje se kreiranjem ConsoleReader objekta, koji je označen sa in. Tada traži od korisnika da utipka vrijednosti maraka i pfeniga. Naredbe koje čitaju vrijednosti naznačene su podebljano (ne i u stvarnom kodu programa) .

public class Mjenjacnica2
{ /* Ucitaj iznos u markama i preracunaj u eure */ public static void main(String[] args)
{
ConsoleReader in = new ConsoleReader(System.in);
System.out.println("Unesi iznose eura i centa");
System.out.print("Iznos u eurima ="); int eura = in.readInt();
System.out.print("Iznos u centima ="); int centa = in.readInt(); centa = 100*eura + centa; double kuna = centa * 0.0751;
System.out.print("Kuna: ");
System.out.print(kuna);
}
}

Na ekranu bi trebalo nakon svega pisati (ono što korisnik ukuca je ovdje naznačeno podebljano)
Unesi iznose eura i centa
Iznos u eurima = 110
Iznos u centima = 55
Kuna: 830.2305

ConsoleReader objekt nije robustan. Npr. ako unesete dva broja u jednu liniju ili ako unesete slova umjesto broja program će javiti run-time grešku.
Prije pokretanja bilo kojeg programa koji koristi klasu ConsoleReader potrebno je da istu imate u istome direktoriju kao i program u kojem je koristite.

Pretpostavimo da želite koristiti primjer 5. Prvo ćete primjer ukucati u datoteku s istim nazivom kao i klasa dakle Mjenjacnica2.java.
U isti direktorij kopirajte i datoteku ConsoleReader.java.
Tada prevedite i pokrenite Mjenjacnica2 na uobičajen način.
Kada Java prevodilac vidi da java koristi ConsoleReader klasu, automatski će je prevest.

PRIMJERI:

[pic]

public class Racunanje
{
public static void main(String[] args) { ConsoleReader unesi = new ConsoleReader(System.in);

System.out.println("Unesite 2 cijela broja!"); System.out.print("Prvi: "); int x = unesi.readInt(); System.out.print("Drugi: "); int y = unesi.readInt();

int suma = x+y; int razlika = x-y; int umnozak = x*y; double prosjek = (x+y)/2.0; int udaljenost = Math.abs(razlika);

System.out.print("Suma: "); System.out.println(suma); System.out.print("Razlika: "); System.out.println(razlika); System.out.print("Umnozak: "); System.out.println(umnozak); System.out.print("Prosjek: "); System.out.println(prosjek); System.out.print("Udaljenost: "); System.out.println(udaljenost); }

}

[pic]

public class Mjenjacnica
{
public static void main(String[] args) { ConsoleReader unesi = new ConsoleReader(System.in);

System.out.println("Unesite iznos u kunama!"); System.out.print("Iznos kuna: "); double kune = unesi.readDouble(); double euri = kune/7.5; System.out.print("Iznos u Eurima: "); System.out.print(euri); }
}

[pic]

public class Upoznavanje
{
public static void main(String[] args) { ConsoleReader unesi = new ConsoleReader(System.in); System.out.println("Ej! Ja san ti JAVA!"); System.out.println("A ko si ti??"); String ime = unesi.readLine(); System.out.println(ime + "! HAHA. Koje ruzno ime!");

}

}

[pic]

public class Tablica
{
public static void main(String[] args) { String a = "+--+--+--+"; String b = "| | | |"; System.out.println(a); System.out.println(b); System.out.println(a); System.out.println(b); System.out.println(a); System.out.println(b); System.out.println(a); }
}

KOD KLASE ''ConsoleReader''

import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.IOException; import javax.swing.JOptionPane;

/** A class to read strings and numbers from an input stream. This class is suitable for beginning Java programmers. It constructs the necessary buffered reader, handles I/O exceptions, and converts strings to numbers.
*/

public class ConsoleReader
{ /** Constructs a console reader from an input stream such as System.in @param inStream an input stream */ public ConsoleReader(InputStream inStream) { reader = new BufferedReader (new InputStreamReader(inStream)); }

/** Constructs a console reader that reads from an option pane */ public ConsoleReader() { reader = null; }

/** Reads a line of input and converts it into an integer. The input line must contain nothing but an integer. Not even added white space is allowed. @return the integer that the user typed */ public int readInt() { String inputString = readLine(); int n = Integer.parseInt(inputString); return n; }

/** Reads a line of input and converts it into a floating- point number. The input line must contain nothing but a nunber. Not even added white space is allowed. @return the number that the user typed */ public double readDouble() { String inputString = readLine(); double x = Double.parseDouble(inputString); return x; }

/** Reads a line of input. In the (unlikely) event of an IOException, the program terminates. @return the line of input that the user typed, null at the end of input */ public String readLine() { String inputLine = "";

if (reader == null) return JOptionPane.showInputDialog("Program input:"); try { inputLine = reader.readLine(); } catch(IOException e) { System.out.println(e); System.exit(1); }

return inputLine; }

private BufferedReader reader;
}

KREIRANJE KLASA I OBJEKATA

Što je to objekt ?

Postoje dva gledišta na objekt:

- prvo je sa strane programera koji koristi objekt, a - drugo sa strane programera koji dizajner objekt.

Prvog programera nazvat ćemo "korisnik", a drugog programera "dizajner" (možda je bolji naziv "konstruktor").

Često se događa da isti programer prvo dizajnira objekt, a zatim ga koristi. Međutim vidjeli smo na primjeru objekata tipa ConsoleReader da je taj objekt dizajnirao neki drugi programer, a mi smo ga vrlo lako koristili.

Pogledajte na vaš sat(ako ga imate).
Ako je dobro dizajniran omogućavat će očitavanje vremena, promjenu vremena, start-stop funkciju štoperice, itd.
Vama kao korisniku nije potrebno poznavati što se događa unutar sata, koji su to mehanizmi koji stoje iza svih njegovih funkcija. Vi ste "korisnik" sata.
S druge strane, osoba koja je dizajnirala sat znat će sve što se događa unutar sata.
Dizajneri će potrošiti dosta vremena pokušavajući konstruirati sat da bi vama omogućio korištenje uobičajenih funkcija sata.

Isto je točno za bilo koji uređaj npr. automobil, mobitel, ...
Iako ih ne možete opipati Java objekti su isto tako realni. Programer korisnik je upućen koje su funkcije pridružene pojedinoj vrsti objekata.
Te funkcije nazivamo sučelje (interface).

Programer koji je programirao objekt zna koje će se operacije izvršavati kad se te funkcije pozovu. Taj dio nazivamo implementacija objekta.
Korisnik će na pitanje "Što je to objekt" odgovoriti s "Ne znam od čega se sastoji već mi je poznato njegovo sučelje i što mogu s njim učiniti".
Dizajner će odgovoriti sa: "Sastavljen je od varijabli i metoda koje međusobno djeluju da bi realizirale sučelje objekta.

Svi objekti koji se grade na osnovu istog dizajna pripadaju istoj klasi. Dizajn klase je dio programa koji nazivamo definicija klase.

Kreiranje klase Student

Zamislite da ćemo u Javi napisati program koji će u bazi podataka održavati podatke o svim studentima na ovome fakultetu.

Program poput toga vjerojatno bi sadržavao mnogo različitih tipova objekata. Jedan o tipova bi sigurno bio onaj koji bi sadržavao podatke o pojedinom studentu. Za očekivat je i postojanje objekta koji bi predstavljao listu svih studenata u bazi podataka. Ako bismo dizajnirali sat, počeli bismo od ideje kako konstruirati sučelje tj. skup operacija koje sat treba izvoditi.
Nakon toga bismo radili na implementaciji sučelja, odnosno kako složiti stvari unutar objekta da se osigura tražena funkcionalnost.

Slično, prvo u definiranju klase Student je odluka koje operacije će biti asocirane s objektom tipa Student.

Da bismo održali jednostavnost primjera uključit ćemo ograničeni skup operacija:

1. Bit će potrebno omogućiti mijenjanje godine studenta s 1 na 2 ili 2 na 3. Ova akcija će se normalno odvijati na kraju godine.
2. Bit će potrebno omogućiti promjenu programa studija (stupnja)
3. Bit će potrebno omogućiti način da objekt vrati ime studenta kako bi program mogao ispitati kojemu studentu pripada odgovarajući objekt. Dobivanje ostalih informacija zasad nećemo realizirati.
4. Bit će potrebno omogućiti ispisivanje podataka o studentu na ekran. Osigurat ćemo metodu prikaz koja će to činiti.
5. Bit će potrebno kreirati nove objekte tipa Student. Svaki put kad bude kreiran bit će potrebno dati informacije o studentu, npr. ime, program studija (stupanj) , ...

Sad je vrijeme za definiciju klase student. U terminologiji ručnog sata, potrebno je odrediti kako će pojedine komponente biti raspoređene i povezane unutar kućišta da bi proizvele sat koji radi.
Svaki objekt u Javi sastavljen je od nekog broja odvojenih dijelova nazvanih članovi (members).

Postoje tri vrste članova.

· Varijable. U ove članove spremaju se informacije koje objekt sadrži, odnosno koje opisuju objekat.
Npr. Student objekt može sadržavati varijablu koje sadrži studentovo ime i drugu koja sadrži naziv programa studija. Skup vrijednosti koje sadrže varijable pojedinog objekta nazivaju se stanje (state) objekta.

Da bismo razlikovali te varijable od varijabli koje smo definirali unutar metoda (u prošlom poglavlju), varijable koje pripadaju objektu nazivamo polja (fields) ili varijable instance (instance variables).

· Metode. Ovi članovi izvršavaju operacije na objektu (ili s objektom).
Npr. vidjeli smo da ConsoleReader objekt ima metodu koja se naziva ReadInt koja koristi taj objekt da bi se dobila vrijednost koju je korisnik utipkao.

Kada napišemo definiciju klase Student imat ćemo metodu uNovuGodinu koja će dodavati jedan na tekuću studentovu godinu.
Ova vrsta metoda nazivaju se metode instance (instance methods) kako bi ih razlikovali od statičkih metoda koje ne pripadaju nijednom objektu (više o statičkim metodama kasnije).

· Konstruktori. Ovi članovi se koriste da bismo konstruirali objekte određene klase. U klasu Student uključit ćemo jedan konstruktor jer inače ne bi bilo moguće napisati program koji bi koristio objekte te klase. Konstruktori su vrlo slični metodama na mnogo načina.

Sad ćemo specificirati koje će članove posjedovati objekti tipa Student.

Prvo ćemo definirati polja (fields) . Te varijable sadržavat će informacije koje su pohranjene u svakom objektu tipa Student. Pretpostavimo za sada 4 informacije (slaže se sa zahtjevima operacija navedenih prije.)

1. Studentov ID.
2. Ime.
3. Naziv programa.
4. Godina studija.

Potrebno je odabrati nazive za ta polja i odlučiti koji će se tip podataka koristiti.
Npr. ID broj može biti cijeli broj ili string.
ID broj je u stvarnosti samo niz karaktera. Neće biti nikakve razlike ako se sastoji od niza znakova umjesto od znamenaka. Zbog toga ćemo odabrati tip podatka String .
Ime studenta i naziv programa studija također će biti tipa String.
Godina studija bit će cjelobrojna vrijednost tipa int.

Slijede definicije polja.
Linije koje počinju s // su komentari koji objašnjavaju sadržaj svakog polja. Java ignorira sve od // do kraja reda.

private String idBroj; // ID broj Studenta. private String ime; // studentovo ime. private String programStudija; //Program studija. private int godina; // Godina studija (1, 2 ili 3).

Riječ private određuje da se polju ne može direktno pristupiti izvan definicije klase Student. Ako programer "korisnik" objekta napiše kod koji zove takvu varijablu prevodioc će javiti grešku prevodioca.
Polja u klasi su obično označena kao private. (Kad dođemo do metoda asociranih sa objektom Student, vidjet ćemo da počinju s riječju private koja znači da to metodu može pozvati korisnik objekta.
Nakon riječi private dolazi tip vrijednosti koje spremamo u polje te naziv polja.

Cijela linija predstavlja deklaraciju varijable. Moguće je uključiti i inicijalnu vrijednost.
Kad smo odabrali polja koja će objekt sadržavati, sad trebamo napisati metode koje će izvršavati osnovne operacije pridružene objektu.

Prvo ćemo konstruirati metodu koja će se koristiti za promjenu studentovog programa studija.
Nazvat ćemo je setProgramStudija. Kad je pozovemo bit će potrebno znati koji je novi naziv novog programa studija. Ta dodatna informacija bit će parametar metode.
Općenito metoda može imati bilo koji broj parametara. Svaki put kad pozovemo metodu svakome od tih parametara bit će dodijeljena vrijednost koju ćemo i koristiti tijekom izvršavanja metode. setProgramStudija ima samo jedan parametar – naziv studentovog novog programa. U definiciji metoda taj parametar nazvat ćemo jednostavno p.

Tijelo svakog parametra sastojat će se od niza izraza koji će izvršavati potrebne akcije.
U ovom slučaju potrebna je samo jedna akcija: novi naziv programa studija (dakle parametar p) potrebno je pohraniti u polje programStudija .
Slijedeće dodjeljivanje će obaviti taj zadatak:

programStudija = p;

Slijedi kompletna definicija metoda setProgramStudija:

/* Promijeni programStudija u p. */

public void setProgramStudija(String p)
{ programStudija = p;
}

Kao obično počinjemo s komentarom što program radi. Slijedeća linija je zaglavlje metoda .

Svaka od riječi ima sljedeće značenje:

- public kaže da se metoda može koristiti bilo gdje u programu, dakle i unutar klase i van definicije klase

- void kaže da metoda ne vraća nikakvu vrijednost.

- setProgramStudija je naziv metode.

(String p) je lista svih parametara metode. U ovome slučaju radi se o samo jednom parametru koji je tipa String , a naziva se p.
Na kraju imamo tijelo metoda zatvoreno u vitičaste zagrade {}. U ovome slučaju tijelo metoda sastoji se samo od jedne naredbe.

Pretpostavimo da programer korisnik piše nekakav program u nekoj drugoj klasi odvojeno od klase student.
Pretpostavimo da je kreirao određeni objekt studenta i pridodijelit ga varijabli stud1 . Tada ako programer želi postaviti za tog student program studija na npr. na strojarstvo može pisati naredbu:

stud1.setProgramStudija(”strojarstvo”);

Ova naredba kaže: izvrši metodu setProgramStudija koja je asocirana s objektom stud1 (tipa Student) koristeći vrijednost parametra "strojarstvo".

Rezultat će biti da će polje objekta programStudija biti postavljeno na vrijednost
”strojarstvo”.

Slijedeće ćemo definirati metodu koja dodaje jedan na studentovu godinu studija.
Ovo je još jednostavnije jer metoda nema nikakvih parametara. Cijelo tijelo je izraz koji dodaje jedinicu na polje godina.

godina++;

Slijedi kompletna metoda.

/* Povećaj godinu studija za jedan */

public void povecajGodinu()
{ godina++;
}

Što kaže zaglavlje:

- public znači da se metoda može koristiti bilo gdje u programu.

- void znači da metoda ne vraća nikakvu vrijednost.

- povecajGodinu je naziv metode.

- () pokazuje da nema parametara. To znači da se ne prosljeđuje nikakva informacija metodu koji se poziva.

Van klase student slijedeći izraz može biti korišten za dodavanje jedinice na broj godine studenta.
Koristimo opet objekt stud1 (klase Student)

stud1.povecajGodinu();

Slijedeća metoda vraća ime koje je pohranjeno u objektu tipa Student.
Podsjetite se da se toj varijabli ne može pristupiti direktno izvan klase jer je polje ime označeno kao private.
Metodu smo nazvali getIme.

Za razliku od dva prethodna metoda ovaj "vraća vrijednost".
Vrijednost se vraća na mjesto poziva metoda.
Pretpostavimo da imamo slijedeću naredbu:

String st = stud1.getName();

Java će kreirati varijablu st te nakon toga pozvati metodu

stud1.getName()

Metoda će biti pozvana za objekt stud1. (metoda nema parametara).
Metoda će vratiti ime studenta, i Java će ga pohraniti u varijablu st.

Primijetite da je stud1.getName() korišten na isti način kao što je korišteno npr. Math.sqrt(1.5)

double x = 1 - Math.sqrt(1.5);

Ovdje je kompletna metoda:

/* Vrati studentovo ime. */

public String getIme()
{ return ime;
}

Zaglavlje znači:

- public kaže da se metoda može koristiti bilo gdje.

- String kaže da metoda vraća vrijednost tipa String. Ovo se naziva vraćeni tip podatka (return type).

- getIme je naziv metoda.

- () pokazuje da metoda nema parametara.

Tijelo metoda je jedna naredba:

return ime;

Ona kaže: vrati vrijednost polja ime. To je tip naredbe koji nismo dosada sreli. Naziva se naredba vraćanja vrijednosti(return statement).

Zadnja metoda ispisuje na ekran sve informacije o studentu.
Nazvat ćemo je prikaz.

/* Prikaži informacije o studentu na ekran. */

public void prikaz()
{ System.out.println("Student ID: " + idBroj);
System.out.println("Ime: " + ime);
System.out.println("Program studija: " + programStudija);
System.out.println("Godina: " + godina);
}

Zaglavlje pokazuje da metoda ne vraća nikakvu vrijednost i nema parametara pa će poziv metoda izgledati ovako:

stud1.prikaz();

Naposljetku treba napisati konstruktor koji će programer korisnik moći upotrijebiti za stvaranje novih objekata tipa Student.
Konstruktor uvijek ima naziv identićan nazivu klase.

U ovom slučaju konstruktor se zove Student.

Konstruktor nema naznaku što vraća jer je očito što bi trebao vratiti, a to je objekt koji se njime kreira. Konstruktor može imati bilo koji broj parametara. Ovaj ovdje ima tri: studentov ID broj, ime i naziv programa studija. Ovdje je pretpostavljeno da će godina studija biti 1 kada je objekt kreiran.

Slijedi konstruktor:

/* Kreiraj novog studenta sa zadanim ID brojem, imenom i programom studija
Polje godina bit će postavljeno na 1.
*/

public Student(String id, String im, String p)
{ idBroj = id; ime = im; programStudija = p; godina = 1;
}

Sa dana tri parametra konstruktor će:

1. stvoriti novi objekt,
2. pohraniti string id u polje idBroj novostvorenog objekta,
3. pohraniti string im u polje ime ,
4. pohraniti string p u polje programStudija ,
5. pohraniti 1 u polje godina.

Primijetite da ne postoji ništa u tijelu konstruktora što indicira prvi korak stvaranja objekta. Java to radi automatski kada izvršava konstruktor.

Slijedi navedeni konstruktor iskorišten u stvaranju objekta tipa Student:

Student stud1 = new Student(''9912345'', ''Ivo Petrić'', ''strojarstvo'');

Ovo znači: prvo kreiraj varijablu nazvanu st koja će se odnositi na Student objekt. Zatim kreiraj novi objekt tipa student s podacima naznačenim u listi parametara.
Primijetite upotrebu ključne riječi new. Potrebno ju je upotrijebiti svaki put kada s konstruktorom stvaramo novi objekt.
Svaka varijabla koja će označavati objekt tipa Student mora biti deklarirana kao varijabla tipa Student. (vrijedi za sve tipove objekata)

S ovim smo kompletirali definiciju klase Student. Još ostaje dodati zaglavlje cijele klase. U klasi su prvo stavljena polja iako redoslijed članova nije bitan.

PRIMJER1

/* Student objekt za studenta FESB-a
*/

{ public class Student

private String idBroj;

// ID broj Studenta.

private String ime;

// studentovo ime.

private String programStudija;

//Program studija.

private int godina;

// Godina studija

// (1, 2 ili 3).

/* Promijeni programStudija u p. */

public void setProgramStudija(String p)
{ programStudija = p;
}

/* Povećaj godinu studija za jedan */

public void povecajGodinu()
{ godina++;
}

/* Vrati studentovo ime. */

public String getIme()
{ return ime;
}

/* Prikaži informacije o studentu na ekran. */

public void prikaz()
{ System.out.println("Student ID: " + idBroj);
System.out.println("Ime: " + ime);
System.out.println("Program studija: " + programStudija);
System.out.println("Godina: " + godina);
}

/* Kreiraj novog studenta sa zadanim
ID brojem, imenom i programom studija
Polje godina bit će postavljeno na 1.
*/

public Student(String id, String im, String p)
{ idBroj = id; ime = im; programStudija = p; godina = 1;
}
}

Konačno jedan veoma jednostavan program koji će koristiti objekt tipa Student. Poput programa iz prošlog poglavlja sastoji se od samo jedne statičke metode main. On je sam stavljen u klasu koju ćemo nazvati TestStudent.
Metoda prvo čita informacije o studentu unesene preko tipkovnice. Nakon toga kreira objekt tipa Student koristeći konstruktor i varijablu st. Nakon toga povećava godinu studija za jedan, koristeći izraz:

st.povecajGodinu();

Kako je konstruktor već postavio tu vrijednost na 1 sad bi trebala biti 2.
Zatim se program studija promijeni s izrazom:

st.setProgramStudija(''elektronika'');

Na kraju se podaci o studentu ispišu na ekran.

st.prikaz();

Slijedi TestStudent klasa:

PRIMJER 2

public class TestStudent
{ /* Ucitaj podatke o studentu.
Kreiraj objekt tipa student.
Prikaži ne ekranu podatke objekta.
*/
public static void main(String[] args)
{ /* Kreiraj ConsoleReader za ucitavanje što korisnik tipka */
ConsoleReader in = new ConsoleReader(System.in);
/* Ucitaj podatke o studentu i kreiraj objekt za njih. */
System.out.println("Koji je ID broj studenta?");
String i = in.readLine();
System.out.println("Koje je ime studenta?");
String n = in.readLine();
System.out.println("Koji je program studija?");
String d = in.readLine();
Student st = new Student(i,n,d);
/* Povecaj broj godine studija i prikaži informacije na ekranu. */ st.povecajGodinu(); st.setProgramStudija(″elektronika″);
System.out.println();
st.prikaz();
}
}

Ovo se može pojaviti na ekranu tijekom izvođenja programa:

Koji je ID broj studenta?");
9912345
Koje je ime studenta?
Ivo Petric
Koji je program studija?
Strojarstvo
Student ID: 9912345
Name: Ivo Petric
Program Studija: elektronika
Godina: 2

Više o klasama

U tijeku izvršavanja Java programa, bit će kreirani različiti objekti i bit će pozivane neke od njihovih metoda. Konstruktori će se koristiti za kreiranje objekata, ali neće se pozvati niti jedan izraz za njihovo uklanjanje.
Objekte će ukloniti iz memorije interpreter u trenutku kad mu zatreba više memorije.
Intepreter provjerava sve postojeće objekte i briše one objekte na koje ne upućuje niti jedna varijabla ili drugi objekt.
Taj proces naziva se "odvoz smeća" (garbage collection).

Proces kreiranja objekata i izvršavanja metoda počinje unutar main metode. Kada pozovete intepreter s naredbom:

java klasa

gdje je klasa prevedena klasa (bytecode), intepreter će poći do definicije klase i tražiti metodu sa zaglavljem

public static void main(String[] a)

(Naziv parametra može biti bilo koji naziv.)

Ako intepreter nađe takvu metodu počet će izvršavati njene naredbe. Da bi uspješno upravljao s potrebnim objektima i metodama, intepreter mora imati pristup definicijama svih objekata koje treba koristiti.
Neke od tih klasa ćete i sami napisati. Neke će biti napisane u Java biblioteci, poput PrintStream klase koja sadrži

System.out.println metodu.

Neke klase će napisati drugi programeri, poput ConsoleReader klase.

Npr. za uspješno pokretanje programa iz primjera 2 osim klasa iz biblioteka potrebne su još tri klase: TestStudent, Student i ConsoleReader.
One će se obično nalaziti u tri datoteke nazvane:

TestStudent.java, Student.java i ConsoleReader.java.

U procesu prevođenja bit će dovoljno izvršiti naredbu

javac TestStudent.java

Prevoditelj će naći u klasi TestStudent reference na dvije ostale klase i automatski ih prevesti. Napišite slijedeću naredbu:

java TestStudent

intepreter će doći do TestStudent klase i potražiti public, static metodu s nazivom main. Ako je uspije pronaći pokušat će je izvršiti. Ako je ne nađe javit će odgovarajuću pogrešku i stati s interpretiranjem.

Da bismo napravili program kompaktnijim moguće je staviti main metodu u klasu Student i izbjeći stvaranje TestStudent klase. Tada ćete ukucati naredbu :

java Student

To će natjerati intepreter da u klasi Student traži main metodu.
Kada pogledate na programski kod koji opisuje različite članove klase vidjet ćete da definicija svakog člana počinje s ključnom riječi public ili private.

Ako je član neke klase označen kao public tada mu se može pristupiti iz bilo koje metode (ili konstruktora) bilo gdje u programu.

Ako je označen kao private onda mu se može pristupiti samo iz metoda koje su članovi iste klase. To znači da kada pišete definiciju klase A onda u nju ne možete uključiti izraze koji pozivaju članove klase B koji su označeni kao private .

Možete pristupiti samo public članovima objekta B.

Članovi označeni s public sačinjavaju sučelje objekta (interface).

Postoji niz razloga zbog kojih bi programer koji dizajnira klasu ogrančio pristup drugome programeru svim poljima i metodama unutar klase. Razlog je da se korisniku klase koji ne poznaje u potpunosti rad klase ograniči mogućnost krive upotrebe klase. S druge strane kad je implementirano sučelje klase ista se može isporučiti korisniku, a za kasnije ostaviti poboljšanje unutarnje funkcionalnosti klase poput ubrzanja i slično. Naravno treba paziti da se ne promijeni sučelje.

Java omogućava da se izostavi riječ public ili private. Tada će polje ili metoda biti tretirana kao da je public.

Dosad smo diskusiju o klasama u ovom poglavlju zasnivali na ideji da je definicija klase opis određenog objekta.
To je u određenoj mjeri i točno, ali klase su ipak malo kompliciraniji pojam. Svaka klasa ima niz varijabli i metoda koje egzistiraju neovisno u bilo kojem određenom objektu. Takvi članovi klase poznati su kao statička polja i metode. Drugi naziv je s engleskog neprevodiv – class fields and methods.

U njihovim definicijama pojavljuje se ključna riječ static.

Počeli smo poglavlje 1 s programom koji se sastojao od samo jedne klase (Hello), i sadržavao je samo jednu metodu main. Zaglavlje metode je bilo:

public static void main(String[] a)

Upotreba riječi static ovdje indicira da ova metoda nije asocirana s niti jednim objektom. U stvari kada se program pokrene ni jedan objekt tipa klase Hello neće biti kreiran !
Uloga ove klase je samo da omogući prikladno mjesto za main metodu.

Druga klasa od koje se ne proizvode objekti, ali je sačinjena od statičkih polja i metoda je Math klasa iz Java biblioteke funkcija.

Ona sadrži metode koje računaju uobičajene matematičke funkcije poput sinusa i kosinusa. Slijedi primjer izraza koji koristi navedenu klasu:

double x = Math.sin(a);

Dosad smo vidjeli da kada pozivate metodu koja pripada instanci neke klase da se prvo piše naziv objekta koji pokazuje na objekt neke klase. U slučaju pozivanja statičkog metoda (koji nije asociran s niti jednim objektom) piše se ispred naziva metoda naziv klase, dakle u ovom slučaju Math.

Reference na objekte (Object References)

U prethodnom poglavlju spomenuli smo da se vrijednosti poput cijelih brojeva i brojeva u pokretnom zarezu tretiraju na drukčiji način nego objekti.
Jedna od različitosti je način na koji se pohranjuju u memoriji.
Vrijednost varijable primitivnog tipa spremljena je u samoj varijabli. Pretpostavimo da je izvršen slijedeći izraz:

int n = 5;

Nakon ovoga izraza 32 bita memorije su rezervirana za novu varijablu n, i vrijednost 5 je spremljena na to mjesto u memoriji.
Ovaj postupak možemo vizualizirati na slijedeći način:

[pic]

(Pravokutnik pokazuje rezervirano mjesto u memoriji)

Kako smo vidjeli u odjeljku o String klasi, objekt se ne sprema u varijablu. Pretpostavimo da je izvršena slijedeća naredba:

Student st = new Student(″1222″, ″Perić,Pero″, ″Elektronika ″);

Kao i prije određeno mjesto u memoriji bit će alocirano za novu varijablu. U ovom slučaju to je varijabla st . Međutim objekt koji se kreira u desnom dijelu izraza neće biti spremljen na mjesto varijable. Za njega će se rezervirati posebno mjesto u memoriji. Vrijednost koja je pohranjena u st je vrijednost reference. Referenca je vrijednost koja jednoznačno određuje gdje je u memoriji lociran objekt (u ovom slučaju objekt tipa student).
U slijedećem dijagramu strelica od varijable st do objekta tipa Student znači da varijabla sadrži referencu na objekt.

[pic]

Kada pokrenemo Java program svaka vrijednost bit će ili primitivna vrijednost ili vrijednost reference. To vrijedi za vrijednosti pohranjene u varijablama, vrijednosti vraćene pomoću metoda i vrijednosti proslijeđene kao parametri.
Nikad nećemo moći vidjeti stvarnu vrijednost vrijednosti reference. Nemojte misliti da su to cijeli brojevi. Sve što znamo je da samo varijabla koja je npr. tipa Student može sadržavati referencu na objekt tipa Student.
Postavlja se pitanje da li ima razlike u tome da varijabla sadrži referencu na objekt, a ne sam objekt ?
Ima. Razmotrimo slijedeći kod:

Student st1 = new Student(″1222″, ″Perić,Pero″, ″Elektronika″);
Student st2 = st1; st1.setProgramStudija(″Strojarstvo″); st2.prikaz();

Što će se prikazati na ekranu. Što će biti ispisano za programStudija. Odgovor je da će to biti "Strojarstvo". Da bi to znali moramo razmotriti liniju po liniju:

1. Student st1 = new Student(″1222″, ″Peri,Pero″, ″Elektronika″);

Ovo će kreirati varijablu st1, zatim objekt tipa Student koji će sadržavati zadane podatke te naposljetku u st1 bit će spremljena referenca na kreirani objekt.

2. Student st2 = st1;

Ova linija će kreirati varijablu st2 i dodijeliti joj vrijednost koja se nalazi u varijabli st1, u ovom slučaju referencu na objekt student koji je kreiran u prvom koraku.
Primijetite da iako postoje dvije varijable samo je jedan Student objekt. Obje varijable su reference na isti objekt.

3. st1.setProgramStudija(″Strojarstvo″);

Polje programStudija objekta na koji referencira varijable st1 mijenja se u string
''CS''.

4. st2.prikaz();

Prikazuju se detalji objekta na kojeg referencira st2 .

[pic]
Da se objekti spremaju u varijable (a nisu !) prva naredba bi spremila objekt Student u st1.
Druga bi naredba napravila kopiju istog objekta u st2. Tada bi postojala dva objekta tipa student. Treća bi promijenila polje programStudija u objektu st1 i ne bi promijenila objekt u st2.
Četvrta naredba bi na kraju ispisala detalje objekta u st2, uključujući originalni naziv studija "Elektronika".
Primjeri poput ovoga stalno se događaju u Java programiranju. Stoga je vrijeme da se počne misliti u terminima referenci.

null vrijednost

Ranije smo rekli da varijabli tipa student može biti pridružena samo referenca na objekt tipa Student. To nije sasvim točno. Postoji jedna vrijednost koja može biti pridružena svakoj varijabli koja inače sadržava vrijednost reference. Ta vrijednost se označava sa null.
Slijedi deklaracija koja kreira varijablu tipa Student i sprema u nju vrijednost null:

Student st = null;

Za primjer gdje se vrijednost null može koristiti uzmimo pretraživanje baze gdje imamo metodu koja pretražuje cijelu bazu podataka o studentima i traži objekt s određenim ID brojem. Ako se objekt s takvim ID brojem nađe vratit će se referenca na taj objekt. Međutim što vratiti ako ne postoji objekt s tim ID brojem. U tom slučaju bit će uobičajeno da ta metoda vrati vrijednost null.
Ako varijabla poput prijašnjeg primjera varijable st sadrži vrijednost null , potrebno je osigurati da se ne pokuša pristupati metodama koje pripadaju objektu na kojeg se odnosi varijabla st. (varijabla st ne odnosi se u ovom slučaju na nikakav objekt)
Npr. slijedeća naredba neće biti izvršena:

st.setProgramStudija(″Strojarstvo″);

st ne referencira na nikakav kreirani objekt tipa Student te će Java intepreter javiti run-time pogrešku. Greška će biti indicirana kao NullPointerException. Naravno, ako varijabli st pridružimo objekt tad će se ista naredba bez problema izvršiti.
Još jedno mjesto gdje Java može uvesti vrijednost null je kod kreiranja objekta konstruktorom. U primjerima smo preko argumenata konstruktora prenosili argumente koji su nam poslužili kao inicijalne vrijednosti za polja objekta.
Što se događa kada ne specificirate inicijalnu vrijednost polja u objektu. Java će izabrati sama početnu vrijednost.
Ako je polje neki broj onda će biti inicijaliziran na nulu. Ako polje je referenca na objekt početna vrijednost će biti null.

Npr. tri polja objekta Student su tipa String. Stringovi su objekti. Tako ta polja sadrže reference na mjesto gdje su stvarno u memoriji pohranjeni ti karakteri. Ako ne specificiramo inicijalne vrijednosti za njih one će sadržavati null vrijednost. To ne znači da se radi o praznom stringu !
Varijabla može referencirati na prazan string , ali to je regularan string kao i svi drugi.

Dakle poljima koja nisu inicijalizirana Java pridružuje pretpostavljene početne vrijednosti (default values). To je različito od onoga što se javlja s deklaracijama varijabli unutar tijela metoda. Te varijable se ne inicijaliziraju automatski ! U njima je nepredvidljiva vrijednost ako ih sami nismo inicijalizirali.

Identifikatori

Nazivi koje koristimo u Java programima za varijable, metode ili klase nazivamo identifikatori. Pravila za pisanje identifikatora u Javi su sljedeća:

· mora početi s slovom ili oznakom valute ($,£,...), ili povlakom ( _ )
· ostali znakovi mogu biti slova ili brojevi
· dužina nije ograničena
· ne mogu se koristiti ključne riječi kao identifikatori (poput class, int, private, return,...)

U Javi je pojam brojki i slova dosta širok. Slovo može biti korejsko, grčko, Japansko. To je zbog toga što Java znakove čuva kao 16-bitne unicode vrijednosti. To je ogroman skup znakova koji uključuje znakove većine svjetskih jezika. Naše tastature omogućavaju unos limitiranog skupa znakova.

Poput čvrstih pravila za identifikatore, postoje i konvencije. Jedna je da nazivi varijabli, parametara i metoda počinju s malim slovima, a nazivi klasa počinju s velikim slovima.
Te konvencije su tako širom prihvaćene da će vas ostali programeri čudno gledati ako ih se ne držite.
Druga konvencija je da ako koristite nazive sastavljene od više riječi da svaku riječ poslije prve počinjete s velikim slovom npr. ConsoleReader , readDouble.

Java programeri vole duge nazive pa Java biblioteka sadrži nazive poput GridBagLayoutManager i NoSuchElementException. Korisno je koristiti duge nazive jer se onda može iz toga vidjeti funkcionalnost varijable ili metode. Međutim kod u cjelini postaje nečitljiviji.

Primjer:

1. Proširite klasu Student opisanu u odjeljku 3 tako da povećate količinu informacije koja je zapisana u svakom objektu tipa Student. Dodatni stavci bi trebali biti: ime studentovog mentora i broj bodova koje je stekao na osnovu polaganja ispita. Za svaki položeni ispit student dobiva 0.5 bodova. Proširena klasa treba osigurati i slijedeće operacije koje ćemo pozvati iz test programa:

�� Metoda nazvana promijeniMentora(m) koja će promijeniti ime mentora u ime m.
�� Metoda dodajBod(n) koja će dodati broj bodova na ukupan broj bodova koje student ima .

Na kraju trebat će modificirati konstruktor i ubaciti naziv mentora kao parametar.
Inicijalna vrijednost broja bodova treba biti 0.

Klasa Student

/* Student objekt za studenta FESB-a */

public class Student
{
private String idBroj; // ID broj studenta private String ime; // studentovo ime private String programStudija; // Program studija private String mentor; private int godina; // Godina studija (1, 2 ili 3) private double bodovi;

/* Promijeni program studija u "p" */ public void setProgramStudija(String p)
{
programStudija=p;
}

public void promijeniMentora(String m)
{
mentor=m;
}

/* Povecaj godinu studija za jedan */ public void povecajGodinu()
{
godina++;
}

public void dodajBod(int br)
{
double n = br*0.5; bodovi+=n;
}

/* Vrati studentovo ime */ public String getIme()
{
return ime;
}

/* Prikazi informacije o studentu na ekran */ public void prikaz()
{
System.out.println("Student ID: " + idBroj); System.out.println("Ime: " + ime); System.out.println("Program studija: " + programStudija); System.out.println("Mentor: " + mentor); System.out.println("Godina: " + godina); System.out.println("Bodovi: " + bodovi);
}

/* Kreiraj novog studenta sa zadanim ID brojem, imenom i programom studija.
Polje godina bit ce postavljeno na 1. */ public Student(String id, String im, String p, String m)
{
idBroj=id; ime=im; programStudija=p; mentor=m; godina=1; bodovi=0.0;
}

}

Klasa TestStudent

public class TestStudent
{
public static void main(String[] args)
{
ConsoleReader unos = new ConsoleReader(System.in);
System.out.println("Koji je ID broj studenta?");
String id = unos.readLine();
System.out.println("Koje je ime studenta?");
String ime = unos.readLine();

System.out.println("Koji je program studija?");
String program = unos.readLine();

System.out.println("Koji je mentor studenta?");
String mentor = unos.readLine();

Student student = new Student(id, ime, program, mentor);
System.out.println();
System.out.println("Kreiran je slijedeci student:"); student.prikaz(); System.out.println();
System.out.println("Student je upisao 2. godinu, promijnio mentora i polozio 5 ispita!"); student.promijeniMentora("Bubravko Balic"); student.dodajBod(5); student.povecajGodinu(); student.prikaz(); }
}

Klasa ConsoleReader

import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.IOException; import javax.swing.JOptionPane;

/** A class to read strings and numbers from an input stream. This class is suitable for beginning Java programmers. It constructs the necessary buffered reader, handles I/O exceptions, and converts strings to numbers.
*/

public class ConsoleReader
{ /** Constructs a console reader from an input stream such as System.in @param inStream an input stream */ public ConsoleReader(InputStream inStream) { reader = new BufferedReader (new InputStreamReader(inStream)); }

/** Constructs a console reader that reads from an option pane */ public ConsoleReader() { reader = null; }

/** Reads a line of input and converts it into an integer. The input line must contain nothing but an integer. Not even added white space is allowed. @return the integer that the user typed */ public int readInt() { String inputString = readLine(); int n = Integer.parseInt(inputString); return n; }

/** Reads a line of input and converts it into a floating- point number. The input line must contain nothing but a nunber. Not even added white space is allowed. @return the number that the user typed */ public double readDouble() { String inputString = readLine(); double x = Double.parseDouble(inputString); return x; }

/** Reads a line of input. In the (unlikely) event of an IOException, the program terminates. @return the line of input that the user typed, null at the end of input */ public String readLine() { String inputLine = "";

if (reader == null) return JOptionPane.showInputDialog("Program input:"); try { inputLine = reader.readLine(); } catch(IOException e) { System.out.println(e); System.exit(1); }

return inputLine; }

private BufferedReader reader;
}

____________________________________________________________

_____ uklopiti ----------------------- automobil BMW

Similar Documents

Free Essay

Esej - Analiza I Dizajn

...Analiza i Dizajn Informacionih Sistema UDG, Podgorica 2010-04-25 Fakultet za informacione sisteme i tehnologije dr Biljana Stamatović, Pero Bogojevic Mirko Mijušković U globalizvanoj današnjici računari postaju bitan segment naših života i malo ko može zamisliti život bez računara. Gdje god da krenemo nailazimo na računare (banke, autobuske stanice, biblioteke, univerzitete, bioskope itd). Budući da se ti isti računari koriste na svakom polju, za nas važno pitanje predstavlja izgradnja i razumijevanje kompjuterizovanih sistema na efikasan način. Izgradnja takvih sistema nije lak proces, i zahtjeva određeno znanje i određene sposobnosti koje prate proceduru izrade bilo kog informacionog sistema. Svako ko je dio sve veće industrije informacionih tehnologija mora da teži shvatanju procesa razvoja informacionih sistema, jer su oni od velikog značaja. To je jedan od razloga što je studentima skrenuta pažnja na značaj Analize i Dizajna Informacionih Sistema. Analiza, dizajn i razvoj informacionih sistema zahtjeva odgovore na nekoliko osnovnih pitanja. * Šta je sistem ? * Koje elemente sadrži taj sistem ? * Kakva je uloga sistema u Organizaciji korisnika ? * Šta je cilj tog sistema ? Na ova temeljna pitanja je često teško odgovoriti. Ukoliko ne znamo da opišemo sistem, veliki izazov je pred nama. Šta je sistem ? Primjeri sistema: * Solarni sistem * Strujni sistem * Transportni sistem * Krvni...

Words: 1832 - Pages: 8

Free Essay

Belgrade Beat

...Sadržaj: Uvod i opšte informacije o predlagaču projekta..................................................................3 Vizija, misija i ciljevi...........................................................................................................4 Marketing plan ( Kupci, Konkurencija )..............................................................................5 Marketing plan ( Analiza tržišta ).......................................................................................6 Marketing plan ( Analiza tržišta )........................................................................................7 Marketing plan ( Strategija prodaje )...................................................................................8 Marketing plan ( Strategija prodaje )...................................................................................9 Marketing plan ( Strategija prodaje ).................................................................................10 Analiza situacije.................................................................................................................11 Analiza stejkholdera...........................................................................................................12 Drvo problema...................................................................................................................13 Drvo ciljeva................................................................................................

Words: 5674 - Pages: 23

Free Essay

Sinalco Marketing Plan

...2012 Sadržaj Sadržaj 2 Analiza tržišta 4 PESTLE analiza 6 Analiza kompanije 8 Analiza proizvoda 9 Linija proizvoda 9 Ambalaža 10 Distribucija 11 Analiza konkurencije 12 Coca – Cola 12 Pepsi 13 Sky 15 SWOT analiza 17 Zaključak na bazi SWOT analize 19 Identifikacija i segmentacija tržišta 20 Geografska segmentacija 20 Demografska segmentacija 21 Psihografska segmentacija 22 Bihejvioristička segmentacija 24 Opis ciljnog segmenta 24 Ciljevi 25 Marketing ciljevi 25 Komunikacijski ciljevi 25 MARKETING MIKS 26 Proizvod 26 Cijena 28 Distribucija 29 Promocija 30 Oglašavanje 30 Unapređenje prodaje i lična prodaja 34 Odnosi s javnošću 35 Budžet 36 Vremenski plan aktivnosti, način implementacije i odgovornosti 41 Kontrola 45 Zaključci i preporuke 46 Literatura 47 Analiza tržišta Tržište bezalkoholnih pića se iz godine u godinu sve više širi. Poslijednih godina u Bosni i Hercegovini izgrađeno je mnogo novih kapacieteta za proizvodnju bezalkoholnih pića kao što su flaširana izvorska voda i osvježavajuća bezalkoholna pića. Ti kapaciteti se koriste samo od 20-50 % zbog niske stope izvoza te jako visoke stope uvoza. Bosanskohercegovačke kompanije proizvode oko 350 miliona litara bezalkoholnih pića godišnje od čega pola otpada na flaširanu vodu. Već dugi niz godina tržišni lider je kompanija Coca Cola. Na sljedećim tabelama imamo prikaz uvoza i izvoza bezalkoholnih pića u Bosni i Hercegovini : Naziv proizvoda...

Words: 5816 - Pages: 24

Free Essay

Behaviour of Ikea's Consumers

...UNIVERZITET U SARAJEVU I K E A Sarajevo, ožujak 2010. godina S A D R Ž A J 1. UVOD...............................................................................................................................................3 2. ANALIZA INDUSTRIJE .........................................................................................................3 3. ANALIZA KOMPANIJE .........................................................................................................6 3.1. SWOT analiza .................................................................................................................... 7 3.2. Marketing MIX...................................................................................................................7 3.2.1. Proizvod ...................................................................................................................7 3.2.2. Cijena .......................................................................................................................7 3.2.3. Distribucija................................................................................................................8 3.2.4. Promocija..............................

Words: 6348 - Pages: 26

Free Essay

Croatian

...DEFINICIJA UPRAVLJANJA PROIZVODNJOM P1- menadžeri proizvodnje odgovorni su za proizvodnju potrebnih dobara ili usluga u organizacijama. Menadžeri proizvodnje donose odluke koje se odnose na funkciju proizvodnje i korištenje transformacijskih sustava. FUNKCIJA- u kompanijama s tvorničkom proizvodnjom proizvodna se funkcija može nazvati tvorničkim,proizvodnim ili pogonskim odjelima. U uslužnim organizacijama, proizvodna se funkcija može nazvati radnim,poslovnim ili proizvodnim odjelom. Općenito termin proizvodnja se odnosi na funkciju koja proizvodi robe ili usluge u bilo kojoj organizaciji. SUSTAV- sustavni pregled ne daje samo zajednički temelj za definiranje uslužnih i tvorničkih proizvodnji kao transformacijskih sustava, već i snažnu osnovu za oblikovanje i analiziranje proizvodnje. ODLUKE- kako svi menadžeri odlučuju, prirodno je usredotočiti se na donošenje odluka kao središnju temu u proizvodnji. POVIJEST UPRAVLJANJA PROIZVODNJOM- upravljanje proizvodnjom postoji dugo,otkad ljudi proizvode dobra i usluge. PODJELA RADA-zasniva se na vrlo jednostavnom konceptu. Specijalizacija rada za pojedini zadatak može rezultirati većom proizvodnošću i efikasnošću od one koja se postiže dodjeljivanjem puno zadataka jednom radniku. STANDARNIZACIJA DIJELOVA-dijelovi se standardiziraju kako bi se mogli zamjenjivati. Ideja se o standardizaciji do danas ukorijenila u našem društvu da rijetko kad ne mislimo o njoj. NPR. teško je zamisliti žarulje, koje se ne mogu alternativno zamijeniti...

Words: 2180 - Pages: 9

Free Essay

Menadzment Skripta

...efektivna I efikasna, predvodimo I motivisemo zaposlene I uspostavljamo kontrolne mehanizme da bismo se uverili da se nasi planovi sprovode u delo I da ce nasi ciljevi biti ispunjeni. Definise se I kao obavljanje posla uz pomoc drugih. Efikasnost podrazumeva obavljanje poslova uz minimalni napor/trosak/otpad. Efektivnost je izvrsavanje zadataka koji doprinose ostvarenju organizacionih ciljeva (kvalitetna uslga I zadovoljstvo kupaca) Funkcije menadzmenta 1. Planiranje – odredjivanje organizacionih ciljeva I nacina na koji se oni ostvaruju. To je jedan od najboljih nacina da se poboljsaju poslovne performanse. (vise o tome u poglavlju planiranje I odlucivanje) 2. Organizovanje – je odlucivanje o tome gde ce se odluke donositi, ko ce obavljati koje poslove I ko ce u kompaniji raditi za koga. 3. Vodjenje – podrazumeva inspirisanje I motivisanje zaposlenih da naporno rade da bi ostvarili ciljeve. 4. Kontrola – nadgledanje napretka u ostvarivanju ciljeva I preduzimanje korektivnih akcija kad je to potrebno. Vrste menadzera 1. Top menadzeri (npr. Generalni direktor, CEO, operativni direktor) odgovorni su za opsti pravac razvoja jedne organizacije- stvaraju uslove za promenu, definisu dalekoseznije misije I vizije za kompaniju. Druga odgovornost je stvaranje osecaja posvecenosti I zajednicke odgovornosti za performanse kompanije kkod zaposlenih Svojim recima I delima stvaraju pozitivne organizacione kulture, oni treba da salju I ponavljaju jasne I dosledne...

Words: 12479 - Pages: 50

Free Essay

Ndryshimet E Jetes

...sepse ushqimi e mban jetën. E ngjashme me këtë, nëse pyetemi porsa i përket punës, përgjigjet e njerëzve të gjitha do të lidheshin për të mbështetur dhe ofruar për vetveten dhe familjet e tyre. Ne mund të ndjekim këtë linjë pyetjesh me një qind pyetje dhe të arrijmë të njëjtin dhe përgjigjet e ngjashme nga secili, në çdo gjuhë, nga çdo vend në botë. Si është atëhere që pyetja "Cili është qëllimi i jetës" nxjerr kaq shumë përgjigje tërësisht të ndryshme? Ajo është krejt e thjeshtë sepse njerëzit janë të turbulluar, ata nuk dinë me të vërtetë përgjigjen. Ndërsa e pranojnë paditurinë e tyre, pjesa më e madhe do të ofrojë çdo përgjigje që ata kanë programuar të japin. Pas së gjithashtu, askush nuk do të pranojë se kanë jetuar në errësirë! Kjo pyetje meriton më meditim serioz sesa kjo, meriton reflektim serioz, është qëllimi jonë në këtë botë thjeshtë për të ngrënë, fjetë, veshur, punuar, për të marrë disa gjëra materiale dhe për të gëzuar vetet tona? Pse kemi lindur? Çfarë urtësie mund të ketë për krijimin e njeriut dhe këtë univers të stërmadh? Cili është objekti i ekzistencës sonë? Disa thonë që nuk ka fakte as me llogjikë as me shkencë, për të pohuar ekzistencën e Zotit ose asnjë origjinë hyjnore. Ndoshta, ata bien dakord, kishte një Big Beng dhe kjo botë komplekse me të gjitha orkestrimet u grumbullua vetvetiu. All-llahu e trajton ketë diskutim në Kur'an duke thënë: "All-llahut i takon sundimi i qiejve dhe i tokës dhe All-llahu ka fuqi mbi çdo gjë. Shiko! Në krijimin e qiejve...

Words: 1159 - Pages: 5

Free Essay

Menadzment Tehnologije I Razvoja

...MENADZMENT TEHNOLOGIJE I RAZVOJA MT 4-1 Operativni menadzment tehnologije 1.Prema prirodi svog nastanka sistemi mogu biti: (zaokruziti vise tacnih odgovora): A. 2; 5; B. 1; 3; C. 4; 5; D. 3; 3. 1. zatvoreni; 2. prirodni; 3. stohasticki; 4. deterministicki; 5. vestacki. A 2. Tehnoloski sistemi se prema oblasti delovanja dele na: A. proizvodne i neproizvodne; B. spoljne i unutrasnje; C. proizvodno i trzisno orijentisane; D. slozene i proste. A 3. Klasifikacija tehnoloskih procesa prema obimu proizvodnje: A. prekidni i neprekidni tehnoloski procesi; B. lancani, grupni, radionicki i zanatski; C. masovni, serijski i pojedinacni; D. procesi proizvodnje sirovina, polufabrikata i finalnih proizvoda. C 4. Opsta tehnoloska matrica se koristi za: A. opstu analizu tehnoloskog sistema; B. analizu horizontalnog i vertikalnog transfera tehnologije; C. implementaciju trzisne matrice u podsistemu tehnologije; D. posebnu analizu tehnoloskog sistema. A 5. Dve osnovne funkcije u upravljanju zavrsnom prugom tople valjaonice su: A. upravljanje duzinom i strukturom trake; B. upravljanje debljinom i temperaturom trake; C. upravljanje duzinom i debljinom trake; D. upravljanje strukturom i hemijskim osobinama trake; B 6. Nova proizvodna filozofija zasniva se na konceptu: A. Just-in-time; B. pojedinacna proizvodnja; C. Just-in-case; D. ekonomije obima. A 7. Uspostavljanje grupne tehnologije resava se metodom: A. horizontalnog i vertikalnog povezivanja...

Words: 5908 - Pages: 24

Free Essay

Market Research

...student Bojan Krivaćević br. Indeksa PF-65/07 Teze: 1. Uvod 2. Predmet i cilj istraživanja 3. Uloga i značaj istraživanja tržišta u preduzeću 4. Osnovni elementi istraživanja tržišta a. Tržišne karakteristike proizvoda b. Kvantitativna i kvalitativna analiza tržišta 5. Metode istraživanja tržišta 6. Segmentacija tržišta 7. Izbor marketing strategije 8. Primjer iz prakse: Istraživanje tržišta gaziranih sokova c. Pozicioniranje brenda na tržištu d. Inovacije i marketing e. Istraživanje tržišta - rezultati istraživanja 9. Zaključak 10. Literatura Datum uručivanja: ______________ Dekan: Mentor Profesor Profesor Dr Slobodan Barać Dr Milenko Stanić ________________ ______________ SAŽETAK Poznavanje tržišta neophodan je preduslov u izradi kvalitetnog marketinškog plana. Kvalitet poslovnih odluka koje se donose, podjednako zavisi od kvaliteta informacija kojima se raspolaže. Istraživanje tržišta pruža potporu pri donošenju marketinških odluka. Prema jednostavnoj definiciji, istraživanje tržišta je unaprijed osmišljeni (planirani) proces prikupljanja i analiziranja podataka, u svrhu pružanja informacija bitnih za donošenje marketinških odluka o upravljanju marketingom. Svrha istraživanja tržišta je prikupljanje podataka i informacija koje su neophodne za planiranje, organiziranje i kontrolu procesa poslovanja. Istraživanje tržišta omogućava da se donesu ključne...

Words: 14263 - Pages: 58

Free Essay

Hsjklf

...[pic] [pic] REPUBLIKA E SHQIPËRISË UNIVERSITETI I TIRANËS FAKULTETI EKONOMISE MSHSIE Re-engineering Software engineering Janar 23, 2012 Punoi: Pranoi: Alsiona TAFILAJ Blerina VIKA Gertuda BILO PËRMBAJTJA 1. REENGINEERING 3 1.1 Objektivat e Reengeering 4 1.2 Shërbimet e Reengeering 5 2. BUSINESS PROCESS REENGINEERING 6 2.1 Modeli i BPR 6 3. RE-ENGINEERING vs. REVERSE ENGINEERING 7 4. SOFTWARE REENGINEERING 8 4.1 Kuptimi i software reengineering 9 4.2 Parimet e software reengineering 9 4.3 Procesi i software reengineering 10 4.4 Modeli i procesit të software reengineering 11 4.5.Avantazhet dhe disavantazhet e software reengineering 13 4.6 Rreziqet e software reengineering 14 5. EKONOMIA E REENGINEERING 15 1. Reengineering Term i përcaktuar nga Michael Hammer dhe James Champy (në librin e tyre në 1993 'Reengineering The Corporation') si një "rimendim thelbësor dhe ridizajn radikal i proceseve të biznesit për të arritur përmirësime dramatike në masat e marra për përformancën, si kosto, shërbim dhe shpejtësi. I referohet aplikimit të teknologjisë dhe shkencë së menaxhimit për të modifikuar sistemet, organizatat, proceset dhe produktet ekzistuese me qëllimin për t’i bërë ato më efektive, më eficiente...

Words: 3505 - Pages: 15

Free Essay

Dubai

...inxhinieringut gjenetik DESMOND S. T. NICHOLL Botimi i tretë ALB-MED Bazat e inxhinieringut gjenetik Botimi i tretë Në këtë botim të tretë, të njohur për nivelin e studimeve paradiplomike, Desmond Nicholl thekson se mësimi i parimeve themelore është esencial për të gjitha bazat e inxhinieringut gjenetik. Prandaj, libri, duke qenë edhe i përditësuar në tërësi, nuk zgjerohet përtej parimeve themelore të manipulimit me gjene. Teksti ndahet në tri pjesë: Pjesa I, e cila paraqet një hyrje të biologjisë molekulare bazë; Pjesa II, përfshinë metodat të cilat përdoren për manipulimin e gjeneve; kurse Pjesa III, prezanton aplikimet e kësaj teknologjie. Ky botim ka një kapitull të ri i cili i kushtohet rëndësisë së shfaqjes së bioinformatikës si disiplinë e veçantë. Karakteristikë tjetër është paraqitja e kutive të tekstit, përmes të cilave, në mënyrë të veçantë, theksohen aspektet më të rëndësishme të temave të diskutuara, si dhe, në fillim të çdo kapitulli, jepet përmbledhja e kapitullit, në të cilën paraqiten qëllimet dhe rezultatet e pritura pas mësimit të një kapitulli. Këto risi, së bashku me fjalët kyçe, hartat konceptuale dhe fjalorin, studentëve do t’ju mundësojnë që të përshtatin studimin sipas stilit të tyre të të mësuarit, dhe në fund që, nga kjo lëndë, në të cilën studentët tradicionalisht kanë vështirësi, të fitojnë njohuri të qëndrueshme. Desmond S. T. Nicholl është ligjërues i lartë i shkencave biologjike në University of the West of Scotland...

Words: 11475 - Pages: 46

Free Essay

Bonitet Banaka

............................................................ 5 Prvi deo Bonitet banaka 1. Pojam boniteta........................................................................................................................ 8 2. Elementi boniteta banke ......................................................................................................... 9 2.1. Kvalitativni pokazatelji boniteta banke..............................................................................9 2.2. Kvantitativni pokazatelji boniteta banke .......................................................................... 10 2.2.1. Analiza finansijskog položaja banke ......................................................................... 11 2.2.1.1. Finansijski rizici u bankama ............................................................................... 14 2.2.2. Analiza prinosnog položaja banke ............................................................................ 21 2.2.2.1. Bilans stanja ...................................................................................................... 23 2.2.2.2. Bilans uspeha ..................................................................................................... 24 2.2.2.3. Izveštaj o tokovima gotovine .............................................................................. 25 Drugi deo Bazel II 1. Bazel II ........................................................................................................

Words: 10792 - Pages: 44

Free Essay

Logistika

...L O G I S T I K A |1. |Potrebe uvođenja poslovne |Potreba uvođenja logistike došla je u uvjetima kada ponuda dobara nije mogla podmiriti postojeću potražnju te je zadaća| | |logistike |poduzeća bila iznaći način povećanja obujma proizvodnje i unapređenje proizvodnosti rada. To se postizalo | | | |tehničko-tehnološkim razvojem, automatizacijom i racionalizacijom, no kasnije se javlja problem zasićenosti tržišta. | | | |Time se problem iz proizvodnje prebacuje na prodaju čime raste i značaj prodaje i marketinga | |2. |Svrha logistike i poticaji|Logistikom se biraju funkcijska, organizacijska, osobna, materijalna i druga sredstva za poboljšanje tokova dobara i | | |za uvođenje |vrijednosti u poduzeću čime ona postaje integrirajuća funkcija poduzeća. | | | |Svrha logistike je troškovno povoljnija proizvodnja i distribucija te postizanje konkurentskih prednosti. | | | |Svrha logistike je stalno usavršavanje protoka dobara i informacija kroz poduzeće. | | | |Ciljevi logistike su smanjenje zaliha, skraćivanje vremena protoka dobara i informacija te skraćivanje vremena reakcija| | | |na naloge kupaca...

Words: 9013 - Pages: 37

Free Essay

Brend

...rad Članci/Papers Vrednost brenda za potrošače i preduzeća Saša Veljković, Aleksandar Đorđević Rezime:  U savremenom poslovnom  upravljanju koje karakteriše sve intenzivniji konkurentski pritisak marketing dobija  sve dominantniju ulogu. Kompanije na  tržištu su sve više izložene konkurentskom  pritisku usled rasta broja ponuđača i  supstitutivnih proizvoda na domaćem  tržištu i rastu inostrane konkurencije  usled globalizacije svetske ekonomije. Od  uspešnosti upotrebe marketinških alata  u najvećoj meri zavisi ostvarenje očekivanih finansijskih efekata, kao i opstanak  kompanija na tržištu na srednji i dugi rok.  Brend je koristan marketinški alat koji u  savremenim uslovima poslovanja predstavlja značajan izvor konkurenstke prednosti. Koncept i suština brenda poslednjih  godina su značajno promenjeni u odnosu  na period od pre dvadeset i više godina.  Na brend se ne gleda više samo kao na  marku ili znak, već na alat koji kreira vrednost za potrošače i značajno doprinosi  poboljšanju konkurentske pozicije kompanije na tržištu. U procesu izgradnje brenda  potrebno je poći od elemenata koji utiču  na kreiranje vrednosti za potrošače i  dosledno primenjivati mehanizme kako bi  se funkcija brenda bila u funkciji poslovanja i omogućila kompanijama ostvarivanje  maksimalnih efekata u pogledu rasta  konkurentske prednosti. Istovremeno je  bitno, zbog analize finasijske isplativnosti  investicija u izgradnju brenda, sagledati i  uticaje brenda na finansijske performanse kompanije...

Words: 8692 - Pages: 35

Free Essay

Case Stydy

...ovog luksuznog centra, moraju najprije biti pretreseni od strane ličnih tjelohranitelja gospodina Arnoa, a onda se vrata od neprobojnog stakla nečujno otvaraju kako bi posjetioci ušli u svjetilište svjetskog modnog carstva. Okružen svijetom raskoši i lusuza, gospodin Arno je bio možda najvjerniji ambasador proizvoda svoje kompanije. To je čovjek koji je, od strane nekoliko vodećih poslovnih časopisa, godinama proglašavan za najbolje odjevenog glavnog izvršnog direktora (Best Dressed CEO). Međutim, došao je trenutak kada je bilo potrebno procijeniti situaciju, ponovo osmisliti ili čak redizajnirati strategije koje će voditi njegovu kompaniju na ulasku u veoma izazovan period njenog kratkog postojanja. Da li će LVMH biti sposoban da ispuni svoja obećanja i udvostruči prodaju svojih proizvoda i profit tokom narednih pet godina? Godina 2001. je bila turbulentna godina za LVMH. Pod vođstvom gospodina Arnoa, LVMH je bio uveliko na putu sprovođenja strategije koja je pozivala na povećanje raznovrsnosti ponude kada je riječ o luksuznim brendovima i istovremenu ekspaniziju u više geografskih područja u kojima je kompanija bila slabo zastupljena. Teško bi se moglo reći da je to bio lak poduhvat. Ispostavilo se da mnoga preuzimanja brendova i proširenja proizvodnih linija iziskuju velika ulaganja, dok su mnogi od ovih poslova tek trebala da stvore značajne profite. Profitabilnost grupe se uglavnom oslanjala na male prinose od već uspostavljenih proizvodnih linija –...

Words: 7377 - Pages: 30