Professional Documents
Culture Documents
Java 2 JDK 5 Pog 01 Od Pocetka
Java 2 JDK 5 Pog 01 Od Pocetka
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.
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.
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.
Uvod u Javu
Koreni direktorijum
bin
Kompajler,
interpreter
+
ostale
izvrne
datoteke
demo
Poddirektorijumi u
kojima se nalazi
probni kd
jdk1.5.0
include
sample
Datoteke
zaglavlja za
nativni C kod
JNLP primeri
jre
lib
Java Runtime
Datoteke koje su
potrebne izvrnim
datotekama
bin
lib
Biblioteke klasa
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..
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..
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
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.
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
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
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>
10
Uvod u Javu
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.
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);
}
}
11
Poglavlje 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
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.
12
Uvod u Javu
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?
13
Poglavlje 1
Opte drvo
Izvedeno iz
Izvedeno iz
Izvedeno iz
Jasen
Pravljenje
primerka
Sekvoja
Pravljenje
primerka
Hrast
Objekti tipa
Jasen
mojJasen
vasJasen
Slika 1-3
14
Uvod u Javu
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).
15
Poglavlje 1
tip: Stetson
boja: bela
veliina: 6
class CowboyHat {
String type;
String color;
int size;
Primerci
klase
tip: Stetson
boja: siva
veliina: 7
Slika 1-4
vlasnik: Jed
tip: Stetson
boja: bela
veliina: 6
hatOn: netano
class CowboyHat {
String owner;
String type;
String color;
int size;
boolean hatOn;
Primerci
klase
vlasnik: Slim
tip: Stetson
boja: siva
veliina: 7
hatOn: tano
Figure 1-5
16
Uvod u Javu
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
vlasnik: JonF
tip: Stetson
boja: bela
veliina: 7
eirStavljen: tano
ne
putH
Ow
ge
atOn
an
ch
vlasnik: JonF
tip: Stetson
boja: bela
veliina: 7
eirStavljen: netano
Slika 1-6
17
Poglavlje 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.
Zagradama je
obuhvaena
definicija
klase
Ovo je poseban
metod kojim se
kreiraju objekti Hat
Unutar ovih
zagrada
nalazi se kd
metoda
putHatOn()
Slika 1-7
18
Ovim se naznaavaju
atributi klase
Ovo su ostali
metodi klase
Uvod u Javu
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 17). 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.
19
Poglavlje 1
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.
20
Uvod u Javu
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.
21
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.
CLASS -Y0ROGRAM [
CLASS #OAT [
CLASS 3HOE [
CLASS 3OCK [
CLASS (AT [