You are on page 1of 57

Uvod u Javu itajui ovo poglavlje stei ete najosnovniju predstavu o programskom jeziku Java.

U ovoj fazi nije toliko bitno da razumete sve detalje koje emo ovde pomenuti zato to emo sve teme iz ovog poglavlja kasnije obraditi mnogo detaljnije. Ovde samo elimo da vam predstavimo opte koncepte na kojima se zasnivaju teme narednih poglavlja, najee situacije u kojima se koriste Java programi, kao i vrste programa koji odgovaraju svakoj od tih situacija. Dakle, u ovom poglavlju ete nauiti: q osnovne karakteristike jezika Java; q kako Java programi rade na vaem raunaru; q zato Java programi mogu da rade na razliitim raunarima; q osnovne postavke objektno orijentisanog programiranja; q kako izgleda jednostavan Java program i kako ga moete pokrenuti korienjem alata Java Development Kit; q ta je HTML i kako ga koristiti da bi se Java program ukljuio u veb stranicu. ta je zapravo Java? Java je inovativni programski jezik koji je postao nezaobilazan kada su u pitanju programi koji treba da se izvravaju na razliitim sistemima. Najpre, Java vam omoguava da piete male programe, takozvane aplete. To su programi koje moete da ugradite u veb stranice

kako biste obezbedili odreenu funkcionalnost. Ugraivanje izvrnog koda u veb stranice donosi neke vrlo interesantne mogunosti. Umesto da se na njoj na uobiajen nain pasivno prikau tekst i grafiki elementi, veb stranica moe da bude interaktivna, i to na nain koji vi izaberete. U nju moete da ubacite animacije, igre, obradu interaktivnih transakcija itd. mogunosti su praktino neograniene.Poglavlje 1 Naravno, ugraivanje programskog koda u veb stranice donosi posebne bezbednosne zahteve. Kada pristupa stranici u koju je ugraen Java kd, korisnik Interneta mora biti siguran da taj kd nee ugroziti rad njegovog raunara ili otetiti podatke koje uva u njemu. To znai da izvrenje ugraenog koda mora biti kontrolisano, ime se spreava bilo kakvo neeljeno ugroavanje vaeg raunara i osigurava da svaki Java kd napravljen sa loim namerama bude efikasno zaustavljen. U okviru Jave postoje mere koje smanjuju mogunost slinih dogaaja vezanih za Java aplete. Javina podrka za mrene aplikacije i aplikacije bazirane na Internetu ne zavrava se na apletima. Primera radi, Java serverske strane (Java Server Pages, JSP) predstavlja mono sredstvo za pravljenje serverskih aplikacija koje su u stanju da dinamiki prave i HTML stranice i da

ih zatim alju po konkretnim zahtevima klijenata. Naravno, stranice koje generie JSP mogu da sadre i Java aplete. Osim toga, Java omoguava i pravljenje iroke lepeze programa koji se neizmenjeni mogu izvravati na svakom raunaru iji operativni sistem podrava Java okruenje. Ovo se odnosi na veinu savremenih raunara. ak moete da napiete programe koji e funkcionisati i kao obini programi i kao apleti. Poslednjih godina Java je znaajno unapreena, naroito od pojave standarda Java 2. Dijapazon funkcija koje prua standardna operativna Java znaajno je povean. Sada u okviru ovog programskog jezika postoje obimne mogunosti za pravljenje aplikacija sa interaktivnim grafikim korisnikim interfejsom (GUI), detaljnu obradu slika i programiranje grafikih elemenata, kao i podrka za pristup relacionim bazama podataka i mrenu komunikaciju sa udaljenim raunarima. Praktino sve vrste aplikacija sada mogu uspeno da se programiraju u Javi i sve one odlikuju se potpunom prenosivou. Naravno, Java se jo uvek razvija i raste. U itavom nizu poboljanja izdvojiemo verziju 1.4 koja je donela mogunost itanja i pisanja jezika XML. Java 5.0 koja se pojavila nakon verzije 1.4 donela je neke nove i vane jezike mogunosti, kao i znaajna proirenja biblioteka klasa.

Ovo su samo neke od tema o kojima emo govoriti u ovoj knjizi. Karakteristike Jave Verovatno najvanija Javina karakteristika jeste injenica da je dizajnirana tako da u startu bude mainski nezavisna. Java programi mogu se neizmenjeni koristiti na svakoj platformi koja podrava ovaj programski jezik. Naravno, manji problemi su uvek mogui budui da u krajnjoj liniji uvek zavisite od naina na koji je Java implementirana na datom raunaru. Meutim, Java programi su, svakako, sutinski u mnogo veoj meri prenosivi od programa pisanih u drugim programskim jezicima. Aplikacija napisana u Javi zahtevae samo jedan skup iskaza izvornog koda, bez obzira na broj razliitih platformi na kojima e se koristiti. U svakom drugom programskom jeziku vrlo esto je neophodno da se izvorni kd aplikacije prilagodi konkretnom raunarskom okruenju, naroito ako ima zahtevan grafiki korisniki interfejs. Prema tome, Java omoguava znaajne utede i vremena i resursa kada su u pitanju razvoj, podrka i odravanje osnovnih aplikacija na veem broju razliitih softverskih i hardverskih platformi. Sledeu veoma vanu karakteristiku Jave predstavlja njena objektna orijentisanost. Objektno orijentisan pristup programiranju takoe predstavlja sutinsku karakteristiku svih Java programa, tako da

emo u nastavku ovog poglavlja razmatrati i ta to konkretno znai. Objektno orijentisani programi su razumljiviji i za njihovo odravanje i proirivanje potrebno je manje vremena nego za programe koji su pisani bez korienja objekata.Uvod u Javu Osim toga to je objektno orijentisana, u Javi su izbegnute mnoge tekoe i komplikacije koje prate neke druge objektno orijentisane programske jezike. Zahvaljujui tome, Java je jednostavnija i za uenje i za korienje. Uopteno govorei, u Javi ne postoje zamke koje su karakteristine za druge programske jezike. Uenje je, zahvaljujui tome, bre, dok je za postizanje kompetentnosti i samopouzdanja potrebno mnogo manje stvarnog programiranja. Pored svega pomenutog, Java se i lake testira. Programski jezik Java odlikuje se i ugraenom podrkom nacionalnih skupova znakova. Programi se u Javi jednako lako piu za korienje u Grkoj ili Japanu, kao i za zemlje u kojima je u upotrebi engleski jezik. Naravno, podrazumeva se da navedene jezike i dobro poznajete. Programi se u startu mogu napraviti tako da podravaju nekoliko razliitih svetskih jezika i automatski se prilagoavaju okruenju u kome se kd izvrava. Uenje Jave Java nije teak programski jezik, ali je ipak potrebno uloiti dosta truda da bi se savladao.

Prilino je kompaktan, ali i vrlo moan. Da bi se efikasno programiralo u Javi, pored ostalog, potrebno je da razumete i biblioteke koje idu uz program, a one su ve prilino obimne. Redosled kojim ete u ovoj knjizi uiti kako Java funkcionie i kako da je koristite briljivo je strukturiran. Zahvaljujui tome, strunost i programersko samopouzdanje sticaete na relativno lak i bezbolan nain. Koliko god je to bilo mogue, u poglavljima je izbegnuto korienje pojmova koje jo niste nauili. To znai da vae prve aplikacije nee imati grafiki korisniki interfejs. Iako vas to verovatno privlai, ukljuivanje GUI u prve aplikacije bi bilo isto kao kada biste uili da plivate skoivi u bazen u onom delu koji je najdublji. Ali, ako biste u vodu uli u najpliem dela bazena i prvo pokuali samo da se odrite na povrini, opasnosti da se udavite praktino ne bi bilo. Osim toga, sve su anse da biste, uz ovakav pristup, posle izvesnog vremena bili solidan pliva. Java programi Kao to smo ve rekli, postoje dve vrste programa koje moete da piete u Javi: one koji se ugrauju u veb stranice i zovu Java apleti i normalne nezavisne programe koje nazivamo Java aplikacije. Java aplikacije dalje mogu da se podele na konzolne aplikacije, koje podravaju samo izlaz u vidu znakova na ekranu vaeg raunara (na raunaru pod operativnim sistemom Windows, to je

komandna linija) i aplikacije sa prozorima, u kojima moete da napravite i koristite vei broj prozora. U aplikacijama sa prozorima koriste se mehanizmi uobiajeni za programe ove vrste kao to su meniji, palete alata, okviri za dijalog i slino. Uei osnove programskog jezika Java, kao ilustracije odreenih mehanizama posluie nam konzolne aplikacije. Ove aplikacije imaju jednostavan ulaz i izlaz u vidu komandne linije. To e vam pomoi da se usredsredite na specifinosti jezika i ne razmiljate o sloenim problemima vezanim za kreiranje i upravljanje prozorima. Tek kada ovladate svim mogunostima Java jezika, prei emo na aplikacije sa prozorima i na primere apleta. Uenje Jave ta vas eka Pre nego to bilo gde krenemo, uvek prethodno imamo ideju gde smo se zaputili i kojim emo putem ii. Zato pogledajmo kako e izgledati nae putovanje kroz Javu. Uopteno govorei, uei Javu pomou ove knjige proi ete kroz pet etapa:Poglavlje 1 1. Prvu etapu predstavlja ovo poglavlje. U njemu je dat prikaz osnovnih postavki vezanih za strukturu Java programa i objanjenje kako oni funkcioniu. Izmeu ostalog, govoriemo o tome ta su objektno orijentisani programi i kako se izvrni program pravi

iz izvorne datoteke sa Java kodom. Razjanjavanje ovih koncepata na samom poetku znaajno e vam olakati savladavanje Jave. 2. Zatim ete nauiti kako se kombinuju iskazi, koja sredstva moete da koristite za upisivanje osnovnih podataka u program, kako da izvodite proraune i kako da donosite odluke koje se baziraju na rezultatima tih prorauna. Ovo su ona najosnovnija znanja koja su neophodna za prelazak na sledei nivo. 3. U treoj etapi baviemo se klasama njihovim definisanjem i korienjem. Klase opisuju strukturu objekata, to znai da ete se ovde prvi put sresti sa objektnom orijentisanou Jave. Na kraju ove etape imaete najosnovnija znanja o tome kako funkcionie programski jezik Java i biti spremni da ta znanja praktino upotrebite. 4. U etvrtoj etapi nauiete kako da aktivnosti koje vai programi izvravaju podelite na odvojene zadatke koji mogu da se izvravaju simultano. Ovo je posebno vano ukoliko, primera radi, u jednu veb stranicu elite da ugradite nekoliko apleta, a ne elite da svaki od njih mora da eka na zavretak izvrenja onog prethodnog. Ili, moda ete eleti da neka lepa animacija nastavi da se izvrava dok vi igrate neku igricu, a da su oba programa deo iste veb stranice. 5. U petoj etapi detaljno emo vam pokazati kako da implementirate aplikaciju ili aplet sa

grafikim korisnikim interfejsom i kako da, u ovom kontekstu, realizujete interakciju sa korisnikom. Ovde e mogunosti Javinih biblioteka klasa doi do punog izraaja. Kada zavrite ovu etapu, biete potpuno spremni da u Javi napiete kompletne aplikacije ili aplete. Dakle, kada proitate ovu knjigu, trebalo bi da budete solidan Java programer. Sve ostalo je ve stvar iskustva. Da bismo vam pokazali kako Java funkcionie, u ovoj knjizi smo koristili zaokruene primere. Preporuujemo vam da sve ove primere napravite i isprobate, ak i one najjednostavnije, i da ih sve sami ukucate. Slobodno eksperimentiite. Ukoliko vam neto nije sasvim jasno, slobodno izmenite primer i posmatrajte ta e se desiti. Najbolje bi bilo da sami napiete neki svoj primer. Ako niste sigurni kako funkcionie neki aspekt Jave o kome smo ve govorili, bez oklevanja ga isprobajte praktino. Ne zaboravite da se na grekama ui, i to veoma uspeno. Java okruenje Programi napisani u Javi mogu da se izvravaju na najrazliitijim raunarima i pod raznim operativnim sistemima. Vai programi e jednako dobro raditi na PC raunaru pod bilo kojom podranom verzijom operativnog sistema Microsoft Windows, kao i na nekoj Linux ili Sun Solaris radnoj stanici. Ovo je mogue zato to se program napisan u Javi zapravo ne

izvrava direktno na vaem raunaru, ve u okviru standardizovanog okruenja po imenu Java 2 Platforma koje se u vidu softvera implementira na itavom nizu raunara i operativnih sistema. Platforma Java ima dve komponente softversku implementaciju hipotetikog raunara po imenu Java virtuelna maina (Java Virtual Machine, JVM) i Javin programski interfejs aplikacije (Java Application Programming Interface, Java API) koji predstavlja skup softverskih komponenti koje obezbeuju sve ono to vam je neophodno za pisanje zaokruenih interaktivnih aplikacija u Javi. Java kompajler pretvara Javin izvorni kd koji ste napisali u binarni program koji se sastoji od bajtkodova. Bajtkodovi predstavljaju mainske instrukcije za Java virtuelnu mainu. Uvod u Javu Prilikom izvravanja programa napisanog u Javi, program po imenu Java interpreter ispituje i deifruje bajtkod, proverava njegovu autentinost i bezbednost i zatim u okviru komponente Java virtuelne maine izvrava akcije koje su naznaene bajtkodom. Java interpreter moe da se izvrava samostalno ili u okviru pretraivaa veba kao to su, na primer, Netscape Navigator, Mozilla ili Microsoft Internet Explorer u kojima se automatski poziva kad god veb stranica koja se prikazuje sadri aplet.

S obzirom na to da se Java programi sastoje od bajtkoda, a ne od mainskih instrukcija, oni su u potpunosti izolovani od konkretnog hardvera na kome se izvravaju. Svaki raunar na kome postoji Java okruenje moe da izvrava va Java program jednako dobro kao i bilo koji drugi. Osim toga, Java interpreter se nalazi izmeu vaeg programa i samog raunara, tako da moe da sprei izvrenje svih neovlaenih akcija u okviru programa. U prolosti su fleksibilnost i bezbednost povlaile i sporije izvrenje Java programa. Interpretirani Java program se obino izvravao deset puta sporije od ekvivalentnih programa kod kojih su upotrebljene nativne mainske instrukcije. Meutim, u aktuelnim implementacijama Jave ove slabije performanse su u velikoj meri nadoknaene, pa u programima koji nisu raunski zahtevni kao to su, na primer, oni koje ete ugraivati u veb stranice, neete primetiti ba nikakvu razliku u performansama. Prilikom korienja platforme JVM, dela aktuelnog kompleta Java 2 Development Kit (JDK) koji moete da preuzmete sa veb lokacije kompanije Sun, postoji svega nekoliko situacija u kojima ete primetiti pad performansi u odnosu na program kompajliran do nivoa nativnog mainskog kda. Razvoj Java programa Za korienje ove knjige potrebna vam je platforma Java 2 Platform, Standard Edition (J2SE),

verzija 5.0 ili neka aktuelnija. Komplet JDK za itav niz hardverskih platformi i operativnih sistema moete da preuzmete ili sa veb lokacije kompanije Sun http://java.sun.com (za Windows, Solaris ili Linux) ili sa lokacija na koje ete biti upueni sa ove. Komplet JDK koji ete ovde koristiti moete da preuzmete sa adrese http://java.sun.com/j2se. Verzije kompleta Java Development Kit za Mac OS X moete da preuzmete sa adrese http://devworld.apple. com/java/. Skreemo vam panju na to da je platforma J2SE 5.0 nasledila verziju J2SE 1.4. Bilo bi logino da je verziju 1.4 nasledila verzija 1.5, ali je odlueno da se, zbog znaaja novih funkcija i sveukupne zrelosti proizvoda, nova verzija nazove 5.0. Kodna imena za module u verziji 5.0 i dalje koriste notaciju 1.5.0, koju ete videti i u imenima direktorijuma i na nekoliko drugih mesta. Jedan aspekt terminologije takoe nekada ume da zbuni komplet Java Development Kit se nekada naziva ba tako JDK ili Java Development Kit, a nekada SDK ili Software Development Kit. U verziji 5.0 koristi se termin JDK, dok se u verziji 1.4 koristio termin SDK. Prema tome, u pitanju je samo mala terminoloka razlika, a znaenje je praktino isto. Radi doslednosti, svaku verziju kompleta Java Development Kit u ovoj knjizi emo nazivati JDK.

Za pravljenje izvornih datoteka Java programa koje ete koristiti u kompletu JDK, potreban vam je editor teksta. Dolazi u obzir svaki editor koji u sadraj datoteke ne ugrauje formatiranje. Postoji itav niz podesnih besplatnih programa od kojih su neki ba i namenjeni Javi, tako da ete bez veih problema pronai onaj koji vam najvie odgovara. Nama je najvie odgovarao editor Jcreator. Postoje i potpuno besplatna verzija ovog programa, ali i komercijalna verzija koja je neto bogatija funkcijama. Za poetak vam je ova besplatna verzija sasvim dovoljna i moete je preuzeti sa adrese http://www.jcreator.com. Ukoliko elite da ispitate i neke druge editore, obavezno posetite veb lokaciju http://www.download.com. Postoji nekoliko izuzetnih profesionalnih okruenja za razvijanje Java programa iji su proizvoai kompanije Sun, Borland, Metrowerks i Symantec. U pitanju su okruenja u kojima su Poglavlje 1 pravljenje i editovanje Java izvornog koda, kao i kompajliranje programa i naknadno otklanjanje greaka maksimalno olakani. U rukama iskusnih programera ovo su veoma mone alatke. Ipak, preporuujemo vam da se, uei Javu pomou ove knjige, naroito ako nemate zavidno programersko iskustvo, drite kompleta JDK kompanije Sun i nekog najjednostavnijeg editora za

pravljenje izvornog koda. Verovatno se pitate zato vam ne preporuujemo korienje alatki koje olakavaju i ubrzavaju programiranje. Postoji vie razloga. Najpre, profesionalni sistemi za razvoj programa kriju od vas mnogo toga to morate da znate ukoliko elite da savladate Javu. Zatim, ova okruenja koriste se za pravljenje sloenih aplikacija sa mnogo koda i bolje je da se u fazi uenja te kompleksnosti klonite. Praktino sva komercijalna okruenja za razvoj Java programa imaju unapred ugraene funkcije koje ubrzavaju programiranje. Ovo je izuzetno korisno za iskusne programere, ali predstavlja ozbiljnu smetnju u procesu uenja. Treba da vodite rauna i o tome da su komercijalna okruenja nekada povezana sa konkretnom verzijom platforme Java 2. To znai da neke od najnovijih funkcija moda nee funkcionisati. Ukratko, profesionalna okruenja za programiranje u Javi namenjena su prvenstveno obuenim i iskusnim programerima, tako da vam preporuujemo da na njih preete tek kada proitate ovu knjigu. Sa druge strane, ukoliko iz bilo kog razloga elite da radite u nekom komercijalnom sistemu za razvoj Java programa, a imate problema sa nekim primerom iz knjige, dati primer uvek moete da, korienjem komandne linije, isprobate i u okviru kompleta JDK. Po svoj prilici, primer e funkcionisati bez problema.

Instaliranje kompleta JDK Na veb lokaciji kompanije Sun postoje detaljne instrukcije o postupku instaliranja kompleta JDK u okviru raznih operativnih sistema, tako da ovde neemo ulaziti u sve varijacije ovog postupka. Ipak, trebalo bi da obratite panju na nekoliko stvari koje moda neete primetiti u dokumentaciji postupka instaliranja. Najpre, komplet JDK i njegova dokumentacija su potpuno nezavisni i instaliraju se posebno. Komplet JDK za operativni sistem Windows postoji u dve verzije kao veb instalacija u kojoj se datoteke preuzimaju redom i kao kompletno preuzimanje .exe datoteke ijim se aktiviranjem pokree celokupna instalacija. Dokumentaciju kompleta JDK ini veliki broj HTML hijerarhijski ureenih datoteka koje se distribuiraju u formi ZIP datoteke. Bie vam lake da najpre instalirate JDK, pa tek onda i dokumentaciju. Ukoliko pod operativnim sistemom Windows komplet JDK instalirate na jedinicu C:, dobiete strukturu direktorijuma kao na slici 1-1. Direktorijum jdk1.5.0_n sa slike 1-1 nekada se naziva i Javin koreni direktorijum, a nekada Javin home direktorijum. U imenu stvarnog korenog direktorijuma moe se pojaviti i broj izdanja kompleta, to znai da bi ime direktorijuma moglo da glasi jdk.5.0_n, gde n predstavlja broj izdanja. Primera

radi, u prvom izdanju za odravanje ovaj direktorijum zvao bi se jdk.5.0_01. U direktorijumu sample nalaze se primeri aplikacija koje koriste protokol JNLP (Java Network Launching Protocol) koji se koristi za izvravanje aplikacija ili apleta sa mrenog servera bez potrebe korienja pretraivaa ili preuzimanja i instaliranja koda. Nema razloga da previe razmiljate o sadraju ovih direktorijuma, pogotovo ne sada, na samom poetku, ali bi trebalo da putanjama koje definiete u okviru svoje promenljive okruenja PATH dodate i putanju jdk.5.0\bin. Ovo e vam omoguiti da kompajler i interpreter aktivirate sa bilo kog mesta, bez prethodnog navoenja putanje. Ukoliko ste JDK instalirali na jedinici C:, onda e ova putanja glasiti C:\jdk.5.0\bin.Uvod u Javu jdk1.5.0 bin demo include sample jre bin lib lib Koreni direktorijum u kome se nalaze datoteke izvornog koda za klase standardne biblioteke JNLP primeri Izvrne datoteke za Runtime Biblioteke klasa

Kompajler, Java Runtime interpreter + ostale izvrne datoteke Poddirektorijumi u kojima se nalazi probni kd Datoteke zaglavlja za nativni C kod Datoteke koje su potrebne izvrnim datotekama Slika 1-1 Samo jedno upozorenje ukoliko ste prethodno instalirali neki komercijalni proizvod za programiranje u Javi, proverite da li je on moda izmenio vau promenljivu okruenja PATH i u nju ubacio putanje do vlastitih Java izvrnih datoteka. Ako jeste, prilikom pokretanja Java kompajlera ili interpretera pojavie se verzija datog komercijalnog proizvoda, a ne ona koju ste dobili uz JDK. Ovaj problem moete da reite tako to ete sami ukloniti neeljenu putanju ili putanje. Ukoliko iz nekog razloga ne elite da uklonite ove putanje komercijalnog proizvoda, prilikom svakog pokretanja kompajlera ili interpretera moraete da navedete njihovu

punu putanju. U direktorijumu jre nalaze se Java Runtime elementi koji se koriste prilikom izvravanja Java programa. Klase Javine biblioteke uvaju se u direktorijumu jre\lib. Njih, meutim, neete moi da vidite pojedinano zato to su upakovane u arhivu rt.jar. Ovde nita ne dirajte. Java Runtime prilikom izvrenja vaih programa sam iz ove arhive uzima ono to mu je potrebno. Promenljiva okruenja CLASSPATH predstavlja est izvor problema i zabune za poetnike u ovom programskom jeziku. Aktuelni komplet JDK NE ZAHTEVA definisanje ove promenljive, ali ako ju je ve definisala neka druga verzija Jave ili nekog drugog sistema, ona e vam gotovo sigurno napraviti probleme. Komercijalni sistemi za programiranje u Javi i verzije kompleta JDK starije od 1.2 najee definiu promenljivu CLASSPATH. Zato obavezno proverite da li je ova promenljiva okruenja definisana na vaem sistemu. Ako jeste, a vi vie ne koristite aplikaciju koja je ovu promenljivu instalirala, slobodno je obriite. Sa druge strane, ukoliko ba morate da je zadrite recimo da elite da zadrite sistem koji je definisao ili delite raunar sa nekim kome je ona i dalje potrebna, prilikom svakog izvravanja Java koda moraete da privremeno definiete promenljivu CLASSPATH korienjem opcije komandne linije. U nastavku ovog poglavlja pokazaemo vam kako se to radi.

Ukoliko elite da se i JDK dokumentacija instalira u hijerarhiju prikazanu na slici 1-1, raspakujte je u Java korenom direktorijumu. Ako ste komplet JDK instalirali na jedinici C:, to bi onda bila putanja C:\jdk.5.0. Nakon toga, u Java korenom direktorijumu pojavie se i poddirektorijum docs u koji treba da instalirate datoteke ove dokumentacije. Kada budete eleli da koristite ovu dokumentaciju, jednostavno pokrenite datoteku index.html koja e se nalaziti u ovom poddirektorijumu.. Raspakivanje izvornog koda biblioteka klasa Izvorni kd biblioteka klasa nalazi se u arhivi src.zip koju ete pronai u Java korenom direktorijumu jdk.5.0. Kada savladate osnove programskog jezika Java, pretraivanje ovog izvornog koda bie vam od velike koristi. ak i iskusnijim Java programerima ove izvorne datoteke mogu pomoi da shvate kako odreene stvari funkcioniu ili zato neto ne funkcio-Poglavlje 1 nie. Izvorne datoteke moete da raspakujete iz arhive pomou programa Winzip, pomonog programa JAR koji se dobija uz JDK ili bilo kog drugog programa koji je u stanju da raspakuje .zip arhive. Skreemo vam panju na to da je u pitanju velika arhiva i da e taj postupak potrajati. Nakon raspakivanja sadraja arhive src.zip u Java korenom direktorijumu \jdk1.5.0 pojavie

se poddirektorijum src u koji e se automatski instalirati izvorni kd. Ukoliko elite da ga pregledate i u njemu pronaete neku klasu u bilo kom editoru teksta, samo otvorite .java datoteku koja vas zanima.. Kompajliranje Java programa Javin izvorni kd se uvek uva u datotekama sa oznakom tipa .java. Kada napravite izvorni kd za program i sauvate ga u datoteci .java, potrebno je da se izvorni kd obradi Java kompajlerom. Pre nego to upotrebite kompajler koji se dobija uz JDK, direktorijum u kome se nalazi va izvorni kd uinite tekuim direktorijumom, a zatim zadajte sledeu komandu: javac MyProgram.java U ovom sluaju javac je ime Java kompajlera, a MyProgram.java ime izvorne datoteke programa. U ovoj komandi pretpostavlja se da se u tekuem direktorijumu nalazi vaa izvorna datoteka. Ukoliko ona nije tu, kompajler nee moi da je pronae. Isto tako, ovde smo pretpostavili i to da izvorna datoteka odgovara definiciji programskog jezika Java iz aktuelne verzije kompleta JDK. Postoji i opcija komandne linije source kojom moete da naznaite verziju Jave. Za JDK 5.0 komanda koju smo ve naveli bi uz dodatak ovog parametra glasila: javac -source 5 MyProgram.java Skreemo vam panju na to da kao vrednost opcije source moete da koristite i 1.5 i u tom

sluaju komanda izgleda ovako: javac -source 1.5 MyProgram.java U praksi moete da zanemarite ovu opciju komandne linije osim ukoliko ne elite da kompajlirate Java program koji je napisan u starijoj verziji kompleta JDK. Za kompajliranje koda koji je napisan u JDK 1.4, napisali biste sledeu komandu: javac -source 1.4 oldSourceCode.java Evo i jednostavnog programa koji moete da isprobate u kompajleru: public class MyProgram { public static void main(String[] args) { System.out.println(Rome wasnt burned in a day!); } } Sve to ete kao rezultat dobiti jeste ispisivanje jedne reenice u komandnoj liniji. S obzirom na to da je poenta ovog programa samo isprobavanje kompajlera, sada neemo objanjavati kako on radi. Naravno, ovaj kd morate da upiete upravo onako kako je naveden i snimite izvornu datoteku kao MyProgram.java. Ako pogreite, kompajler e da signalizira greku.Uvod u Javu Ukoliko biste eleli da prevaziete postojeu definiciju promenljive CLASSPATH recimo, zato to ju je definisao neki drugi sistem za programiranje u Javi, komanda bi izgledala ovako: javac -classpath . MyProgram.java

Iza rei classpath dolazi vrednost ove promenljive, a u ovom sluaju stoji samo taka. Na ovaj nain definie se samo putanja do tekueg direktorijuma. To znai da e kompajler vau izvornu datoteku (ili datoteke) potraiti u tekuem direktorijumu. Ukoliko zaboravite na ovu taku, kompajler nee moi da pronae izvorne datoteke u tekuem direktorijumu. U svakom sluaju, opciju classpath. moete da ubacite bez ikakvog straha zato to ona nikako ne moe da kodi. Skreemo vam panju na to da svoje izvorne datoteke ne treba da uvate u strukturi direktorijuma kompleta JDK zato to vam to moe napraviti probleme. Bolje je da izvorne kodove svojih programa uvate u posebnim direktorijumima koje ste sami napravili. Ako u vaem programu nema greaka, kompajler e da generie bajtkod program koji predstavlja ekvivalent vaeg izvornog koda. Bajtkod program se uva kao datoteka istog imena kao izvorna datoteka, ali sa oznakom tipa .class. Javini izvrni moduli uvek se uvaju u vidu datoteka sa oznakom tipa .class. Prema podrazumevanim parametrima, datoteka .class bie sauvana u onom direktorijumu u kome se nalazi i izvorna datoteka. Opcije komandne linije koje smo vam ovde prikazali samo su neke od opcija koje moete da

koristite u kompajleru. Meutim, one su sasvim dovoljne za kompajliranje svih primera iz ove knjige. U okviru JDK dokumentacije postoji detaljan opis svih raspoloivih opcija kompajlera. Pored toga, navoenjem opcije help moete da dobijete spisak standardnih opcija koje vam stoje na raspolaganju. Ukoliko za razvijanje programa u Javi koristite neki drugi proizvod, prilikom kompajliranja programa ete verovatno koristiti neki pristupaniji grafiki korisniki interfejs u kome neete morati da na ovaj nain upisujete komande. Meutim, oznake tipa rezultujuih izvornih i klasnih datoteka svuda su iste. Izvravanje Java aplikacije Da biste pokrenuli izvravanje bajtkod programa u vidu datoteke .class pomou Java interpretera koji je deo kompleta JDK, direktorijum u kome se nalazi datoteka .class uinite tekuim i zatim upiite komandu: java -enableassertions MyProgram Skreemo vam panju na to da smo za identifikovanje programa koristili samo ime MyProgram, a ne ime datoteke MyProgram.class koju je generisao kompajler. Poetnici esto prave ovu greku i, po analogiji sa operacijom kompajliranja, koriste ime datoteke. Kada biste imenu MyProgram dodali i oznaku tipa .class, va program se ne bi izvrio i dobili biste sledeu poruku o greci:

Exception in thread main java.lang.NoClassDefFoundError: MyProgram/class Dok kompajler oekuje da pronae ime vae izvorne datoteke, Java interpreteru potrebno je ime klase u ovom sluaju MyProgram a ne ime datoteke. Datoteka MyProgram.class sadri i klasu MyProgram. Uskoro emo vam objasniti i ta je klasa.Poglavlje 1 10 Opcija enableassertions neophodna je kod JDK 5.0 programa koji koriste tvrdnje. S obzirom na to da ete tvrdnje koristiti im nauite ta su one zapravo, bilo bi dobro da razvijete naviku stalnog korienja ove opcije. Ukoliko elite, opciju enableassertions moete i da skratite u ea. Ukoliko elite da preskoite postojeu definiciju promenljive CLASSPATH, ova opcija je ista kao i kod kompajlera. I u kompajleru i u interpreteru moete da koristite skraenicu umesto classpath upiite samo cp. Evo kako bi ova komanda mogla da izgleda: java -ea -cp . MyProgram Kako bi izvrio va program, Java interpreter analizira i zatim izvrava bajtkod instrukcije. Implementacija Java Virtual Machine je identina na svim raunarskim okruenjima koja podravaju Javu, tako da moete biti sasvim sigurni u prenosivost svog programa. Kao to

smo ve rekli, va program e jednako dobro da radi na Unixovoj implementaciji Jave, kao i pod bilo kojim drugim operativnim sistemom (Microsoft Windows, Solaris, Linux, OS/2) koji podrava Javu. (Ipak vodite rauna o tome koja je verzija Jave podrana. Neka okruenja kao to je, na primer, Macintosh malo kasne, tako da e se za njih implementacija Jave 2 pojaviti neto kasnije nego za Windows ili Solaris.) Izvravanje apleta Java kompajler koji je deo kompleta JDK, kompajlira i aplikacije i aplete. Meutim, aplet se ne izvrava na isti nain kao i aplikacija. Da bi mogao da se pokrene, aplet se mora ugraditi u veb stranu. Nakon toga moete da ga pokrenete ili pomou pretraivaa u kome je ukljuena opcija Java 2 ili korienjem krajnje jednostavnog i ogoljenog pretraivaa appletviewer koji se dobija uz JDK. Preporuujemo vam da za pregledanje apleta u fazi uenja koristite appletviewer. Ako va aplet ne bude funkcionisao, tano ete znati da li je problem u vaem kodu ili u integraciji sa pretraivaem. Kompajlirani aplet koji ste ugradili u veb stranu i sauvali u tekuem direktorijumu svog raunara kao MyApplet.html moete da pokrenete sledeom komandom: appletviewer MyApplet.html Ali kako se aplet ubacuje u veb stranu? Jezik HTML

Jezik za oznaavanje hiperteksta (Hypertext Markup Language, HTML) jeste jezik koji se koristi za definisanje veb strana. Kada veb stranu definiete kao HTML dokument, ona se uva kao datoteka sa oznakom tipa .html. HTML dokument se sastoji od niza elemenata koji se identifikuju tagovima. Dokument poinje sa <html>, a zavrava se sa </html>. Ovi graninici <html> i </html> predstavljaju tagove i svaki element HTML dokumenta nalazie se unutar slinog para tagova u uglastim zagradama. Tagovi elemenata ne razlikuju upotrebu malih i velikih slova, tako da ih moete koristiti bez ikakvih ogranienja, ali se prema konvenciji uvek koriste velika slova kako se ne bi meali sa tekstom. Evo primera HTML dokumenta koji ima naslov i malo teksta: <html> <head> <title>This is the title of the document</title> </head> <body>Uvod u Javu 11 Ovde moete da stavite bilo kakav tekst. Telo dokumenta moe da sadri sve vrste ostalih HTML elemenata, ukljuujui i <B>Java aplete</B>. Skreemo vam panju na to kako svaki element poinje tagom koji ga identifikuje, a zavrava se

istim tim tagom kome je dodata jedna kosa crta. Parom tagova oko Java apleta u prethodnoj reenici postigli bismo ispisivanje teksta polucrnim slovima. </body> </html> Postoje dva elementa koji se mogu pojaviti direktno unutar elementa <html>. Kao to moete da vidite u prethodnom primeru, u pitanju su elementi <head> i <body>. Element <head> obezbeuje informacije o dokumentu, a nije obavezno njegov deo. Tekst obuhvaen tagovima <title>, koji je u ovom primeru u okviru elementa <head>, predstavljae naslovnu liniju prozora u kom se prikazuje stranica. Tagovi ostalih elemenata mogu se nalaziti u okviru elementa <body> i u pitanju su tagovi za naslove, liste, tabele, hiperveze ka drugim stranama i Java aplete. Postoje elementi za koje nije potrebno stavljati zavrni tag zato to se smatraju praznim. Takav je, na primer, kd elementa <hr/> kojim se postavlja horizontalna linija celom irinom stranice. Ovim tagom moete da podelite stranu i odvojite jednu vrstu elemenata od druge. Dodavanje apleta u HTML dokument Za veinu parova tagova elemenata u poetnom kodu moete da navedete atribut elementa koji definie dodatne ili kvalifikujue podatke o elementu. Ovako je Java aplet identifikovan

u okviru taga <applet>. Sledi primer u kome ete videti kako se Java aplet ugrauje u HTML dokument: <html> <head> <title> A Simple Program </title> </head> <body> <hr/> <applet code = MyFirstApplet.class width = 300 height = 200 > </applet> <hr/> </body> </html> Dvema osenenim linijama izmeu tagova za horizontalne linije istakli smo to da se bajtkod apleta nalazi u okviru klase MyFirstApplet.class. Ime datoteke koja sadri bajtkod apleta navodi se kao vrednost atributa code kontrolnog koda <applet>. Druga dva atributa width i height definiu irinu i visinu dela ekrana koji e aplet da koristi prilikom svog izvrenja. Ovi parametri moraju se precizirati za svaki aplet. Evo kako izgleda Javin izvorni kd jednostavnog apleta. import javax.swing.JApplet; import java.awt.Graphics; public class MyFirstApplet extends JApplet { public void paint(Graphics g) {

g.drawString(To climb a ladder, start at the bottom rung, 20, 90); } }Poglavlje 1 1 Skreemo vam panju na to da Java razlikuje upotrebu velikog i malog slova. Ukoliko re public upiete sa velikim slovom P, program se nee kompajlirati. Kada pokrenete aplet, on e vam samo prikazati poruku na ekranu. Za sada nije mnogo bitno ta se deava u pozadini prikazivanja ove poruke ovim primerom smo samo eleli da vam ilustrujemo kako se aplet ugrauje u HTML stranu. Ukoliko ovaj kd kompajlirate i prethodnu specifikaciju HTML strane snimite kao MyFirstApplet.html u istom direktorijumu u kome je i kd Java apleta, aplet ete moi da pokrenete i pomonim programom appletviewer. Komanda je sledea: appletviewer MyFirstApplet.html Nakon toga pojavie se prozor poput ovoga na slici 1-2. Slika 1-2 Ovaj prozor je prikazan u Internet Exploreru pod operativnim sistemom Windows XP i verovatno bi neto drugaije izgledao u nekom drugom pretraivau i pod nekim drugim operativnim sistemom. Budui da su visina i irina prozora u apletu navedeni u pikselima, njegove stvarne dimenzije zavisie od rezolucije i veliine vaeg monitora.

S obzirom na to da JDK automatski instalira Javin dopunski modul, trebalo bi da ovaj primer funkcionie bez ikakvih problema u Internet Exploreru. U sluaju da ne radi, iz menija Tools vaeg Internet Explorera izaberite stavku Internet Options. U kartici Advanced pronaite opciju Use JRE v1.5.0 for <applet> (requires restart) i proverite da li je izabrana. Za pretraivae Mozilla 1.x ili Netscape 7.x moete da u instalacionoj dokumentaciji kompleta JDK pronaete kako se ovaj Java dopunski modul naknadno ukljuuje. Objektno orijentisano programiranje u Javi Kao to smo na poetku ovog poglavlja ve istakli, Java je objektno orijentisan programski jezik. Prilikom korienja jezika koji nisu objektno orijentisani vi, u osnovi, reenje svakog problema morate da iskaete pomou brojeva i znakova osnovnih tipova podataka kojima moete da manipuliete u jednom programskom jeziku. U objektno orijentisanim programskim jezicima stvari stoje malo drugaije. U njima i dalje moete da radite sa brojevima i znacima koji se nazivaju osnovnim tipovima podataka, ali i da definiete druge vrste entiteta koji su relevantni za konkretan problem koji elite da reite. Dakle, u objektno orijentisanim jezicima za reavanje problema koriste se entiteti ili objekti koji su povezani sa datim problemima. Ova injenica e uticati na nain strukturiranja programa, ali i

na termine kojima se formulie reenje problema. Ukoliko se, primera radi, va problem tie bejzbol igraa, u vaem Java programu e se po svemu sudei nai i objekat po imenu BaseballPlayer; ako se bavite proizvodnjom voa u Kaliforniji, u vaem programu bi mogao da se nae objekat Oranges. Uvod u Javu 1 Osim injenice da imaju veoma razumnu strukturu, objektno orijentisani programi su obino mnogo razumljiviji. U Javi je praktino sve definisano objektima. Ako se ranije niste bavili objektno orijentisanim programiranjem (ili jeste, ali ne u toj meri), ovo vam se na prvi pogled moe uiniti zastraujuim. Samo hrabro! Javini objekti su sasvim jednostavni toliko jednostavni da emo odmah prei na njih kako biste to pre shvatili principe na kojima se ovaj programski jezik zasniva. U tom smislu, ve od samog poetka biete na pravom putu. Ipak, ovo ne znai da emo bilo ta preskoiti. Na ovom mestu emo se baviti, pre svega, osnovnim konceptima. Tamo gde je to potrebno, u tome e nam pomoi i segmenti Java koda. Sav kd koji emo ovde koristiti u potpunosti emo objasniti u poglavljima koja slede. Sada samo pokuajte da razumete pojam objekata, a njihovi konkretni praktini detalji doi e kasnije na red. ta su zapravo objekti?

Objekt moe da bude bilo ta. Objekti su svuda oko nas. Tako bi, na primer, Drvo mogao da predstavlja odreenu klasu objekata drvea u celini. Uopteno govorei, objekat Drvo je prilino apstraktan koncept iako se svako drvo uklapa u ovu kategoriju, bolje je imati konkretnije objekte za vrste drvea. Tako bi hrast u mom dvoritu bio oznaen sa mojHrast, jasen u vaem dvoritu sa onoProkletoDrvo, a uvena ogromna sekvoja u SAD, koja je pod zatitom drave, sa generalSherman i svi oni predstavljaju konkretne primere drveta. Potklase objekta Tree u ovom kontekstu su Hrast, Jasen i Sekvoja. Skreemo vam panju na to da ve ovde lagano ulazimo u terminologiju klasa je termin koji se odnosi na specifikaciju skupa objekata koji imaju zajednika svojstva. Na slici 1-3 prikazane su neke klase drvea, kao i njihovi meusobni odnosi. Dakle, klasa je specifikacija ili shematski plan u formi segmenta programskog koda koja definie kakva je struktura odreene vrste objekta. Potklasa je klasa koja nasleuje sva svojstva roditeljske klase, ali ima i neke posebnosti. Klase Hrast i Jasen koje pripadaju klasi Drvo moraju imati karakteristike ove opte klase inae ne bi mogle da joj pripadaju. Meutim, svaka potklasa klase Drvo, kao to je, na primer, klasa Hrast, ima i neke posebnosti kojima se razlikuje od ostalih tipova klase Drvo.

Naravno, klasu ete definisati tako da se uklopi u ono to elite da uinite sa nekim kontekstom u aplikaciji. Ovde nema iskljuivosti. U naem trivijalnom problemu specifikacija klase Drvo mogla bi da obuhvati samo ime vrste i njenu visinu. Ali, ukoliko biste se bavili botanikom, va problem bi mogao da zahteva postojanje mnogo sloenije klase, ili skupa klasa, koje bi morale da obuhvate i veliki broj drugih osobina drvea. Za svaki objekat koji e va program da upotrebi mora negde da postoji odgovarajua definicija klase u koju se uklapaju objekti tog tipa. Ovo pravilo vai i u Javi, ali i u svim drugim objektno orijentisanim programskim jezicima. Koncepcija klasa u programiranju identina je sa klasifikovanjem stvari u stvarnom svetu. To je pogodan i ustanovljen nain za grupisanje stvari. Primerak klase jeste tehniki termin za postojei objekat neke klase. Klasa Jasen predstavlja specifikaciju tipa objekta, a va objekat vasJasen napravljen je prema toj specifikaciji. Dakle, objekat vasJasen bio bi primerak klase Jasen. im definiete klasu, moete da kreirate objekte ili primerke date klase. Ova konstatacija dovodi nas do sledeeg bitnog pitanja. Po emu se objekat jedne klase (recimo, Jasen) razlikuje od objekta koji pripada nekoj drugoj klasi (na primer, Sekvoja)? Drugim reima, kojim se to informacijama definie klasa?Poglavlje 1

1 Opte drvo Izvedeno iz Izvedeno iz Izvedeno iz Sekvoja Hrast Jasen Pravljenje primerka Objekti tipa Jasen mojJasen vasJasen Pravljenje primerka Objekti klase Drvo odlikovae se odreenim zajednikim svojstvima. Svaki objekat u okviru ove klase imae neke sopstvene vrednosti ovih svojstava. Slika 1-3 ta definie klasu objekata? Verovatno ste ve sami pogodili kako glasi odgovor na ovo pitanje. Definicija klase identifikuje sve parametre koji definiu objekat date klase. Ovakva definicija nam je za sada dovoljna. Moda bi neko drugi definisao klasu veim ili manjim skupom parametara koji definiu istu vrstu objekta sve zavisi od toga ta zapravo elite da uradite sa datom klasom. Vi odluujete

koje ete aspekte objekata upotrebiti za definisanje date klase objekata, a birate ih u zavisnosti od vrste problema za koji su vam objekti te klase potrebni. Zamislimo sada neku konkretnu klasu objekata. Kada biste, primera radi, definisali klasu Hat, u njenoj definiciji biste mogli da koristite samo dva parametra. Tip kape biste mogli da definiete nizom znakova Fedora ili Bezbol kapa, a veliinu numerikom vrednou. Parametri koji definiu objekat neke klase nazivaju se promenljive primerka, atributi klase ili polja klase. Promenljive primerka mogu da budu osnovni tipovi podataka kao to su brojevi, ali isto tako i objekti drugih klasa. Primera radi, naziv objekta Hat mogao bi da bude definisan tipom String gde klasa String definie objekte koji se sastoje od niza znakova.Uvod u Javu 1 Naravno, postoje i mnoge druge osobine kojima biste mogli da upotpunite definiciju objekta Hat atribut boja mogao bi da bude drugi niz znakova, na primer, Plava. Prilikom definisanja klase, opredeljujete se za onaj skup atributa koji ispunjava vae zahteve. U terminologiji objektno orijentisanog programiranja, ovo se naziva apstrahovanje podataka zato to iz itavog niza mogunosti jednog tipinog objekta vi izdvajate one atribute koje elite da koristite. U Javi bi definicija klase Hat izgledala ovako:

class Hat { // Ovde se nalazi ono to detaljno definie klasu. // Ovde bismo mogli da definiemo naziv kape, njenu veliinu, // moda boju i sve drugo to nam je potrebno. } Naziv klase dolazi iza rei class, a detalji njene definicije izmeu velikih zagrada. Zbog svog posebnog znaenja, re class u programskom jeziku Java naziva se kljuna re i njeno korienje rezervisano je samo za ovaj kontekst. U Javi postoji mnogo drugih kljunih rei sa kojima ete se vremenom upoznati. Zapamtite da se nijedna od njih ne sme koristiti u neke druge svrhe. Ovde neemo ulaziti u detalje definisanja klase Hat zato to vam to trenutno nije neophodno. Redovi izmeu zagrada u naem prethodnom primeru nisu kd, ve komentari programa, budui da poinju sa dve kose crte. Kompajler u Java programima ignorie sve to se u nekom redu nalazi iza ove dve kose crte, tako da ih moete koristiti za ostavljanje objanjenja. Uopteno govorei, to vie korisnih komentara dodate u svoj program, tim bolje. U Javi postoje i drugi naini za pisanje komentara, o emu emo govoriti u poglavlju 2. Svaki objekat vae klase imae konkretan skup definisanih vrednosti koje ga karakteriu.

Primera radi, mogli biste da imate objekat tipa CowboyHat koji bi bio definisan vrednostima Stetson za tip, Belo za boju i brojem 7 za veliinu (slika 1-4). Iako su objekti tipa CowboyHat sa slike 1-4 definisani skupom od tri vrednosti za koje ne biste oekivali da se menjaju u datom primerku, uopteno govorei, vrednosti parametara koji definiu objekte ne moraju biti fiksirane. Bilo bi logino da su vrednosti tip i veliina datog objekta CowboyHat fiksirane budui da eiri obino ne menjaju svoju veliinu bar to ne ine kada je suvo. Ali, tu bi mogli da postoje i neki drugi atributi (slika 1-5). Na primer, mogao bi da postoji i parametar vlasnik u kome bi bilo zapisano ime vlasnika. Ova vrednost bi onda mogla da se promeni kad god bi eir prodajom, ili na neki drugi nain, promenio vlasnika. Isto tako, mogli bismo da imamo i parametar hatOn koji bi nam govorio da li je vlasnik stavio eir na glavu (vrednost tano) ili nije (vrednost netano).Poglavlje 1 1 Primerci klase class CowboyHat { String type; String color; int size; {

tip: Stetson boja: bela veliina: 6 tip: Stetson boja: siva veliina: 7 Slika 1-4 Primerci klase class CowboyHat { String owner; String type; String color; int size; boolean hatOn; { vlasnik: Jed tip: Stetson boja: bela veliina: 6 hatOn: netano vlasnik: Slim tip: Stetson boja: siva veliina: 7 hatOn: tano Figure 1-5Uvod u Javu 1 Operacije sa objektima

Suprotno onome to biste mogli da zakljuite gledajui sliku 1-5, objekat neke klase nije samo skup razliitih podataka. Osim parametara koji karakteriu neki objekat, u okviru klase je precizirano ta moete da uinite sa njenim objektom odnosno, definisane su operacije koje je mogue izvesti sa objektima date klase. Naravno, da biste u programu imali bilo kakvu korist od objekata, najpre morate da odluite na koji nain elite da ih koristite. U tom smislu, vano je znati o kojoj je vrsti objekta re, koje atribute on sadri i ta vi nameravate sa njim da uinite. U sluaju klase CowboyHat sa slike 1-5, mogli biste da imate operacije koje biste nazvali putHatOn i takeHatOff, ije bi znaenje bilo u skladu sa njihovim nazivima i koje imaju smisla kod objekata CowboyHat. Ove operacije bi kod konkretnog objekta CowboyHat mogle da definiu vrednost hatOn. Da biste odredili da li je va CowboyHat stavljen ili nije, samo treba da proverite ovu vrednost. Isto tako, mogli biste imati i operaciju changeOwner kojom biste definisali promenljivu u okviru koje se evidentira ime aktuelnog vlasnika eira. Na slici 1-6 sa objektom CowboyHat redom smo izveli dve operacije. vlasnik: TimB tip: Stetson boja: bela veliina: 7

eirStavljen: netano changeOwner putHatOn vlasnik: JonF tip: Stetson boja: bela veliina: 7 eirStavljen: tano vlasnik: JonF tip: Stetson boja: bela veliina: 7 eirStavljen: netano Slika 1-6Poglavlje 1 1 Naravno, za svaku vrstu objekta moete imati one operacije koje vi elite. Kada biste za objekte Hat eleli da dodate operaciju ShootHoleIn, ni to ne bi bio nikakav problem. Treba samo da definiete ta data operacija ini sa objektom. Moda se u ovom trenutku pitate kako se definie operacija za neku klasu objekata. Kao to ete uskoro i videti, to se svodi na pravljenje segmenta koda po imenu metod koji se identifikuje imenom koje mu dodelite. Metodima moete da prosledite razne podatke cele brojeve, brojeve u pokretnom zarezu, nizove znakova ili objekte klasa. Sve ove podatke obrauje kd

datog metoda. Metod i sam moe da kao rezultat vrati podatke. Izvoenje operacija sa objektima svodi se na izvravanje metoda koji definie te operacije. Naravno, na odreenu klasu moete da primenite samo one operacije koje su u okviru nje ve definisane. To znai da upotrebljivost i fleksibilnost klase zavise od toga koliko ste je promiljeno definisali. U poglavlju 5 emo se vratiti na ovu temu. Da biste bili u stanju da prepoznate definiciju klase, razmotriemo kako izgleda jedna potpuna definicija. Kd klase CowboyHat o kojoj smo ve govorili mogao bi da se ilustruje kao na slici 1-7. class CowboyHat { } private String owner; private int size; private boolean hatOn=false; // Konstruktor za pravljenje objekta CowboyHat public CowboyHat(String person, int theSize) { size = theSize; // Definisana je veliina eira owner = person; // Definisan je vlasnik eira } // Metod za stavljanje eira na glavu public void putHatOn() { hatOn = true; // Zapisano je da je eir na glavi } // Metod za skidanje eira public void takeHatOff() {

hatOn = false; // Zapisano je da je eir skinut } // Metod za promenu vlasnika public void changeOwner(String newOwner) { owner = newOwner; } // Metod za dobijanje veliine eira public int getSize() { return size; // Vraanje veliine eira } // Ime aktuelnog vlasnika // Veliina eira // Da li je eir na glavi ili nije Zagradama je obuhvaena definicija klase Unutar ovih zagrada nalazi se kd metoda putHatOn() Ovim se naznaavaju atributi klase Ovo je poseban metod kojim se kreiraju objekti Hat Ovo su ostali metodi klase

Slika 1-7Uvod u Javu 1 Ovaj kd emo sauvati kao datoteku po imenu CowboyHat.java. Ime datoteke koje sadri definiciju klase uvek je isto kao ime klase, dok se oznakom tipa .java identifikuje Javin izvorni kd. Kd za definiciju klase nalazi se unutar vitiastih zagrada koje idu iza identifikacije klase (slika 1-7). Kd svakog metoda klase takoe se nalazi unutar zagrada. Klasa ima tri promenljive primerka owner, size i hatOn, a ova poslednja se uvek inicijalizuje vrednou false. Svaki objekat koji se kreira u skladu sa specifikacijom ove klase imae svoju nezavisnu kopiju svake od ovih promenljivih. To znai da e svaki objekat imati sopstvene vrednosti za vlasnika, veliinu eira i to da li je eir na glavi ili nije. Da bi kd bio krai, u ovoj verziji klase smo malo ograniili parametar type. Kljunom reju private koja je primenjena na svaku promenljivu primerka osigurava se to da samo kd u okvirima metoda klase moe da pristupi ovim vrednostima direktno i promeni ih. Metodi klase takoe mogu da se navedu uz korienje kljune rei private. Spreavanje pristupa nekim lanovima klase spolja jeste veoma vana funkcija. Na ovaj nain se unutranjost klase titi od menjanja ili drugih vidova neispravnog korienja. Nekome ko iz nekog drugog

programa koristi vau klasu dozvoliete da pristupi samo onim delovima vae klase za koje vi smatrate da je to uputno. Zahvaljujui tome, vi moete da izmenite unutranje funkcionisanje klase, a da se to ne odrazi na ostale programe koji tu klasu koriste. Moete da izmenite sve ono to ste unutar klase oznaili kljunom reju private, pa ak i sam kd unutar bilo kog javnog metoda. Jedino ne smete da menjate ime metoda i brojeve i tipove vrednosti koji se tom metodu predaju ili se od njega dobijaju. Naa klasa CowboyHat ima pet metoda, to znai da sa objektom CowboyHat moete da uinite pet razliitih stvari. Jedan od njih je i specijalni metod konstruktor koji kreira objekat CowboyHat ovaj metod ima isto ime kao klasa. Svim onim to se nalazi unutar zagrada koje idu iza imena konstruktora, navode se podaci koji se predaju ovom metodu prilikom njegovog izvravanja odnosno, kreiranja objekta CowboyHat. U praksi biste morali da definiete jo nekoliko drugih metoda da bi ova klasa bila upotrebljiva. Primera radi, bio bi vam potreban i metod za poreenje CowboyHat objekata kako biste videli koji je od njih vei. Meutim, u ovom trenutku samo elimo da kod vas stvorimo predstavu o tome kako kd izgleda. Detalji nam ovde nisu vani jer emo se na njih vratiti u poglavlju 5. Programski iskazi u Javi

Kao to ste videli na primeru klase CowboyHat, kd svakog metoda neke klase stoji unutar zagrada, a sastoji se od programskih iskaza. Znak takazarez oznaava kraj svakog programskog iskaza. Ukoliko je potrebno, u Javi jedan iskaz moe da obuhvati i nekoliko redova koda, jer se kraj svakog od njih odreuje znakom takazarez, a ne krajem reda. Evo jednog Javinog programskog iskaza: hatOn = false; Ako elite, ovo biste mogli da napiete i ovako: hatOn = false;Poglavlje 1 0 U iskaze moete da ubacite i razmake i tabulatorske znake i oni se mogu prostirati kroz nekoliko redova ime se postie bolja itkost, naroito u jako dugim iskazima. Ipak, postoje i neka razumna ogranienja. Recimo, ne moete da stavite znak za razmak usred imena nekog primerka. Kada biste napisali hat On, kompajler bi to proitao kao dve rei. Enkapsuliranje U ovom odeljku emo vam predstaviti jo jedan termin kojim kasnije moete da impresionirate svoje prijatelje. U pitanju je enkapsuliranje. Taj termin se odnosi na postupak sakrivanja podataka i metoda unutar objekta. Ovo sakrivanje se postie tako to se ove stavke u definiciji klase navedu uz kljunu re private. U klasi CowboyHat promenljive primerka owner, type i hatOn

su enkapsulirane. Njima je mogue pristupiti jedino putem metoda koji su definisani u okviru klase. Prema tome, vrednosti koje ove promenljive sadre mogu da se izmene jedino pozivom metoda koji je za to zaduen. Mogunost ovakvog enkapsuliranja lanova klase veoma je bitna za bezbednost i integritet objekata klase. Moda ete u nekom programu imati klasu sa podacima koji mogu da prime samo neke konkretne vrednosti. Sakrivanje podataka lanova i obavezno korienje metoda za njihovo definisanje ili menjanje, pruie vam garancije u pogledu valjanosti definisanih vrednosti. Neto ranije smo ve pomenuli veliku prednost enkapsuliranja mogunost sakrivanja implementacije klase. Ograniavanje pristupa lanovima klase pruie vam slobodu da unutranjost date klase menjate, a da se to ne odraava na programe koji je koriste. Dok god su spoljne karakteristike metoda koji se pozivaju izvan klase neizmenjene, interni kd moete da izmenite kako god vi to elite. U konkretnom objektu primerku klase CowboyHat enkapsulirane su promenljive owner, size, kao i hatOn, koje pokazuju status eira. Spolja je mogue pristupiti samo konstruktoru i metodima putHatOn(), takeHatOff(), changeOwner() i getSize(). Kad god u tekstu budemo pozivali na neke metode, koristiemo zagrade kako biste

mogli da ih razlikujete od drugih pojmova koji imaju imena. Neke od primera ove vrste ve ste videli u prethodnom pasusu. S obzirom na to da u definiciji i u programima metodi uvek imaju zagrade, sasvim je logino da ih na isti nain navodimo i u tekstu. Klase i tipovi podataka U programiranju se u osnovi bavimo nainima na koje se razni tipovi podataka obrauju ili transformiu. Budui da klase definiu tipove objekata sa kojima e program da radi, na definisanje klase moete da gledate isto kao i na definisanje tipa podataka. Prema tome, klasa Hat je tip podatka kao to je to i klasa Tree i svaka druga klasa koju ete definisati. U Javi postoji i biblioteka standardnih klasa koje e vam pruiti itav niz programerskih alatki i funkcija. Dakle, u najveem broju sluajeva u vaim programima pisanim u Javi deavae se obraivanje, manipulisanje i transformisanje objekata raznih klasa. U Javi postoje i neki jednostavni tipovi podataka koji nisu klase, a nazivaju se osnovni tipovi podataka. O njima emo neto detaljnije govoriti u narednom poglavlju, a sada emo rei samo toliko da su u pitanju tipovi za numerike vrednosti kao to su, recimo, 99 ili 3,75, zatim Uvod u Javu 1 za jednostavne znake kao to su A ili ?, ili za logike vrednosti kao to su true ili false. U Javi

postoje i klase koje odgovaraju svakom od osnovnih tipova podataka iz razloga o kojima emo govoriti neto kasnije. Primera radi, u Javi postoji klasa Integer koja definie objekte koji enkapsuliraju cele brojeve. Svaki entitet vaih Java programa koji ne pripada osnovnim tipovima bie objekat neke klase ili klase koju ste vi definisali, ili one koja je bila deo Java okruenja ili nekog drugog programerskog paketa. Klase i potklase Mnogi skupovi objekata koje biste mogli da definiete u okviru klase mogli bi se dalje podeliti na specijalizovane podskupove koji su takoe predstavljeni klasama. Jedna od karakteristika Jave upravo je i ta mogunost definisanja jedne klase kao specijalizovane verzije neke druge. Tako je, zapravo, i u stvarnosti. Uvek postoji vie naina na koje biste mogli da podelite kola ili umu. Klasa etinar bi, primera radi, bila potklasa klase Drvo. To znai da klasa etinar ima sve promenljive primerka i metode klase Drvo, ali i neke dodatne koje je ine posebnom. Klasa etinar je potklasa klase Drvo, dok je klasa Drvo natklasa klase etinar. Zbog toga to smo prilikom njenog definisanja za polaznu taku upotrebili klasu Drvo, za klasu etinar emo rei da je izvedena iz klase Drvo i da od nje nasleuje sve atribute. Prednosti korienja objekata

Kao to smo ve rekli, objektno orijentisani programi napisani su korienjem objekata koji su specifini za probleme o kojima je re. Primera radi, u simulatoru flipera mogli biste da definiete i upotrebite objekte Table, Ball, Flipper i Bumper. Ovakva koncepcija je izuzetno pogodna zato to olakava razvoj i proirivanje programa i ini njihov kd razumljivijim. U okviru Jave postoji itav niz standardnih klasa koje e vam pomoi u razvoju programa, a uvek moete da napravite i svoje opte klase koje ete koristiti u onim oblastima koje vas posebno interesuju. S obzirom na to da u objektu postoje i metodi koji dejstvuju na njega i podaci koji ga definiu, greke u programiranju su mnogo ree ukoliko se koriste objekti. Vai objektno orijentisani Java programi bi morali da budu pouzdaniji od svojih ekvivalenata u proceduralnim programskim jezicima. Pravljenje objektno orijentisanih programa traje due zato to moramo da osmislimo i napravimo klase, ali pisanje samog koda kod njih nekada ide ak i mnogo bre nego kod proceduralnih programskih jezika. Osim toga, objektno orijentisani programi se lake odravaju i proiruju. Struktura Java programa Pogledajmo sada kakva je struktura programa napisanih u Javi: q Program napisan u Javi uvek se sastoji od jedne ili vie klasa.

q Kodovi svake klase obino se nalaze u posebnim datotekama, a svakoj od ovih datoteka morate dati isto ime kao i klasi koju njom definiete. q Izvorna Javina datoteka mora imati oznaku tipa .java.Poglavlje 1 Prema tome, datoteka u kojoj je definisana klasa Hat zvae se Hat.java, a datoteka u kojoj je definisana klasa BaseballPlayer BaseballPlayer.java. Na slici 1-8 ilustrovali smo tipian program koji se sastoji od nekoliko datoteka. Kompletan program sastoji se od 5 datoteka. CLASS-Y0ROGRAM[ $EFINICIJA KLASE ] -Y0ROGRAM

*AVA #OAT

JAVA 3HOE

JAVA 3OCK

JAVA (AT

JAVA CLASS#OAT[ $EFINICIJA KLASE ] CLASS3HOE[ $EFINICIJA KLASE ] CLASS3OCK[ $EFINICIJA KLASE ] CLASS(AT[ $EFINICIJA KLASE ] Slika 1-8 Ovaj program nam je oigledno povezan sa odevanjem, jer etiri od pet klasa predstavljaju odevne predmete. Svaka izvorna datoteka sadri definiciju klase i sve datoteke koje ine program uvaju se u istom direktorijumu. U izvornim datotekama vaih programa nalazi se sav kd koji ste vi napisali, ali to ne znai da je tu apsolutno sve to je ugraeno u va program. U vaim programima bie i koda iz standardne javina biblioteke klasa i zato emo sada razmotriti o emu je tu zapravo re. Javina biblioteka klasa

U Javi, biblioteka predstavlja skup klasa, najee srodnih mogunosti, koje moete da koristite u svojim programima. Javina biblioteka klasa donosi vam itav niz pogodnosti. Bez nekih od njih vai programi ne bi ni funkcionisali, dok vam neke druge jednostavno znaajno olakavaju posao. S obzirom na sveobuhvatnost standardne biblioteke klasa, ovde neemo previe ulaziti u detalje, ali ete videti kako se primenjuju mnoge od njihovih mogunosti. Budui da biblioteka klasa u osnovi predstavlja skup klasa, ona se i uva u vidu skupova datoteka od kojih svaka sadri definiciju jedne klase. Ove klase su grupisane u povezane skupove koji se nazivaju paketi i svaki od njih se uva u posebnom direktorijumu. Jedna klasa moe da pristupi bilo kojoj drugoj klasi iz istog paketa, dok joj klase iz drugih paketa mogu, ali i ne moraju biti dostupne. Na ovu temu emo se vratiti u poglavlju 5. Ime paketa bazira se na putanji do direktorijuma u kome se uvaju klase koje datom paketu pripadaju. Primera radi, klase iz paketa java.lang uvaju se u direktorijumu java\lang (ili, java/lang pod Unixom). Ova putanja povezana je sa konkretnim direktorijumom koji je automatski poznat Java runtime okruenju koje izvrava va kd. Uvek moete da napravite i vlastite pakete u kojima e se nalaziti vae klase koje elite da koristite u nekom drugom

kontekstu ili one koje su na neki nain povezane. U okviru kompleta JDK postoji sve vei broj standardnih paketa verovatno vie od 100. Evo paketa koje ete najee koristiti:

You might also like