Professional Documents
Culture Documents
Programski Jezik Java
Programski Jezik Java
Programski Jezik Java
SADRAJ :
1. Uvod
8. Programiranje u Javi
9. Popularnost Jave
10. Zakljuak
11. Literatura
2
1. Uvod-to je Java ?
injenica koja nam oteava jednostavno definiranje ovog pojma je ta da je Java u biti puno
razliitih stvari. Osim toga, pravi potencijal Jave u mnogome ovisi o kojoj Javi u biti
govorimo.
Moemo tvrditi da svaku od danih podstavaka prezentira drugaija implementacija Jave. Svaka
od njih ima svojih prednosti kao i ogranienja. Vano je u ovom trenu razumjeti iako Java
programski jezik podrava neke vrste manifestacija, to ne znai da e pojedina manifestacija biti
doputena ili ak mogua u svim implementacijama. Gledano s praktine strane, performansa i
sigurnost nam ograniavaju to danas moemo napraviti unutar Java programskog okruenja.
3
2. The Java Virtual Machine JVM
Strojni jezik za Java Virtual Machine se zove Java bytecode. Nema razloga zbog kojega Java bajt
kod ne bi mogao biti koriten kao strojni jezik i nekog stvarnog raunala, osim ovog prividnog.
Zapravo, Sun Mycrosystems, zaetnik Jave, razvio je CPU-ove koji izvravaju Java bajt kod kao
svoj strojni jezik.
Ipak, jedna od glavnih prednosti Jave je da zapravo moe biti koritena na bilo kojem raunalu.
Sve to je na tom raunalu potrebno je interpreter za Java bajt kod. Takav interpreter oponaa
Java virtual machine na isti nain kao to prividno raunalo oponaa osobno raunalo.
Naravno, Java interpreter je potreban za svaku vrstu raunala, ali nakon to raunalo dobije Java
bajt kod interpreter, moe izvravati bilo koji Java bajt kod program. A isti taj Java bajt kod
program moe biti izvren na bilo kojem raunalu koje ima takav interpreter. Ovo je jedna od
glavnih osobina Jave: isti kompilirani program se moe izvravati na vie razliitih vrsta
raunala.
Postavlja se pitanje zato uope koristiti prijelazni Java bajt kod? Zato se ne bi isporuivao
izvorni Java program pa da ga svako kompilira za sebe u strojni jezik raunala na kojem ga eli
koristiti? Prvi od mnogo razloga je da kompiler mora razumijeti Javu, sloeni jezik vie razine.
Kompiler, sam po sebi, vrlo je sloen program, dok je, za razliku od njega, Java interpreter
prilino mali, jednostavan program. Zbog toga je jednostavnije napisati interpreter za novu vrstu
raunala, a jednom kad je uraeno, to raunalo moe pokretati bilo koji kompilirani Java
4
program. Sa druge strane, bilo bi mnogo sloenije napisati Java kompiler za isto raunalo.
Osim toga, mnogi Java programi su namijenjeni dohvaanju preko mree. Ovo vodi do oitih
sigurnosnih pitanja: korisnik ne eli spustiti i pokrenuti program koji bi mogao nanijeti tetu
njegovom raunalu ili podacima. Java interpreter slui kao meuspremnik izmeu korisnika i
sputenog programa. Korisnik zapravo pokree interpreter koji neizravno izvrava dohvaeni
program. Interpreter moe zatititi korisnika i raunalo od mogue opasnih radnji tog programa.
Mnogo ljudi misli da Javu koristimo samo kao dodatak vlastitim Web HTML stranicama tako
da rade interesantne efekte sa slikama ili raunaju koliko ste dana ili minuta stari. Meutim,
Javu moemo koristiti isto kao C++ za pisanje stand-alone aplikacija. Postupak je sljedei:
Sm bajtni kod je dosta manji od ekvivalentnog izvrnog koda, recimo, C-a, ali brzina njegovog
interpretiranja daleko zaostaje naspram brzine izvravanja ekvivalentnih programa pisanih u C-u.
Alternativno rjeenje je u koritenju tzv. just-in-time interpretiranja, gdje Javina Virtuelna
Maina prebacuje bajtni kod u native kod prije samog izvravanja. To za manje aplikacije prua
razumnu performansu uz zadranu prenosivost izvrnog koda.
Meutim, ak i toliko naglaavana prenosivost moda ne poiva na vrstim temeljima. Iole vee
aplikacije e vjerojatno uslijed ogranienja nametnutih standardnim Java okruenjem biti
prisiljene koristiti vlastita korisnika suelja u vidu native library datoteka (JNI) ijim se
funkcijama proiruju mogunosti Jave. U tom sluaju mada je osnovna aplikacija prenosiva,
morat e se prilagoavati od operativnog sistema do razliitih arhitektura raunala library
datoteke pisane u C/C++-u bez kojih osnovna aplikacija nee moi raditi.
5
4. Osnovna graa programa
Dva su osnovna dijela programiranja: podaci i naredbe. Za rad s podacima potrebno je
razumijevanje varijabli i tipova, a za rad s naredbama potrebno je razumjeti upravljake strukture
(control structures) i podprograme (subroutines). Velik dio ovih predavanja posveen je
usvajanju ovih modela.
Varijabla je samo lokacija u memoriji (ili nekoliko lokacija promatranih kao jedinica) kojemu je
dodijeljeno ime da ga se u programu moe lako pozivati i koristiti. Programer treba voditi rauna
samo o imenu, voenje rauna o memorijskom mjestu dunost je kompilera. Programer ne smije
gubiti iz vida da ime upuuje na neku vrstu mjesta u memoriji koje moe spremiti podatke, ak i
ako ne mora znati gdje je to tono u memoriji.
U Javi i veini ostalih jezika varijabla ima tip (type) koji ukazuje na vrstu podataka koje moe
spremiti. Jedna vrsta varijabli moe sadravati integer - cjelobrojne vrijednosti, dok druga sadri
floating point - brojeve s decimalnim mjestima. Raunalo pravi razliku izmeu integer 17 i
floating point 17.0, zapravo u raunalu izgledaju sasvim razliito. Takoer postoje i tipovi za
pojedinane znakove, nizove znakova, kao i za manje uobiajene tipove kao to su datumi, boje,
zvukovi ili bilo koji drugi tip podataka koje bi program mogao spremiti.
Takoer postoje i ulazne naredbe za uzimanje podataka od korisnika ili iz datoteka na diskovima
raunala i izlazne naredbe za slanje podataka u suprotnom smjeru. Ove osnovne naredbe - za
pomicanje podataka s mjesta na mjesto i za obradu podataka su dijelovi za izradu svih programa.
Ovi dijelovi su sloeni u sloene programe koritenjem upravljakih struktura i podprograma.
Program je niz naredbi. U obinom odvijanju raunalo izvodi ove naredbe redom kako se
pojavljuju jednu za drugom. Ovo je oito vrlo ogranien nain jer bi raunalo vrlo brzo ostalo bez
naredbi koje treba izvriti. Upravljake strukture su posebne naredbe koje mogu izmijeniti tok
odvijanja programa.
Postoje dvije osnovne vrste upravljakih struktura: petlje, koje omoguavaju ponavljanje niza
naredbi i grananja koja omoguuju raunalu da odlui izmeu vie razliitih postupaka
ispitivanjem uvjeta koji se javljaju za vrijeme izvravanja programa.
6
Na primjer, mogue je da ako je vrijednost varijable "glavnica" vea od 10000, tada se "kamata"
rauna mnoenjem sa 0.05; a ako nije tada se kamata rauna mnoenjem glavnice sa 0.04.
Program treba neki nain zapisa ove odluke. U Javi to je mogue ostvariti koritenjem sljedee
"if" naredbe:
Detalji za sada nisu bitni, vano je zapamtiti da raunalo moe ispitati uvjet i odluiti na osnovu
toga to dalje)
Na primjer, ako se eli ispisati natpise s imenom za svako ime u adresaru moglo bi se napisati
"Uzmi prvo ime i adresu i ispii natpis; uzmi drugo ime i adresu i" to vrlo brzo postaje jako
smijeno i moglo bi uope ni ne raditi ako unaprijed nije poznato koliko imena zapravo ima. Ono
to bi zapravo htjeli rei je neto kao: "Dok god ima imena za obradu, uzmi slijedee ime i adresu
i ispii natpis." Ovakvo ponavljanje se u programu izraava petljom.
Veliki programi su tako sloeni da bi ih bilo gotovo nemogue napisati bez da ih se "razbije" u
lake ostvarive dijelove. Podprogrami su jedan od naina ostvarivanja tog "razbijanja".
Podprogram se sastoji od naredbi za izvravanje nekog zadatka okupljenih u cjelinu s imenom.
Ime se kasnije koristi kao zamjena za itav niz naredbi. Na primjer, ako je jedan od zadataka koje
program mora izvriti crtanje kue na ekranu, potrebno je naredbe okupiti u podprogram i dati
mu prikladno ime, npr. "nacrtajKucu()". Nakon toga, na bilo kojem mjestu u programu gdje je
potrebno nacrtati kuu dovoljno je napisati jednu naredbu: nacrtajKucu();
Ovo e imati uinak jednak kao ponavljanje svih naredbi za crtanje kue na svakom mjestu.
Prednost nije samo u tome da je manje kucanja. Organiziranje programa u podprograme takoer
pomae organiziranju razmiljanja i napora u razvoju programa. Za vrijeme pisanja podprograma
za crtanje kue mogue se koncentrirati iskljuivo na problem crtanja kue, bez razmiljanja o
ostatku programa. Jednom kad je podprogram gotov, moe se zaboraviti na detalje crtanja kua -
taj problem je rijeen. Podprogram postaje kao ugraeni dio jezika koji je mogue koristiti bez
razmiljanja o tome to se dogaa unutar podprograma.
7
Varijable, tipovi, petlje, grananja i podprogrami su osnova onog to bi se moglo nazvati
tradicionalnim programiranjem. Osim toga, kako programi rastu javlja se potreba za dodatnim
strukturama za rjeavanje njihove sloenosti. Jedno od najuinkovitijih sredstava je objektno
orijentirano programiranje.
Da bi raunalo moglo izvravati naredbe, one moraju biti pisane na raunalu razumljiv nain, tj. u
programskom jeziku. Programski jezici se razlikuju od ljudskog po svojoj jasnoi i strogosti to
je u programu dozvoljeno, a to nije. Pravila koja odreuju to je dozvoljeno zovu se sintaksa
jezika. Sintaksna pravila odreuju osnovni rjenik jezika i nain na koji se programi mogu
stvarati koristei petlje, grananja i podprograme. Sintaksno ispravan program je onaj koji je
mogue kompilirati ili izvriti. Programi koji sadravaju sintaksne greke e biti odbaeni uz
poruku o greci. Dakle, za postati uspjean programer potrebno je detaljno poznavati sintaksu
koritenog programskog jezika.
Sintaksa je, ipak, samo dio prie. Naime, nije dovoljno samo napisati program koji radi, potreban
je program koji daje ispravan rezultat, dakle program mora imati smisao. Smisao programa se
zove semantika. Semantiki ispravan program je onaj koji radi tono ono to programer trai od
njega.
Pri uvoenju novih jezinih elemenata bit e objanjena i sintaksa i semantika elementa.
Zapamtite sintaksu i pokuajte stei osjeaj za semantiku iz razumijevanja danih primjera.
Pokuajte napisati i svoje kratke programe da bi provjerili svoje razumijevanje.
Naravno, ak i kad se upoznate sa svim pojedinanim elementima jezika niste postali programer.
Jo uvijek morate nauiti kako stvarati sloene programe za rjeavanje odreenih problema. Za to
su potrebni i iskustvo i vjetina.
Objanjavanje Jave emo poeti na uobiajen nain: pisanjem programa koji ispisuje poruku
"Hello World!". Naizgled jednostavan problem, ali ipak vrlo vaan korak u svladavanju novog
programskog jezika (pogotovo ako vam je to prvi jezik). Potrebno je da razumijete osnovne
postupke:
1. unos programskog teksta u raunalo
2. kompiliranje programa i
3. izvravanje kompiliranog programa.
8
Ovi koraci su razliiti za razna raunala i Java programerska okruja. U osnovi se taj postupak
svodi na pisanje programa u nekom tekstualnom editoru i snimanje programa u neku datoteku.
Nakon toga odreenom naredbom se program kompilira, nakon ega dobivate poruku o
sintaksnim grekama ili kompilirani program. U sluaju Jave program se kompilira u bajt kod,
umjesto u strojni jezik. Na kraju pokreete program odgovarajuom naredbom. Vae programsko
okruenje moe obaviti neke od ovih koraka za vas, ali se u pozadini zasigurno odvijaju ista tri
koraka.
Slijedi program "Hello World!". Ne oekujte da ete sve razumijeti - neke dijelove ete
razumijeti tek nakon nekoliko lekcija.
/**
* HelloWorldApp klasa implementira aplikaciju koja
* ispisuje "Hello World!" na standardni izlaz.
*/
Kada pokrenete ovaj program poruka "Hello world!" (bez navodnika) e biti ispisana na ekranu.
System.out.println("Hello World!");
Znatielja vas mora voditi kroz ostatak programa. Dio programa su komentari. Raunalo u
potpunosti zanemaruje komentare u programu, oni su samo za ljude. Unato tome, komentari su
vrlo vani, bez njih razumijevanje programa moe biti jako teko. Java ima dvije vrste
komentara. Prva vrsta poinje s: // i protee se do kraja reda. Raunalo zanemaruje // i sve nakon
toga u istom redu. Druga vrsta komentara zapoinje s /* i zavrava s */ i moe se protezati preko
vie redova.
9
Sve ostalo u programu je neophodno prema sintaksnim pravilima Jave. Svo programiranje u Javi
se obavlja u klasama. Prva linija u programu kae da se klasa zove HelloWorld. Ime klase
HelloWorld ujedno slui i kao ime programa. Klasa nije program sama po sebi, da bi mogla
postati program klasa mora sadravati podprogram imena main oblika:
Kad naredite Java interpreteru da izvri program, on poziva main() podprogram i izvrava naredbe
unutar njega. Ove naredbe tvore skriptu koja govori raunalu to tono treba raditi dok se
program izvrava. Main() podprogram moe pozivati podprograme definirane unutar iste, pa ak i
drugih klasa, ali main() podprogram odreuje kako i kojim redom e se koristiti drugi
podprogrami.
Ime u prvoj liniji je ime programa, i ujedno ime klase. Ako se klasa zove HelloWorld, treba biti
snimljena u datoteci HelloWorld.java, koja dakle sadri source kod programa. Kada se ova
datoteka kompilira, nastat e datoteka HelloWorld.class koja sadri Java bajt kod. Java intrepreter
izvrava Java bajt kod i za pokretanje programa ne trebate source kod.
Programi se obino piu da bi izvrili odreeni zadatak, ali zadatak ne mora biti uvijek
jasan sam po sebi. Potrebno je prikupiti dodatne podatke da bi se zadatak mogao tono
odrediti. Jasno odreivanje problema otklanja mogunosti nesporazuma i olakava
postupak razvoja programa.
Ulazi i izlazi programa moraju biti odreeni da bi se program dobro uklopio s drugim
djelovima razvojnog postupka u jedinstvenu cjelinu.
Odrediti jednu ili vie klasa i njihovo djelovanje, meusobno i sa vanjskim svijetom. Za
svako meudjelovanje odrediti zasebnu metodu.
10
4. Razviti algoritme koji e biti primjenjeni u pojedinim metodama.
Java apleti su mali programi namijenjeni izvravanju kroz HTML stranicu u mrenom
pretraivau. Tonije, aplet je objekt koji pripada klasi java.applet.Applet ili jednoj od podklasa te
klase.
Aplet je dio grafikog suelja, prikazuje se u prozoru (bilo mrenog pretraivaa ili nekog drugog
programa), ini ga pravokutno podruje u kojem su sadrani drugi elementi poput tipki ili
tekstualnih polja. Moe prikazivati grafike elemente kao to su slike, pravokutnici ili linije, te
moe odgovarati na odreene dogaaje (na primjer kad korisnik klikne negdje u apletu).
Klasa Applet, definirana u paketu java.applet, slui samo kao osnova za izradu podklasa. Objekt
tipa Applet ima neka osnovna svojstva, ali zapravo ne radi nita korisno, to je prazno podruje na
ekranu koje ne odgovara ni na kakve dogaaje. Da bi dobio upotrebljiv aplet, programer mora
definirati podklasu koja nasljeuje klasu Applet. U klasi Applet je definirano nekoliko metoda
tako da ne rade ba nita, pa programer mora nadjaati bar neke od ovih metoda i dati im neko
znaenje.
11
Apletu nije potrebna main() metoda jer on i nije samostalni program, iako vie metoda u apletu
podsjeaju na main() time to je zamiljeno da ih poziva sistem, a programer treba definirati
odgovor na te pozive.
8. Programiranje u Javi :
Svakome tko je imao prilike usporediti C++ i Java izvorne kodove bit e odmah jasno da je
Java bazirana na programskom jeziku C++. Tvorci Jave su eljeli napraviti programski
jezik koji bi bio jednostavniji za nauiti i koristiti nego C++. Iz
tog razloga bili su prisiljeni odustati od dosta pristupa i idejnih rjeenja koje programeri
generalno smatraju zbunjujuima (znate li nekog tko koristi templateove u C++-u) te dodati nove
mogunosti kao to je primjerice garbage collection. Krajnji rezultat je novi programski jezik
koji je uistinu laki za savladati od C++-a. Ugraenim mogunostima poput garbage collection i
eliminiranjem pointerske aritmetike uspjeli su odstraniti najei izvor greaka koje bi se javljale
prilikom programiranja u C ili C++ programskim jezicima. No, kako emo vidjeti u daljnjem
tekstu, ova poboljanja nisu prola besplatno...
C++ je trebao biti poboljani C. Njegove mogunosti koritenja objektno orijentiranih tehnika
otvarale su mogunost razvoja puno veih i bolje organiziranih programa. Pri njegovoj izradi
tvorci su se pridravali sljedeeg:
C++ izvorni kod mora podravati istu sintaksno/semantiku strukturu C-a te koliko je
god mogue nadograditi se na sam C i podravati tehnike programiranja koritene od
strane C-programera
Izvrni kodovi pisani u C++-u moraju biti barem isto toliko efikasni i brzi kao C izvrni
kodovi kako bi se omoguila njegova primjena i u vremenski kritinim rjeenjima
12
9. Popularnost Jave
Postoji puno drugaijih programskih jezika koji se koriste ili se tek razmatraju mogue upotrebe
glede Internet pretraioca. Ono to daje velik korak prednosti Javi pred ostalim programskim
jezicima je njena podranost (postoji na svim operativnim sistemima gdje postoji Netscape
program, to znai mnogo operativnih sistema), besplatnost za nekomercijalnu upotrebu
(barem do ovog asa) te prenosivost izvrnog tj. bajtnog koda uz garantirano izvravanje bez
obzira na arhitekturu ili operativni sistem raunala (naravno, ako se radi o istoj verziji Java
prevodioca i interpretera te uz uvjet da ne koristimo native metode proirivanja standardnog zbira
Javinih instrukcija).
Sama Java je daleko od savrenog programskog jezika. Zabiljeene su duge rasprave o tome
kako bi bilo izvedivo napisati drugaiji compiler ili tonije cross-compiler program koji bi
prevodio neki drugi, jednostavniji i bolji izvorni kod u postojei Javin bajtni kod. Na taj nain
se ne bi izgubilo apsolutno nita od trenutnih dobrih karakteristika kao to je prenosivost bajtnog
koda i njegovo izvravanje na svim podranim platformama raunala.
Osim toga, veliki dijelovi Jave kao programskog jezika su ve odbaeni kao neadekvatni,
gledajui unatrag prema niim verzijama. Izvrstan primjer toga je AWT (Abstract Window
Toolkit -- zbir grafikih alata) za koji sami tvorci Jave tvrde da je hack (na brzinu napravljen
samo da proradi) i za to optuuju Netscape koji ih je manirama robo vlasnika tjerao na
pridravanje rokova te da to ranije zavre sa projektom.
13
10. Zakljuak
Java je vrlo dobar novi programski jezik i velika vijest meu programerima. Informatiki
asopisi jo uvijek ne prestaju pisati o i oko Jave te kako e upravo Java promijeniti
dosadanje poimanje kratice WWW (World Wide Web), korisnik/posluitelj modela razvoja
aplikacija te ekonomskog modela prezentacije i koritenja programa poevi od tablinih
kalkulatora pa sve do video-igrica. injenice da se danas ve udomaio pojam NC (Network
Computer), te da SUN tvrtka ve naveliko prodaje svoje Java radne stanice bazirane
na Java procesoru samo govore u prilog prijanjoj tvrdnji. Postoji ve uvrijeeno miljenje da
e Java naslijediti C++ kao jezik izbora glede programiranja generalno te da je Java u stvari
ono to je trebao biti C++.
14
11. Literatura
15