java se7 tom 1

Upload: sermacakmaradona

Post on 13-Jan-2016

31 views

Category:

Documents


1 download

DESCRIPTION

Osnove, prevod devetog izdanja.ISBN 978-86-7991-367-8

TRANSCRIPT

  • Poglavlje

    1

    1

    Uvod u Javu

    U ovom poglavlju: Java kao programska platforma 1

    Karakteristike jezika Java 2

    Java apleti i internet 9

    Kratak istorijat Jave 10

    Uobiajene zablude o Javi 13

    Prvo pojavljivanje Jave izazvalo je ogromno uzbuenje, ne samo u raunarskim asopisima, ve i u najznaajnijim medijima, kao to su New York Times, Washington Post i Business Week. Treba istai da je to bio prvi i jedini programski jezik o kojem je emitovana desetominutna reportaa na nacionalnom radiju (National Public Radio). Samo za proizvode koji nastaju korienjem ovog specifinog raunarskog jezika, bio je uspostavljen akcionarski fond u vrednosti od 100 miliona dolara . Vrlo je zabavno prisetiti se tog uzbudljivog vremena, pa emo vam u ovom poglavlju prikazati kra-tak istorijat jezika Java.

    1.1 Java kao programska platformaU prvom izdanju ove knjige, o jeziku Java morali smo da napiemo sledee:

    Ako sagledamo Javu kao kompjuterski jezik, tolika euforija je ipak malo preterana: Java je sigurno dobar programski jezik. Nema sumnje da je to jedan od boljih jezika koji je na raspolaganju ozbiljnim programerima. Smatramo da je Java imala poten-cijal da postane odlian programski jezik, ali je za to ve verovatno suvie kasno. Kada neki jezik jednom stupi na scenu, suoava se sa surovom realnou kompati-bilnosti sa postojeim kodom.

    Zbog ovog pasusa na urednik je dobio silne prekore od jedne jako vane osobe u kompaniji Sun Microsystems, ije ime neemo spominjati. Ali, kasnije se uvidelo da su

  • Poglavlje 1 Uvod u Javu2

    nae prognoze bile tane. Java ima veliki broj dobrih karakteristika pomenuemo ih detaljnije i naknadno u ovom poglavlju. Ima i neke nedostatke, a novije dopune ovog jezika nisu tako elegantne kao prvobitne, kako bi se ouvala kompatibilnost sa postojeim kodom.

    Meutim kao to smo ve rekli u prvom izdanju, Java nikad nije bila samo jezik. Postoji mnogo programskih jezika, od kojih neki privlae i previe panje. Programski jezik Java predstavlja itavu platformu sa ogromnom bibliotekom koja sadri kd koji se moe iskoristiti i sa izvrnim okruenjem koje omoguava bezbed-nost, izvravanje istog koda na vie operativnih sistema i automatsko oslobaanje upotrebljene memorije.1

    Ukoliko se bavite programiranjem, eleete jezik sa prijatnom sintaksom i razu-mljivom semantikom (tj. ne kao jezik C++). Java to ispunjava, kao i desetine drugih jezika. Neki jezici obezbeuju: izvravanje koda na vie operativnih sistema, auto-matsko oslobaanje upotrebljene memorije i sline mogunosti, ali ne i pristojnu biblioteku, primoravajui vas da se snaete, ukoliko elite dopadljivu grafiku, pri-stup mrei ili bazi podataka. Dakle, Java poseduje sve dobar jezik, visokokvali-tetno izvrno okruenje i ogromnu biblioteku. Ova kombinacija je razlog zato je Java neodoljiv izbor za tako veliki broj programera.

    1.2 Karakteristike jezika JavaAutori jezika Java napisali su zvaninu dokumentaciju tzv. Belu knjigu u kojoj su objasnili svoje projektne ciljeve i dostignua. Takoe su objavili krai rezime ija je stuktura organizovana u skladu sa sledeih 11 karakteristika programskog jezika Java:

    1. Jednostavan

    2. Objektno orijentisan

    3. Distribuiran

    4. Robustan

    5. Bezbedan

    6. Ima neutralnu arhitekturu

    7. Prenosiv

    8. Treba da se interpretira

    9. Visokih performansi

    10. Vienitan

    11. Dinamian

    1 Garbage collection

  • 1.2 Karakteristike jezika Java 3

    U ovom odeljku:

    sumiraemo na osnovu izvoda iz zvanine dokumentacije, ta Java projektanti kau o svakoj njenoj karakteristici;

    rei emo ta mislimo o svakoj karakteristici, na osnovu naih iskustava sa aktu-elnom verzijom jezika Java.

    NAPOMENA: U trenutku dok ovo piemo, zvanina dokumentacija se moe pronai na sajtu kompanije Oracle www.oracle.com/technetwork/java/langenv-140151.html. Rezime sa 11 karakteristika nalazi se na linku http://labs.oracle.com/features/tenyears/volcd/ papers/7Gosling.pdf.

    1.2.1 Jednostavaneleli smo da napravimo sistem u kome bi se lako programiralo, bez potrebe za komplikovanim uhodavanjem i koji koristi postojei nain razmiljanja. I pored toga to smatramo da je C++ neprikladan, jezik Java smo projektovali da bude to je mogue sliniji jeziku C++ kako bismo Javu uinili razumljivijom (za postojee C++ programere). Java ne sadri mnoge retko koriene, teko razumljive i zbunjujue karakteristike koje ima jezik C++i koje na osnovu naeg iskustva donose mnogo vie problema nego koristi.

    Zaista, sintaksa jezika Java je unapreena verzija sintakse za C++. Nema potrebe za datotekama zaglavlja, pokazivakom aritmetikom (ak ni za pokazivakom sin-taksom), strukturama, unijama, preoptereivanjem operatora, virtuelnim osnov-nim klasama, itd. (Proitajte napomene za C++ koje su umetnute tokom teksta da biste saznali vie o razlikama izmeu jezika Java i C++.) Meutim, projektanti nisu pokuavali da poprave sve nezgrapne karakteristike jezika C++. Na primer, sintaksa iskaza switch ostaje nepromenjena u jeziku Java. Ukoliko znate C++, prelazak na Java sintaksu vam nee predstavljati tekou.

    Ukoliko ste navikli na vizuelno programsko okruenje (kao to je Visual Basic), Java vam nee izgledati jednostavno. Java ima jako udnu sintaksu (mada ne treba mnogo privikavanja ). to je jo vanije, u jeziku Java morate mnogo vie da progra-mirate. Lepota Visual Basic-a je u tome to njegovo vizuelno projektno okruenje gotovo automatski obezbeuje veliki deo infrastrukture neke aplikacije. U jeziku Java, morate programirati runo odgovarajue funkcionalnosti, to obino predstav-lja dobar deo koda. Meutim, postoje nezavisna razvojna okruenja, koja obezbe-uju razvoj programa po principu prevuci i pusti (drag and drop).

    Sledei aspekt jednostavnosti jeste mali izvrni fajl. Jedan od ciljeva jezika Java jeste da omogui konstrukciju softvera koji moe da se izvrava samostalno na mainama slabijih performansi. Veliina osnovnog interpretera i dodatnih klasa iznosi oko 40 kilobajta; osnovne standardne biblioteke i podrka za niti (sutinski mikrokernel) poveava veliinu za dodatnih 175 kilobajta.

  • Poglavlje 1 Uvod u Javu4

    To je bilo veliko dostignue za to vreme. Meutim, imajte na umu da je biblioteka sada prilino vea. Danas odvojeno postoji Java Micro Edition unutar koje se nalazi manja biblioteka, to je veoma pogodno za ureaje koji se ugrauju unutar drugih maina.

    1.2.2 Objektno orijentisan Jednostavno reeno, objektno orijentisano projektovanje predstavlja tehniku progra-miranja fokusiranu na podatke (objekte) i na interfejse ka tim objektima. Ako bismo pravili analogiju sa stolarskim zanatom, objektno orijentisani stolar bio bi uglav-nom usmeren na stolicu koju pravi, a manje na alate koje pri tome koristi; stolar koji nije ,,objektno orijentisan prvenstveno bi razmiljao o svom alatu. Objektno orijentisane sposobnosti jezika Java su sutinski iste one kao kod jezika C++.

    Objektna orijentacija je dokazala svoju vrednost u poslednjih 40 godina i nezamislivo je da je neki moderni programski jezik ne koristi. Zaista, objektno orijentisane karakte-ristike jezika Java uporedive su sa onima za C++. Glavne razlike izmeu jezika Java i C++ ogledaju se u viestrukom nasleivanju, koje je kod Jave zamenjeno jednostavnijim konceptom interfejsa, kao i modelom metaklasa (proitajte poglavlje 5).

    NAPOMENA: Ukoliko nemate iskustva sa objektno orijentisanim programskim jezicima, proitajte paljivo poglavlja od 4 do 6. U njima je objanjeno ta je objektno programiranje i zbog ega je ono korisnije za programiranje sofisticiranih projekata od tradicionalnih pro-ceduralno orijentisanih jezika kao to su C ili Basic.

    1.2.3 DistribuiranJava poseduje iscrpnu biblioteku rutina za rad sa TCP/IP protokolima, kao to su HTTP i FTP. Java aplikacije mogu da pristupaju objektima preko mree i preko URL-a, sa podjednakom lakoom kao kada pristupaju lokalnom sistemu datoteka.

    Ustanovili smo da Java ima velike mrene mogunosti koje su pritom jednostavne za korienje. Svako ko je pokuao da se bavi programiranjem na internetu kori-stei neki drugi jezik, uivae u tome koliko Java pojednostavljuje zamorne zadatke poput otvaranja mrene konekcije (socket-a). (Umreavanje se obrauje u knjizi II.) Daljinsko pozivanje metoda (Remote Method Invocation, RMI) omoguava komunika-ciju izmeu distribuiranih objekata (to se takoe obrauje u delu 2).

  • 1.2 Karakteristike jezika Java 5

    1.2.4 RobustanJezik Java je namenjen za pisanje programa koji moraju biti pouzdani na mnogo naina. Java se u velikoj meri istie u ranoj proveri moguih problema, kasnijoj dinamikoj proveri (tokom izvravanja) i eliminaciji situacija u kojima lako dolazi do pojave greaka... Najvea razlika izmeu jezika Java i C/C++ jeste u tome to Java ima takav model pokazivaa, koji eliminie mogunost upisivanja preko postojeeg sadraja memorije i oteenja podataka.

    Ova karakteristika je takoe veoma korisna. Java kompajler otkriva mnoge pro-bleme koji bi se u drugim jezicima pokazali samo pri izvravanju. Sa druge strane, ova karakteristika jezika Java obradovae svakog ko je, usled greke sa pokaziva-ima, proveo sate u traenju uzroka oteenih podataka u memoriji.

    Ukoliko ste koristili jezik kao to je Visual basic, koji eksplicitno ne koristi pokazi-vae, verovatno se pitate zato je ovo toliko vano. Programeri za C nisu te sree. Njima su potrebni pokazivai za pristup stringovima, nizovima, objektima, pa ak i datotekama. U Visual basic-u se ne koriste pokazivai ni za jedan od ovih entiteta, pa nije potrebno da brinete o alociranju memorije za njih. Sa druge strane, mnoge strukture podataka su teke za implementaciju u jezicima koji ne koriste pokazivae. Java prua ono najbolje iz oba sveta. Nisu vam potrebni pokazivai za svakodnevne stvari kao to su stringovi i nizovi. Ukoliko vam je snaga pokazivaa potrebna, imate je na raspolaganju, na primer, za povezane liste. Uvek ste potpuno sigurni, jer ne moete pristupiti loem pokazivau, napraviti greke pri alociranju memorije i ne morate da se titite od curenja memorije2.

    1.2.5 BezbedanJava je namenjena korienju u mrenim/distribuiranim okruenjima. Prema tome,mnogo truda je uloeno u bezbednost. Java omoguava konstrukciju sistema koji su zatieni od virusa i zlonamerne modifikacije.

    U prvom izdanju rekli smo: Dakle, nikad ne treba rei nikad i bili smo u pravu. Nedugo po isporuci prve verzije Java Development Kit, grupa bezbednosnih ekspe-rata sa Univerziteta Prinston pronala je jedva primetne greke u bezbednosnim karakteristikama Jave 1.0. Kompanija Sun Microsystems je pokrenula istraivanja bezbednosti jezika Java tako to je uinila dostupnom za javnost specifikaciju i implementaciju virtuelne maine i bezbednosnih biblioteka. Na taj nain, brzo su popravili sve poznate greke po pitanju bezbednosti. U svakom sluaju, veoma je teko nadmudriti bezbednosne mehanizme Jave. Dosad pronaene greke bile su vrlo specifine i malobrojne.

    2 Memory leaking = pojava da se memorija ne oslobaa nakon upotrebe

  • Poglavlje 1 Uvod u Javu6

    Od samog poetka, jezik Java je projektovan da potpuno onemogui odreene vrste napada, kao to su:

    prekoraenje izvrnog steka uobiajeni napad crva i virusa; pristup memoriji izvan dela dodeljenog procesu; itanje ili upisivanje datoteka bez dozvole.

    Tokom vremena u Javu su dodati brojni bezbednosni mehanizmi. Od verzije 1.1, Java sadri mogunost digitalnog potpisivanja klasa (proitajte drugi deo ). Sa pot-pisanim klasama moete biti sigurni ko ih je pisao. Kada verujete autoru odreene klase, moete odluiti da takvoj klasi obezbedite vee privilegije na svojoj maini.

    NAPOMENA: Majkrosoft koristi drugaiji sistem isporuke programa koji je baziran na tehnologiji ActiveX i oslanja se jedino na digitalne potpise. Oigledno, to nije dovoljno kao to moe da potvrdi svaki korisnik Majkrosoftovih proizvoda,ak i programi poznatih proizvoaa nisu u potpunosti stabilni i mogu napraviti tetu. Java poseduje mnogo snaniji bezbednosni model od ActiveX poto kontrolie aplikaciju dok se izvrava i zaustavlja je po potrebi, pre nego to izazove nepopravljive posledice.

    1.2.6 Ima neutralnu arhitekturuKompajler stvara objektnu datoteku, iji je format nezavisan od operativnog sistema na kome se pokree kompajlirani kd se moe izvravati na mnogim procesorima, pod pretpostavkom prisustva izvrnog sistema Java. Java kompajler ostvaruje ovo tako to generie tzv. bajtkd instrukcije, koje nemaju nikakve veze sa arhitekturom korienog raunara. Umesto toga, one su projektovane da se podjednako lako inter-pretiraju na svakoj maini, kao i da se lako i u letu prevode u odgovarajui mainski kd.

    To nije nova ideja. Pre vie od 40 godina, Niklaus Wirt, u svojoj originalnoj imple-mentaciji Paskala, kao i UCSD Paskal sistem koristili su potpuno istu tehniku.

    Naravno, interpretiranje bajtkoda je neminovno sporije od izvravanja mainskih instrukcija pri punoj brzini, pa se postavlja pitanje koliko je to dobra ideja. Meutim, virtuelne maine imaju opciju za prevoenje najee izvravanih sekvenci bajtkoda u mainski kd, i taj postupak se naziva kompajliranje u letu (just-in-time). Ova stra-tegija je dokazala svoju efikasnost, tako da se ak i Majkrosoftova .NET platforma oslanja na virtuelnu mainu.

    Virtuelna maina ima i druge prednosti. Ona poveava bezbednost poto moe da proverava ponaanje sekvenci sa instrukcijama. Neki programi ak u letu stvaraju bajtkd, ime dinamiki unapreuju sposobnosti programa koji se izvrava.

  • 1.2 Karakteristike jezika Java 7

    1.2.7 PrenosivZa razliku od C i C++, u ovoj specifikaciji ne postoje aspekti koji su zavisni od imple-mentacije. Veliine primitivnih tipova podataka su fiksne, kao i njihovo ponaanje u aritmetici.

    Na primer, int u jeziku Java uvek je 32-bitna celobrojna vrednost. U C/C++, int moe da znai 16-bitna celobrojna vrednost, 32-bitna celobrojna vrednost ili bilo koja druga vrednost koju odredi proizvoa kompajlera. Jedino ogranienje je u tome da tip int mora imati najmanje bajtova kao short int i da ne moe imati vie bajtova od long int. Postavljanjem fiksne veliine za tipove brojeva, otklanja se vei deo problema oko prenosivosti. Binarni podaci se uvaju i prenose u fiksnom formatu, ime se eliminie zbrka oko redosleda bajtova. Stringovi se uvaju u standardnom Unikod formatu.

    Biblioteke koje su deo sistema definiu interfejse koji su prenosivi. Na primer, postoji apstraktna Window klasa i njene implementacije za UNIX, Windows i Macintosh.

    Kao to svi koji su nekada pokuali da piu programe znaju, pisanje programa koji dobro izgleda na Windows-u, Macintosh-u i na 10 vrsta UNIX-a zahteva napor herojskih razmera. Jezik Java 1.0 je ostvario taj napor obezbeujui jednostavan komplet alata koji mapira uobiajene elemente korisnikog interfejsa na veem broju platformi. Naalost, rezultat toga bila je biblioteka koja, uz silan rad, moe da prui rezultate koji su na razliitim sistemima jedva prihvatljivi. (I obino su se pojavlji-vale razliite greke u grafikim implementacijama na razliitim platformama.) Ali, to je bio poetak. Postoje brojne aplikacije kod kojih je prenosivost mnogo vanija od uglaenosti korisnikog interfejsa i koje su iskoristile prednosti ranih verzija jezika Java. Do danas, komplet alata za korisniki interfejs je u potpunosti napisan ispoetka i vie se ne oslanja na postojei korisniki interfejs raunara. Rezultat je mnogo konzistentniji i, po naem miljenju, atraktivniji nego u ranim verzijama Jave.

    1.2.8 Treba da se interpretiraIsti Java bajtkd moe da se izvrava na svakom kompjuteru za koji postoji Java interpreter. Budui da je linkovanje postepen i laki postupak, sam razvoj moe biti bri i istraivaki proces.

    Postepeno linkovanje ima svoje prednosti, ali je njegov doprinos razvoju zapravo preuvelian. U poetku, ustanovljeno je da su razvojni alati Jave prilino spori. Danas, bajtkodove prevodimo u mainski kd kompajliranjem u letu.

  • Poglavlje 1 Uvod u Javu8

    1.2.9 Visokih performansiMada su performanse prevedenog bajtkoda obino vie nego dovoljne, postoje situ-acije kada su potrebne bolje performanse. Bajtkd moe da se prevede u letu (tokom izvrenja) u mainski jezik, za odreeni CPU na kome se izvrava aplikacija.

    U poetku se mnogi korisnici Jave nisu slagali sa tvrdnjom da su performanse vie nego dovoljne. Meutim, danas kompajliranje u letu postie toliko dobre perfor-manse da postaje konkurentno i sa tradicionalnim nainom kompajliranja i u veini sluajeva su performanse ak i bolje zato to se ovako dobija vie informacija na raspolaganju. Na primer, kompajler u letu moe da nadgleda koji se kd esto izvr-ava i da optimizuje upravo taj kd. Postoji i sofisticiranija optimizacija, a to znai uklanjanje poziva metoda ili umetanje metoda na mesto poziva. Kompajler u letu tano zna koje su klase uitane. Stoga, on moe koristiti umetanje koje se zasniva na trenutno uitanoj kolekciji klasa, kada se odreena metoda nikada ne zamenjuje3 i takvu optimizaciju je mogue kasnije ponititi ukoliko je to potrebno.

    1.2.10 VienitanPrednosti vienitne obrade su bolji interaktivni odzivi i ponaanje u realnom vre-menu.

    Ukoliko ste ikada pokuali programiranje sa vie niti u nekom drugom jeziku, biete prijatno iznenaeni kako je to jednostavno u jeziku Java. Niti kod Jave takoe mogu da koriste prednosti vieprocesorskih sistema ukoliko operativni sistem podrava takvu proceduru. Sa druge strane, na veini platformi implementacija niti se veoma razlikuje i, u tom smislu, jezik Java se ne trudi da bude nezavisan od platforme. Samo kd koji vri vienitno pozivanje ostaje isti na svim mainama; Java prebacuje vienitnu implementaciju na operativni sistem ili na biblioteku niti. Na kraju, lakoa vienitnog programiranja predstavlja jedan od glavnih razloga privlanosti Jave za programiranje na strani servera.

    1.2.11 DinamianJava je dinaminiji jezik od C ili C++ iz vie razloga. On je projektovan tako da se prilagoava okruenju koje se stalno unapreuje. Biblioteke mogu slobodno da dodaju nove metode i polja, bez ikakvih uticaja na klijente. U Javi je prilino jedno-stavno pronalaenje informacija prilikom izvravanja programa.

    Ovo je vana karakteristika u situacijama u kojima kd treba da se doda u programu tokom izvravanja. Pravi primer predstavlja kd uitan sa interneta koji se izvrava u pretraivau. U verziji Java 1.0, utvrivanje izvrnog tipa informacije bilo je sve samo ne lako, dok aktuelne verzije pruaju programeru potpun uvid u strukturu i ponaanje njegovih objekata. Ovo je izuzetno korisno za sisteme koji treba da anali-ziraju objekte u toku izvrenja, kao to su Java alati za pravljenje korisnikog inter-fejsa (GUI builder), inteligentni alati za otklanjanje greaka4, prikljuive komponente i objektne baze podataka.

    3 Method override4 Smart debugger

  • 1.3 Java apleti i internet 9

    NAPOMENA: Veoma brzo nakon poetnog uspeha Jave, Microsoft je napravio proizvod pod nazivom J++ sa programskim jezikom i virtuelnom mainom koji su bili skoro iden-tini kao i kod Jave. Microsoft vie ne podrava J++, ve umesto toga uvodi novi jezik pod nazivom C#. On takoe ima mnogo slinosti sa jezikom Java, ali koristi drugaiju virtuelnu mainu. Postoji ak i J# za migraciju J++ aplikacija za virtuelnu mainu koju koristi C#. U ovoj knjizi neemo se baviti J++, C# ili J# jezicima.

    1.3 Java apleti i internetOvde je ideja jednostavna: korisnici e uitavati Java bajtkodove sa interneta i izvra-vati ih na svojim mainama. Java programi koji rade na internet prezentacijama nazi-vaju se apleti. Da biste koristili neki aplet, potreban vam je internet pretraiva na kojem je omoguena Java, tako da ne morate da instalirate nikakav softver. Budui da Oracle licencira izvorni Java kd i insistira na tome da nee biti promena u jeziku i u osnovnoj strukturi biblioteka, Java aplet e se izvravati na svakom pretraivau koji ima podrku za Javu. Uvek kada posetite stranicu koja sadri aplet, dobijate i najnoviju verziju programa. Zahvaljujui bezbednosnim merama virtuelne maine, ne morate da brinete o napadima od strane malicioznog koda.

    Kada korisnik uitava neki aplet, on u velikoj meri radi kao ugraivanje slike u internet stranu. Taj aplet postaje deo stranice, a tekst se prostire oko prostora koji se koristi za aplet. Poenta je u tome da je ta slika iva. Ona reaguje na komande kori-snika, menja svoj izgled i alje podatke izmeu raunara koji isporuuje odreeni aplet i raunara koji ga pokree.

    Na slici 1-1 prikazan je dobar primer za dinamiku internet stranicu na kojoj su prikazani komplikovani prorauni. Aplet Jmol prikazuje molekularnu strukturu. Pomou mia, moete rotirati i zumirati svaki molekul da biste bolje razumeli nje-govu strukturu. Ova vrsta direktne manipulacije ne moe se ostvariti statikim inter-net stranicama, ali apleti i to omoguavaju. (Ovaj aplet moete pronai na lokaciji http://jmol.sourceforge.net.)

    Kada su se prvi put pojavili, apleti su izazvali veliko oduevljenje. Mnogi su ubeeni da je privlanost apleta doprinela velikom interesovanju za Javu. Ipak, poetna eufo-rija se uskoro pretvorila u veliku frustraciju. Razliite verzije Netscape-a i Internet Explorer-a koristile su i razliite verzije Jave, od kojih su neke ak bile i prilino zastarele, tako da je bilo izuzetno teko razviti aplete koji bi iskoristili pogodnosti najnovije Java verzije. Danas veina veb stranica u pretraivaima za potrebe dina-mikih efekata koristi JavaScript ili Flash. Sa druge strane, Java je postala najpopu-larniji jezik za razvoj serverskih aplikacija koje kreiraju internet stranice i izvravaju logiki deo aplikacije.

  • Poglavlje 1 Uvod u Javu10

    Slika 1-1 Aplet Jmol

    1.4 Kratak istorijat jezika JavaU ovom odeljku prikazan je kratak istorijat jezika Java. On se zasniva na razliitim objavljenim izvorima (od kojih je najznaajniji intervju sa kreatorima jezika Java, objavljen u onlajn asopisu Sun-World iz jula 1995. godine).

    Poetak jezika Java vezuje se za 1991. godinu kada je grupa inenjera kompanije Sun, koju su predvodili Patrik Naughton i James Gosling (jedan od rukovodilaca i odlian i svestran raunarski strunjak), odluila da projektuje mali raunarski jezik koji bi mogao da se koristi na korisnikim ureajima kao to su daljinski upravljai za kablovsku televiziju. Poto ovakvi ureaji nemaju previe memorije, trebalo je da jezik bude mali i da generie vrlo efikasan kd. Takoe, poto razliiti proizvoai mogu da se opredele za razliite procesore (CPU), bilo je vano da taj jezik ne bude vezan ni za jednu posebnu arhitekturu. Sam projekat imao je radni naziv Green.

  • 1.4 Kratak istorijat jezika Java 11

    Potrebe za malim, efikasnim kodom koji je nezavisan od platforme na kojoj se izvr-ava, dovela je ovaj tim do ponovne upotrebe modela koji su koristile neke imple-mentirane verzije Paskala u ranom periodu PC tehnologije. Niklaus Wirth, prona-laza Paskala, osmislio je dizajn prenosivog jezika koji generie meukd za neku hipotetiku mainu. (Te hipotetike maine se obino nazivaju virtuelne maine otuda i termin Java virtuelna maina ili JVM.) Ovaj meukd bi zatim mogao da se koristi na bilo kojoj maini koja ima odgovarajui interpreter. Inenjeri projekta Green takoe su koristili virtuelnu mainu, ime su reili glavni problem.

    Meutim, kako su zaposleni u kompaniji Sun koristili UNIX, oni su svoj jezik zasno-vali na jeziku C++, a ne na Paskalu. Nadalje, oni su svoj jezik pravili kao objektno orijentisan, a ne kao proceduralni jezik. Ali, kao to Gosling kae u intervjuu: Sve vreme, jezik je bio alat, a ne cilj. Gosling je odluio da novi jezik nazove Oak (hrast), (pretpostavljam zato to mu se dopadao izgled hrastovog drveta koje se vidi kroz prozor njegove kancelarije ). U kompaniji Sun su kasnije uvideli da ve postoji raunarski jezik pod tim imenom, pa su naziv promenili u Java. Ispostavilo se da je to bio pravi izbor.

    Projekat Green je 1992. godine izbacio svoj prvi proizvod, pod nazivom *7. Bio je to izuzetno inteligentan daljinski upravlja. (Imao je snagu SPARC stanice, u kutiji 15 cm x 10 cm x 10 cm.) Naalost, niko u kompaniji nije bio zainteresovan za pro-izvodnju, pa je tim morao da pronae druge naine da plasira svoju tehnologiju. Meutim, nijedna kompanija za proizvodnju standardne elektronske opreme nije bila zainteresovana. Grupa je zatim dala ponudu za projekat upravljaa za kablov-sku TV koji bi opsluivao nove kablovske servise, kao to je video-po-zahtevu5. Nisu dobili ugovor. (Interesantno je da je kompaniju koja je potpisala ugovor predvodio isti onaj Jim Clark koji je pokrenuo Netscape kompaniju koja je veoma zasluna za uspeh jezika Java.)

    Strunjaci na projektu Green (pod novim nazivom First Person.Inc.) proveli su celu 1993. i polovinu 1994. godine traei nekoga ko bi otkupio njihovu tehnologiju bez uspeha. (Patrik Naughton, jedan od osnivaa grupe i ovek koji je uradio najvei deo marketinga, tvrdi da je sakupio 300,000 milja u avionskim letovima u pokua-jima da proda ovu tehnologiju.) Projekat First Person naputen je 1994. godine.

    Dok se sve ovo deavalo u kompaniji Sun, deo interneta nazvan World Wide Web rastao je nesluenom brzinom. Kljunu stvar za World Wide Web predstavlja pre-traiva, koji prevodi stranu sa hipertekstom na ekran. Tokom 1994. godine, veina ljudi koristila je Mosaic, nekomercijalni pretraiva koji je potekao iz superraunar-skog centra na Univerzitetu Ilinois, tokom 1993. god. (U stvaranju Mosaic-a deli-mino je uestvovao Marc Andreessen, za 6,85$ na sat, kao diplomac na istraivako - radnom projektu. Slavu i sreu je pronaao kao jedan od osnivaa i ef tehnologije u Netscape-u.)

    5 video-on-demand

  • Poglavlje 1 Uvod u Javu12

    U intervjuu za SunWorld, Gosling kae da su sredinom 1994. godine projektanti jezika shvatili sledee: Mogli bismo napraviti stvarno dobar pretraiva. To je bila jedna od nekoliko stvari u glavnom toku klijent/server aplikacija, kojoj su bile potrebne neke od udnih stvari koje smo razvili: neutralnost arhitekture, rad u real-nom vremenu, pouzdanost, bezbednost elementi koji nisu preterano znaajni u svetu radnih stanica. I tako, napravili smo pretraiva.

    Aktuelni pretraiva napravili su Patrik Naughton i Jonatthan Payne i on je evolu-irao u pretraiva HotJava. Ovaj pretraiva napisan je u jeziku Java da bi pokazao svu snagu ovog jezika. Ali projektanti su imali na umu i snagu neega to je danas poznato kao apleti, tako da su omoguili pretraivau da izvrava kd unutar veb stranica. Ovaj tehnoloki dokaz prikazan je na skupu SunWorld 95, 23.05.1995. godine i podstakao ludilo za jezikom Java koje traje i do danas.

    Sun je objavio prvu verziju jezika Java poetkom 1996. godine. Ljudi su brzo shvatili da verzija Java 1.0 nije podesna za razvoj ozbiljnih aplikacija. Naravno, mogli ste da koristite Java 1.0 za izradu apleta, recimo za pomeranje teksta prema sluajnom izboru po ekranu. Ali, u toj verziji niste mogli ni da tampate. Iskreno, jezik Java 1.0 u prvom trenutku nije bio sasvim spreman za iru upotrebu. Njegov naslednik, u verziji 1.1, popravio je najoiglednije nedostatke, znatno unapredio sposobnost refleksije i dodao novi model dogaaja za GUI programiranje. Meutim, i dalje je bio prilino ogranien.

    Najvea novost na konferenciji JavaOne 1998. godine bila je najava izlaska Java 1.2 u kojem su nedoraeni GUI i grafiki alati zamenjeni unapreenim verzijama kod kojih je bilo mogue podeavati veliinu elemenata. Time se ovaj jezik pribliio obe-anju Napii jednom, izvravaj bilo gde, mnogo blie od svojih prethodnika. Tri dana(!) po njegovom objavljivanju u decembru 1998. godine, marketinko odelje-nje kompanije Sun promenilo mu je naziv u zavodljivo ime: Java2 Standard Edition Softtware Development Kit Version 1.2.

    Osim Standard Edition (standardnog izdanja), uvedena su jo dva izdanja: Micro Edition za ureaje kao to su mobilni telefoni, PDA ureaji itd. i Enterprise Edition za obradu na serverskoj strani. Ova knjiga je pisana za standardno izdanje.

    Verzije 1.3 i 1.4 standardnog izdanja predstavljaju postepena poboljanja u odnosu na prvobitno izdanje Java 2, sa uvek rastuom standardnom bibliotekom, unapre-enim performansama i, naravno, dosta otklonjenih greaka. Tokom tog perioda, stiala su se mnoga poetna preterivanja o Java apletima i aplikacijama na strani kli-jenata, ali se zato jezik Java nametnuo kao platforma za aplikacije na strani servera.

    Verzija 5.0 je prva posle verzije 1.1, koja je znaajno poboljala jezik Java. (Ova verzija je prvobitno oznaena sa 1.5, ali je broj verzije skoio na 5.0 na konferenciji JavaOne 2004.) Posle mnogih godina istraivanja, dodati su generiki tipovi (koji se grubo mogu uporediti sa C++ ablonima ) izazov je bio u dodavanju ove mogunosti bez potrebe da se izmeni virtuelna maina. Jo nekoliko korisnih karakteristika je inspiri-sano jezikom C#: nova sintaksa for ciklusa koja prolazi kroz sve elemente kolekcije, samoraspakivanje i metapodaci.

  • 1.5 Uobiajene zablude o jeziku Java 13

    Tabela 1-1: Razvoj jezika Java

    Verzija Godina Nove karakteristike jezika Broj klasa i interfejsa

    1.0 1996 Osnovna verzija jezika 211

    1.1 1997 Unutranje klase 477

    1.2 1998 Nema 1524

    1.3 2000 Nema 1840

    1.4 2002 Testiranje koda pomou assert 2723

    5.0 2004 Generike klase, novi for ciklus, lista parametara promenljive duine, metapodaci, enumeracije, statiki uvoz

    3279

    6 2006 Nema 3779

    7 2011 switch sa stringovima, diamond operator, zapis konstanti u binarnom sistemu, poboljanja u pogledu rukovanja izuzecima

    4024

    Version 6 (without the .0 sufx) was released at the end of 2006. Again, there are no language changes but additional performance improvements and library enhance-ments.

    As datacenters increasingly relied on commodity hardware instead of specialized servers, Sun Microsystems fell on hard times and was purchased by Oracle in 2009. Development of Java stalled for a long time. In 2011, Oracle released a new version with simple enhancements as Java 7, and decided to defer more ambitious changes to Java 8, which is expected in 2013.

    U tabeli 1-1 prikazuje se rast biblioteke Java tokom godina. Kao to moete videti, veliina programskog interfejsa aplikacije (API) izuzetno se poveala.

    1.5 Uobiajene zablude o jeziku JavaOvo poglavlje emo zakljuiti listom nekih uobiajenih zabluda o jeziku Java, zajedno sa komentarima.

    Java je proirenje HTML.

    Java je programski jezik; HTML predstavlja nain za opisivanje strukture veb stra-nice. Oni nemaju nita zajedniko, osim to postoje HTML oznake za postavljanje Java apleta na neku internet stranicu.

    Nije

    pre

    ved

    eno!

  • Poglavlje 1 Uvod u Javu14

    Koristim XML tako da mi Java ne treba.

    Java je programski jezik; XML predstavlja nain za opisivanje podataka. XML podatke moete obraivati bilo kojim programskim jezikom, ali Java API sadri odlinu podrku za obradu XML podataka. Osim toga, mnogi vani XML alati neza-visnih proizvoaa implementirani su u jezik Java. Da biste o ovome saznali vie, obratite panju na Knjigu II.

    Java je jednostavan programski jezik za uenje.

    Nijedan programski jezik, koji je moan kao Java, nije jednostavan. Uvek morate da pravite razliku izmeu toga koliko je lako pisati nevane programe i koliko je teko baviti se ozbiljnim poslom. Takoe, uzmite u obzir da samo etiri poglavlja ove knjige objanjavaju jezik Java. Preostala poglavlja pokazuju naine da taj jezik dodatno iskoristite, koristei Java biblioteke. Ove biblioteke sadre hiljade klasa i interfejsa i na desetine hiljada funkcija. Sreom, nije potrebno da ih znate sve pojedi-nano, ali treba da znate mnogo toga kako biste koristili jezik Java za neto ozbiljnije.

    Java e postati univerzalni programski jezik za sve platforme.

    Teorijski, ovo je mogue. Sigurno je to i elja svih proizvoaa softvera, osim Microsofta. Meutim, mnoge aplikacije koje savreno dobro rade na desktop rauna-rima ne moraju da rade dobro na drugim ureajima ili unutar pretraivaa. Takoe, te aplikacije su pisane da koriste prednosti brzine procesora i postojee biblioteke korisnikog interfejsa, i svakako su isprobane na svim vanijim platformama. Meu tim aplikacijama su programi za obradu teksta, programi za ureivanje fotografija i internet pretraivai. Po pravilu, pisani su u jezicima C ili C++, i ne vidimo nikakvu korist za krajnjeg korisnika u tome da se ponovo piu u jeziku Java.

    Java je samo jo jedan programski jezik.

    Java je lep programski jezik; veina programera mu daje prednost u odnosu na C, C++ ili C#. Ali postojalo je na stotine lepih programskih jezika koji nikada nisu ostva-rili iroku popularnost, dok su jezici sa oiglednim nedostacima, kao to su C++ i Visual Basic, bili izuzetno uspeni.

    Zato? Uspeh programskog jezika mnogo vie zavisi od upotrebljivosti sistema za podrku koji ga okruuje, nego od elegancije njegove sintakse. Postoje li korisne, pri-kladne i standardne biblioteke sa mogunostima koje moete da iskoristite? Postoje li proizvoai softverskih alata koji proizvode kvalitetna programska okruenja i alate za otklanjanje greaka? Hoe li se taj jezik i skup alata integrisati sa preostalom raunarskom infrastrukturom? Jezik Java je uspean jer njegova biblioteka klasa omoguava da komplikovane stvari uradite na lak nain, poput umreavanja i vie-nitne obrade. Java smanjuje greke u radu sa pokazivaima to je velika prednost, tako da programeri mogu biti produktivniji ako koriste Javu. Ali sve to nije presudno za uspeh Jave.

  • 1.5 Uobiajene zablude o jeziku Java 15

    Sada, kada je dostupan C#, jezik Java je zastareo.

    C# je preuzeo mnoge dobre ideje od Jave, kao to su jednostavan programski jezik, virtuelna maina i automatsko uklanjanje upotrebljene memorije. Ali iz ko zna kakvih razloga, C# je neke dobre stvari izostavio, pre svega bezbednost i nezavisnost od platforme. Ukoliko ste vezani za Windows, C# ima mnogo smisla. Ali ako sudite prema broju oglasa za posao, Java je i dalje izbor veine programera.

    Java je u privatnom vlasnitvu i zato je treba izbegavati.

    Kada je Java nastala, kompanija Sun je omoguila besplatne licence distributerima i krajnjim korisnicima. Iako je Sun imao potpunu kontrolu nad jezikom Java, uklju-eno je i mnogo drugih kompanija u razvoj novih verzija jezika i projektovanje novih biblioteka. Izvorni kd za virtuelnu mainu i biblioteke je oduvek bio dostupan javnosti, ali samo za pregled, ne i za modifikaciju i redistribuciju. Java je bila closed source6, koji se pristojno ponaa.

    2007. godine dolazi do dramatine promene. Te godine kompanija Sun je objavila da e budue verzije Jave biti dostupne pod GPL licencom (General Public License), to je zapravo ista licenca koju koristi Linux. Oracle je veoma posveen tome da Java ostane open source. Ali postoji jedna sitnica, a to su patenti. Svako moe dobiti pravo na patent radi korienja i modifikovanja Jave, koji podlee GPL-u, ali samo na desktop i serverskim platformama. Ako elite da koristite Javu u ugraenim sistemima, potrebna vam je druga licenca, i verovatno ete morati da to i platite. Ipak, ovi patenti e nestati u narednoj deceniji i tada e Java biti potpuno besplatna.

    Java se interpretira, tako da je suvie spora za ozbiljne aplikacije.

    U ranom periodu jezika Java, on jeste bio interpretiran. Danas, osim na mikroplat-formama kao to su mobilni telefoni, Java virtuelna maina koristi kompajliranje u letu. Kritini elementi vaeg programa izvravae se jednako brzo u jeziku Java, kao to bi to bio sluaj u jeziku C++, a u nekim sluajevima ak i bre.

    Java ipak ima dodatno optereenje u odnosu na C++. Vreme koje je potrebno za pokretanje virtuelne maine je veoma sporo, a Java GUI je sporiji od standardnog GUI-a ugraenog u OS, jer je iscrtan na nain koji je nezavisan od platforme.

    Ljudi su se godinama alili da su Java aplikacije spore. Meutim, raunari su danas mnogo bri nego u vreme kada su poele ove pritube. Spori Java program e se i danas izvravati mnogo bolje nego to se taj, veoma brzi C++ program izvravao pre nekoliko godina. U sadanjem trenutku, pritube zvue kao kiselo groe, a neki kritiari sada poinju da prebacuju kako je korisniki interfejs jezika Java zapravo ruan, a ne spor.

    Svi Java programi se izvravaju unutar internet stranice.

    Svi Java apleti, izvravaju se unutar internet pretraivaa. To je definicija za aplet Java program koji se izvrava unutar pretraivaa. Veina Java programa su samo-

    6 Termin koji oznaava da izvorni kd nije mogue modifikovati ili upotrebljavati u drugim projektima

  • Poglavlje 1 Uvod u Javu16

    stalne aplikacije koje se pokreu izvan pretraivaa. Zapravo, veliki broj Java pro-grama izvrava se na web serverima i kreira kod za web stranice.

    Java programi predstavljaju veliki sigurnosni rizik.

    U ranim danima Jave, postojali su neki iroko objavljeni izvetaji o propustima u Java bezbednosnom sistemu. Veina propusta odnosila se na implementaciju Jave u odreenom pretraivau. Istraivai su shvatili kao izazov da pokuaju da pronau pukotine u oklopu Jave i da nadvladaju snagu i sloenost bezbednosnog modela apleta. Tehniki nedostaci koje su oni pronalazili brzo su otklanjani, a koliko je nama poznato, nijedan od aktuelnih sistema nije bio ugroen. Da biste ovo sagle-dali, uzmite u obzir doslovno milione napada virusa na izvrne datoteke Windowsa i makroe Worda, koji uzrokuju veliku tetu, uz neverovatno odsustvo kritike zbog slabosti napadnutih platformi. Takoe, ActiveX mehanizam Internet Explorera moe da predstavlja plodno tlo za zloupotrebe. Ali, jednostavno, nain da se on zaobie je toliko oigledan da se bezmalo niko nije ni trudio da to objavljuje.

    Neki sistem administratori su ak deaktivirali Javu u pretraivaima preduzea, ali i dalje doputaju svojim korisnicima da uitavaju izvrne datoteke, ActiveX kontrole i Word dokumente, to predstavlja daleko vei rizik. ak i nakon 15 godina od svog nastanka, Java je daleko bezbednija od svih alternativa.

    JavaScript je pojednostavljena verzija Jave.

    Skript jezik JavaScript, koji se moe koristiti unutar internet strana, nastao je u kom-paniji Netscape i prvobitno se zvao LiveScript. JavaScript poseduje sintaksu koja podsea na Javu, ali zapravo ne postoji veza (osim, naravno, u nazivu). Podskup jezika JavaScript je standardizovan kao ECMA-262. JavaScript je daleko vie inte-grisan u pretraivaima nego to su to Java apleti. Pored toga, program JavaScript ima mogunost da modifikuje dokument koji se prikazuje, dok aplet moe samo da kontrolie izgled na ogranienom prostoru.

    Sa jezikom Java, mogu svoj raunar da zamenim internet ureajem vrednim 500$.

    Kada se pojavio jezik Java, padale su razliite opklade da li e se ovo dogaati. Iako su kompanije proizvodile prototipove mrenih raunara koji su podravali Javu, korisnici nisu blil spremni da se odreknu snanog desktop raunara kako bi ga zamenili ogranienom mainom bez lokalnog diska. Doli smo do zakljuka da mreni raunar sa Java podrkom predstavlja pogodnu opciju za ideju raunar bez administracije i smanjenje trokova u poslovnom svetu, ali ak se ni to ne dogaa u veoj meri.

    Sadanja generacija tablet raunara ne koristi Java programski jezik7.

    7 Recenzent prevoda se ne slae sa autorom poto je veina tableta danas bazirana na operativnom sistemu Android za koji se aplikacije programiraju u Javi. Autor je verovatno eleo da kae da se Java ME ne koristi koliko je to ranije bio sluaj.