MIKRO KNJIGA - PRIKAZ KNJIGE

Misliti na Javi

Uvod

Kao i bilo koji ljudski jezik, Java omogućuje iskazivanje pojmova. Sa narastanjem problema, ovaj način izražavanja biće vam znatno lakši i fleksibilniji od bilo kog drugog.

Ne možete gledati na Javu samo kao na gomilu svojstava, jer neka svojstva nemaju smisla sama za sebe. Delove možete da koristite zajedno samo ako razmišljate o projektovanju, a ne o pisanju koda. Da biste razumeli Javu na ovaj način, morate razumeti i probleme koji se pri tome javljaju, kao i pri programiranju uopšte. Ova knjiga razmatra probleme pri programiranju, objašnjava zbog čega predstavljaju probleme, i pokazuje postupke kojima ih Java rešava. Zato se skup mogućnosti koje objašnjavam u svakom poglavlju zasniva na načinu rešavanja pojedine vrste problema korišćenjem Jave. Na taj način, trudim se da vas dovedem, korak po korak, do tačke kada Javin način razmišljanja i izražavanja postaje vaš maternji jezik.

Od početka do kraja, moj stav počiva na tome da vi želite da u svojoj glavi stvorite model koji će vas dovesti do dubokog razumevanja jezika; ako nai?ete na zagonetku, moći ćete da je uvedete u svoj model i prona?ete odgovor.

Preduslovi

Ova knjiga podrazumeva da koliko-toliko poznajete programiranje: da shvatate da je program skup naredaba, da poznajete princip potprograma/funkcije/makroa, kontrolnih struktura kao što je "if", konstrukcija za petlje kao što je "while" itd. Sve ovo ste mogli naučiti na raznim mestima, recimo pri programiranju u nekom makro-jeziku ili pri radu sa alatom kao što je Perl. Bez obzira na to koliko ste pri dosadašnjem programiranju ovladali osnovnim idejama, moći ćete da radite po ovoj knjizi. Naravno, knjiga će biti lakša C programerima, i još više C++ programerima, ali ne otpisujte sebe ako nemate iskustva u ovim jezicima (budite spremni da naporno radite). Kroz knjigu ću postepeno uvoditi koncepte objektno orijentisanog programiranja (OOP) i osnovnih Javinih kontrolnih mehanizama - tako da vas i to čeka - a u prva vežbanja ću uključiti i osnovne naredbe za kontrolu toka.

Cilj čestih pozivanja na osobine jezika C i C++ nije da budu interni komentari već da pomognu programerima da uporede Javu sa tim jezicima, iz kojih je Java i potekla. Pokušaću da ta upore?ivanja budu jednostavna i objasniću sve sa čim mislim da neko ko ne koristi C/C++, nije upoznat.

Učenje Jave

Otprilike u isto vreme kada se pojavila moja prva knjiga, Using C++ (Osborne/McGraw-Hill, 1989), počeo sam da predajem taj jezik. Predavanje programskih jezika postala je moja profesija: gledao sam glave koje klimaju, bele poglede i zbunjene izraze u publici širom sveta još od 1989. Kada sam počeo da po kućama obučavam manje grupe ljudi, otkrio sam nešto tokom vežbi. Č;ak i ljude koji su se smešili i klimali glavom zbunjivala su mnoga pitanja. Primetio sam, predsedavajući više godina odsekom za C++ na Konferenciji za razvoj softvera (kasnije i odsekom za Javu), da smo i ja i drugi govornici skloni da prosečnoj publici serviramo previše informacija u kratkom vremenskom roku. Zbog različitih nivoa publike i načina na koji sam predstavljao materijal, na kraju sam izgubio deo slušalaca. Možda previše tražim, ali pošto osećam otpor prema tradicionalnom načinu predavanja (a verujem da većina predavača oseća takav otpor zbog dosade), samo sam pokušao da održim brz tempo predavanja.

Jedno vreme sam pravio dosta raznih prezentacija u relativno kratkom vremenskom periodu. Tako sam došao u situaciju da učim eksperimentisanjem i ponavljanjem (dobar način za projektovanje Java programa). Na kraju sam iskoristio sve što sam naučio kao predavač - i napravio kurs koji bih rado držao duže vreme. U njemu se problemi obra?uju kroz jednostavne i lake korake i putem višedelnih vežbi na kraju svake kratke lekcije. Sada ovaj kurs držim na javnim seminarima o Javi. O tim seminarima možete saznati više na adresi www.BruceEckel.com.

Povratne informacije koje dobijam na svakom seminaru pomažu mi da menjam i prera?ujem materijal sve dok ne zaključim da je koristan. Ali ovu knjigu ne čine samo beleške sa seminara: u nju sam pokušao da spakujem što više informacija i spojio sam ih tako da vas vode od jednog do drugog predmeta. Ova knjiga je umnogome zamišljena da služi usamljenom čitaocu koji se bori sa novim programskim jezikom.

Ciljevi

Kao i moja prethodna knjiga, Misliti na C++-u, i ova knjiga je nastala tokom predavanja jezika. Posebna motivacija mi je bila da stvorim nešto što će mi omogućiti da predajem dati jezik na seminarima. Poglavlje u knjizi zamišljao sam kao jednu dobru lekciju na seminaru. Cilj mi je bio da dobijem celine koje mogu da ispredajem za razumno vreme i da ih propratim vežbama podesnim za rad u učionici.

Moji ciljevi u ovoj knjizi su:

  1. Da predstavim materijal u jednostavnim koracima tako da lako savladate svaki koncept pre nego što nastavite dalje.
  2. Da koristim što jednostavnije i kraće primere. To me ponekad sprečava da se uhvatim u koštac sa "stvarnim" problemima, ali sam primetio da su početnici obično srećniji kada mogu da shvate svaki detalj primera, i nisu impresionirani obimom problema koji se rešavaju. Tako?e postoji ozbiljna granica u količini koda koji može da se razume u učionici. Oni kojima se ovo ne dopada, neka prihvate to kao pedagoški ispravniji pristup.
  3. Da pažljivo odaberem redosled pojmova koje objašnjavam tako da ne nai?ete na nešto sa čim se ranije niste susreli. Naravno, to nije uvek moguće; u takvim situacijama, dat je kratak uvodni opis.
  4. Da pružim ono što smatram bitnim za razumevanje jezika umesto gomilanja onoga što znam. Verujem u hijerarhiju informacija, kao i da postoje činjenice koje 95% programera nikada neće imati potrebe da zna, a koje samo zbunjuju i povećavaju složenost jezika. Da uzmem primer iz C-a: ako zapamtite tabelu prioriteta operatora (ja nikada nisam), možete da pišete efikasan ali nečitljiv kôd. Ali ako malo promislite o takvom stilu pisanja, shvatićete da zbunjuje onoga ko čita/održava kôd. Stoga zaboravite na prioritete i koristite zagrade svuda gde stvari nisu potpuno jasne.
  5. Da svaki odeljak bude dovoljno usredsre?en tako da pauza izme?u izlaganja i vežbe bude kratka. To slušaoca drži budnim i aktivnim tokom seminara, a čitaocu pruža osećanje bržeg ovladavanja materijom.
  6. Da obezbedim solidnu osnovu kako biste mogli da dobro razumete teoriju i produžite ka daljim proučavanjima.

Dokumentacija na Webu

Jezik Java i njegove biblioteke iz Sun Microsystemsa (besplatno se preuzimaju sa Weba) imaju dokumentaciju u elektronskom obliku, kojoj možete pristupati koristeći čitač Weba; gotovo svaka druga nezavisna distribucija Jave ima takav ili sličan sistem dokumentacije. Većina knjiga o Javi kopira taj sistem. Stoga takvu dokumentaciju ili već imate, ili je možete preuzeti sa Weba, i osim ako to zaista nije neophodno, u ovoj knjizi je nećemo ponavljati. Obično mnogo brže možete da na?ete opis neke klase pomoću čitača Weba, nego da ga tražite po knjizi (a dokumentacija na Webu je verovatno ažurnija). Ova knjiga će obezbediti dodatne opise klasa samo kada je neophodno dopuniti dokumentaciju da biste shvatili odre?eni primer.

Poglavlja

Ova knjiga je pisana u skladu sa načinom na koji ljudi uče jezik Java. Povratne informacije od slušalaca na seminarima pomogle su mi da otkrijem koji su delovi teži i zahtevaju dodatna objašnjenja. U oblastima gde sam bio preambiciozan i uvrstio previše novih pojmova ođednom, došao sam do saznanja - kroz proces prikaza materijala - da više novih pojmova zahteva više objašnjavanja, a to lako zbunjuje slušaoca. Zbog toga sam se veoma trudio da uvodim što je moguće manje pojmova ođednom.

Cilj svakog poglavlja je da savladate jedan pojam, ili manje grupe povezanih pojmova, bez obzira na sve ostalo što se tu pominje. Na taj način možete da prihvatite svaki delić teorije u zavisnosti od vašeg dotadašnjeg znanja, pre nego što produžite dalje.

Sledi kratak opis poglavlja ove knjige koja odgovaraju lekcijama i vežbama sa mojih seminara.

Poglavlje 1: Upoznavanje sa objektima

Ovo poglavlje sadrži pregled osnova objektno orijentisanog programiranja, uključujući i odgovor na osnovno pitanje - šta je objekat; zatim tumači odnos interfejsa i realizacije, apstrakciju i kapsuliranje, poruke i funkcije, nasle?ivanje i kompoziciju, i veoma važan pojam polimorfizma. Steći ćete i opštu sliku o pravljenju objekata, uključujući konstruktore, mesto objekata, gde da ih smestite kada ih napravite, kao i o magičnom sakupljaču smeća koji uklanja nepotrebne objekte. Biće uvedeni i drugi pojmovi, uključujući obradu grešaka pomoću izuzetaka, korišćenje višenitnog rada za pravljenje korisničkog okruženja, izradu programa za mreže i Internet. Naučićete šta čini Javu izuzetnom i zašto je bila tako uspešna. Pomenućemo i objektno orijentisanu analizu i projektovanje.

Poglavlje 2: Sve je objekat

Ovo poglavlje vas vodi do trenutka kada ćete moći da napišete svoj prvi Java program, pa se stoga opisuju osnove, uključujući i koncept reference na objekat; kako da napravite objekat; uvod u osnovne tipove i nizove; opseg definisanosti i način na koji sakupljač smeća uništava objekte. Govori se i o tome kako je sve u Javi nov tip podataka (klasa) i kako da napravite svoje klase; opisane su i funkcije, argumenti i povratne vrednosti. Razmatra se i vidljivost imena i korišćenje komponenata iz biblioteka; rezervisana reč static, komentari i ugra?ena dokumentacija.

Poglavlje 3: Kontrolisanje toka programa

Ovo poglavlje počinje sa svim operatorima koji u Javu dolaze iz jezika C i C++. Uz to, otkrićete uobičajene zamke u radu sa operatorima, izričitu konverziju, unapre?enje i prioritete. Zatim slede osnovne operacije za kontrolu toka i uslovljavanje, koje postoje u gotovo svakom programskom jeziku: uslovljavanje sa if-else; petlje sa for i while; izlazak iz petlji sa break i continue, kao i Javini označeni break i označeni continue (koji pokrivaju odsustvo naredbe goto u Javi) i uslovljavanje naredbom switch. Iako dosta ovog materijala ima zajedničkih osobina sa jezicima C i C++, postoje izvesne razlike. Tako?e, svi primeri će biti u potpunosti na Javi tako da ćete se bliže upoznati sa Javinim izgledom.

Poglavlje 4: Inicijalizacija i čišćenje

Ovo poglavlje počinje uvo?enjem konstruktora koji jamče pravilnu inicijalizaciju. Definicija konstruktora vodi do koncepta preklapanja funkcija (jer može da vam zatreba nekoliko konstruktora). Zatim sledi diskusija o procesu čišćenja, koji nije uvek tako jednostavan kao što se čini na prvi pogled. Obično samo ostavite objekat kada s njim završite i sakupljač smeća će kad-tad proći i osloboditi memoriju. Ovaj deo istražuje sakupljača smeća i neke njegove specifičnosti. Poglavlje se završava detaljima o tome kako teče inicijalizacija: automatska inicijalizacija članova, naznačavanje inicijalizacije članova, poredak inicijalizacije, statična inicijalizacija i inicijalizacija nizova.

Poglavlje 5: Sakrivanje realizacije

U ovom poglavlju se objašnjava način na koji je kôd upakovan i zašto su neki delovi biblioteka dostupni a drugi skriveni. Počinje analizom rezervisanih reči package i import koje organizuju pakete na nivou datoteka i omogućavaju stvaranje biblioteka klasa. Ispituju se pojmovi putanje direktorijuma i imena datoteka. Ostatak poglavlja se odnosi na rezervisane reči public, private i protected, koncept "prijateljskog" pristupa i na to šta razni nivoi kontrole pristupa znače kada se koriste u različitim kontekstima.

Poglavlje 6: Ponovno korišćenje klasa

Koncept nasle?ivanja je standard u gotovo svim OOP jezicima. To je način da uzmete postojeću klasu i proširite njenu funkcionalnost (kao i da je promenite, što je tema poglavlja 7). Pomoću nasle?ivanja često možete ponovo da koristite kôd a "osnovnu klasu" ostavite istu: samo ponegde dodate nekoliko stvari da biste dobili ono što želite. Ipak, nasle?ivanje nije jedini način za formiranje novih klasa iz postojećih. Objekat tako?e možete ugraditi unutar nove klase pomoću kompozicije. U ovom poglavlju naučićete ova dva načina za ponovno korišćenje koda i kako da ih primenite u Javi.

Poglavlje 7: Polimorfizam

Bez pomoći sa strane, moglo bi da pro?e i devet meseci dok ne otkrijete i shvatite pojam polimorfizma, kamen temeljac OOP-a. Kroz male, jednostavne primere videćete kako da nasle?ivanjem stvorite porodicu tipova i kako da radite sa objektima iz te porodice preko njihove zajedničke osnovne klase. Polimorfizam u Javi dozvoljava da sve objekte u toj porodici tretirate na generički način, što znači da većina vašeg koda neće zavisiti od specifičnog tipa informacija. Ovo omogućuje da se programi proširuju, pa su nadogradnja i održavanje programa lakši i jeftiniji.

Poglavlje 8: Interfejsi i unutrašnje klase

Java obezbe?uje i treći način za stvaranje odnosa izme?u klasa putem interfejsa, a to je potpuna apstrakcija interfejsa objekta. Interfejs je više nego samo apstraktna klasa dovedena do krajnosti, jer dozvoljava da "višestruko nasle?ivanje" C++-a ostvarite u nekoj meri stvaranjem klase koja može biti svedena na više od jednog osnovnog tipa.

Na početku, unutrašnje klase izgledaju kao jednostavan mehanizam za skrivanje koda: stavljate klase unutar drugih klasa. Naučićete da unutrašnja klasa radi i više od toga: ona je svesna i može da komunicira sa klasom koja je okružuje; kôd koji možete napisati pomoću unutrašnjih klasa pogodan je i jednostavan. Za većinu je ovo nov koncept, pa će i vama biti potrebno neko vreme da ovladate radom sa unutrašnjim klasama.

Poglavlje 9: Č;uvanje objekata

Program koji ima odre?en broj objekata sa unapred poznatim vekom trajanja relativno je jednostavan. Vaši programi će po pravilu stalno praviti nove objekte u različito vreme, koje će biti poznato tek tokom izvršavanja programa. Pre početka izvršavanja programa nećete znati ni broj ni tačan tip objekata koji vam trebaju. Da biste rešili opšti programski problem, morate biti u mogućnosti da stvorite bilo koji broj objekata, bilo kada i bilo gde. Ovo poglavlje detaljno proučava kontejnersku biblioteku koju obezbe?uje Java 2 za čuvanje objekata: proste nizove i savršenije kontejnere (strukture podataka) kao što su ArrayList i HashMap.

Poglavlje 10: Obrada grešaka pomoću izuzetaka

Osnovna filozofija Jave je da se loše napisan kôd neće izvršavati. Koliko god je to moguće, prevodilac otkriva probleme. Ponekad problemi - bilo programerske greške ili uobičajene situacije koje prouzrokuju greške tokom normalnog izvršavanja programa - mogu da se otkriju i obrade samo tokom izvršavanja. Za obradu svih problema koji se javljaju tokom izvršavanja programa, Java koristi obradu izuzetaka. Ovo poglavlje objašnjava rezervisane reči try, catch, throw, throws i finally; kada treba bacati izuzetke i šta raditi kada ih uhvatite. Tako?e, upoznaćete standardne izuzetke, naučiti kako da napravite svoje, šta se dešava sa izuzecima u konstruktorima i kako se pronalaze blokovi za obradu izuzetaka.

Poglavlje 11: Javin ulazno-izlazni sistem

Teoretski, svaki program možete podeliti u tri dela: ulaz, obrada i izlaz. To znači da je U/I (ulaz/izlaz) važan deo cele priče. U ovom poglavlju učićete o raznim klasama za čitanje iz datoteka, blokova memorije i sa konzole, kao i za pisanje u njih. Biće pokazana razlika izme?u "starog" i "novog" U/I sistema. Ispituje se i proces uzimanja objekta, njegovog "stavljanja u tok" (tako da može biti smešten na disk ili poslat preko mreže), kao i njegove rekonstrukcije koju za vas obavlja Javina serijalizacija objekata. Pored toga, ispituje se Javina biblioteka za kompresiju kojom se upravlja Javinim ARhivskim formatom datoteke (JAR).

Poglavlje 12: Prepoznavanje tipa tokom izvršavanja

Javin mehanizam prepoznavanja tipa tokom izvršavanja (engl. Run-Time Type Identification, RTTI) omogućuje da otkrijete tačan tip objekta kada imate samo referencu na osnovni tip. Možda ćete hteti da namerno ignorišete tačan tip objekta i pustite Javin mehanizam za dinamičko povezivanje (polimorfizam) da pozove odgovarajuću metodu. Ali ponekad je veoma korisno znati tačan tip objekta kome pristupate preko reference na osnovni tip. Ta informacija često dozvoljava da efikasnije obavljate operacije za specifične slučajeve. U ovom poglavlju se objašnjava čemu služi RTTI, kako da ga koristite, kako da ga zaobi?ete tamo gde mu nije mesto, a obra?uje se i mehanizam refleksije.

Poglavlje 13: Pravljenje prozora i apleta

U paketu sa Javom nalazi se i grafička biblioteka Swing. To je skup klasa koje se bave problemom stvaranja prozora na prenosiv način. Ovi programi sa prozorima mogu biti apleti ili samostalne aplikacije. Ovo poglavlje je uvod u Swing i pravljenje apleta za Web. Predstavljena je i važna tehnologija zrna Jave (JavaBeans). To je od velikog značaja za stvaranje alata za brzi razvoj aplikacija (engl. Rapid Application Development, RAD).

Poglavlje 14: Višenitni programi

U Javu su ugra?ene olakšice za podršku većem broju konkurentnih podzadataka (nazvanih niti), koji rade unutar istog programa. (Ako nemate više procesora u računaru, oni samo naizgled rade istovremeno.) Iako se ovaj koncept može upotrebiti bilo gde, niti su najkorisnije kada pokušavamo da napravimo korisničko okruženje, kako korisnik ne bi bio onemogućen da pritisne dugme ili unosi podatke kad je obrada podataka u toku. Ovo poglavlje se bavi sintaksom i semantikom višenitnog rada u Javi.

Poglavlje 15: Distribuirana obrada

Sve mogućnosti i biblioteke Jave naročito dolaze do izražaja kada počnete da pišete programe koji treba da rade na mrežama. U ovom poglavlju se ispituju komunikacije preko mreža i Interneta kao i klase koje obezbe?uje Java da bi to olakšala. Uvode se veoma bitni koncepti Servlet i JSP (za programiranje na strani servera), Java DataBase Connectivity, JDBC, za povezivanje sa bazama podataka i Remote Method Invocation, RMI, za pozivanje metoda preko mreže. Najzad, tu je i uvod u nove tehnologije kao što su JINI, JavaSpaces i Enterprise JavaBeans, EJB.

Dodatak A: Prosle?ivanje i vraćanje objekata

Pošto je jedini način za obraćanje objektima u Javi preko referenci, koncept prosle?ivanja objekata funkcijama i njihovo vraćanje iz funkcija ima zanimljive posledice. U ovom dodatku objašnjavamo šta treba da znate kada radite sa objektima pri ulasku u funkcije i vraćanju iz njih i predstavljamo klasu String, koja drugačije pristupa problemu.

Dodatak B: Javin lokalni interfejs (JNI)

Potpuno prenosivi Java program ima ozbiljne nedostatke: sporost i nemogućnost da pristupi uslugama specifičnim za date platforme. Kada znate na kojoj platformi će program raditi, možete znatno da ubrzate neke operacije ako ih pretvorite u lokalne metode, što su, u stvari, funkcije napisane na nekom drugom programskom jeziku (trenutno su podržani samo C i C++). Dodatak B vas dovoljno uvodi u ovu temu i pokazuje kako možete da napravite jednostavne primere povezane sa kodom koji nije pisan na Javi.

Dodatak C: Vodič za programiranje na Javi

Ovaj dodatak sadrži sugestije za projektovanje i pisanje programa niskog nivoa.

Dodatak D: Resursi

Spisak knjiga o Javi koje smatram naročito korisnim.

Vežbe

Primetio sam da jednostavne vežbe pomažu studentima da shvate gradivo tokom seminara, pa dajem nekoliko vežbi na kraju svakog poglavlja.

Veći broj vežbi je planiran tako da mogu relativno lako i u razumnom roku da se urade u učionici dok instruktor posmatra i proverava da li svi studenti prihvataju izloženu materiju. Pojedina vežbanja su nešto složenija da se napredniji studenti ne bi dosa?ivali. Većina vežbi je predvi?ena da se brzo uradi, ispita i zaokruži vaše znanje. Neke vežbe su malo izazovnije ali nijedna nije nerešiva (pretpostavljam da ćete takve probleme naći sami, ili, još verovatnije, oni će naći vas).

Rešenja izabranih vežbi nalaze se u elektronskom dokumentu pod nazivom The Thinking in Java Annotated Solution Guide, koji se, uz malu nadoknadu može preuzeti sa adrese www.BruceEckel.com.

Multimedijalni CD ROM

Sa ovom knjigom su povezana dva multimedijalna kompakt diska. Prvi je: Thinking in C, koji vas priprema za korišćenje knjige i uvodi vas u neophodnu sintaksu jezika C, potrebnu za razumevanje Jave.

Drugi dostupan multimedijalni CD zasniva se na sadržini knjige. On je nezavisan proizvod i nudi celokupnu sadržinu jednonedeljnog seminara za obuku "Hands-On Java". To predstavlja više od 15 sati predavanja koja sam snimio i sinhronizovao sa stotinama slajdova punih informacija. Pošto je taj seminar zasnovan na ovoj knjizi, disk predstavlja idealnu dopunu. Verujemo da on postavlja nove standarde kvaliteta.

CD-ROM Hands-On Java možete nabaviti isključivo narudžbenicom, sa Web lokacije www.BruceEckel.com.

Izvorni kôd

Kompletan izvorni kôd iz ove knjige dostupan je kao slobodan softver zaštićen autorskim pravom, u jednom paketu, na adresi www.BruceEckel.com. Ovo je zvanična Web lokacija za distribuciju koda i elektronskog izdanja knjige, pa možete biti sigurni da ćete tu uvek naći najnoviju verziju. Duplikate verzija elektronske knjige i koda možete naći i na drugim Web lokacijama (neke veze ka tim lokacijama naći ćete na adresi www.BruceEckel.com), ali bi bilo dobro da pogledate zvaničnu Web lokaciju kako biste se uverili da su ti duplikati zaista najnovije verzije. Kôd možete deliti i koristiti u učionicama i u druge obrazovne namene.

Osnovni cilj zadržavanja autorskog prava jeste da obezbedi da kôd bude ispravno naveden i da se spreči objavljivanje koda u štampanim medijima bez dozvole. (Sve dok je kôd ispravno naveden, korišćenje primera iz knjige u većini medija nije problem.)

U svakoj datoteci sa izvornim kodom naći ćete sledeću poruku o autorskim pravima (obično na engleskom):

//:! :AutorskaPrava.txt

AutorskaPrava (c)2000 Bruce Eckel

Izvorni kôd uz drugo izdanje knjige Mislite na Javi. Sva autorska prava zaštićena OSIM kako je navedeno u narednoj izjavi:

Ovu datoteku možete slobodno koristiti za svoje potrebe (lične ili komercijalne), uključujući izmene i distribuciju isključivo u izvršnom obliku. Dozvoljeno je da ovu datoteku koristite u nastavi, uključujući i materijale za prezentaciju, dokle god kao izvor navodite knjigu Mislite na Javi. Izuzev za potrebe nastave, ovaj kôd ne smete da kopirate i distribuirate; jedino mesto za preuzimanje je Web lokacija http://www.BruceEckel.com (i zvanične kopije te lokacije), na kojima kôd možete preuzeti besplatno. Ovu poruku o autorskim pravima ne smete da uklanjate. Ne smete da distribuirate izmenjene verzije izvornog koda iz ovog paketa. Ne smete da koristite ovu datoteku u štampanim medijima bez izričite dozvole autora. Bruce Eckel ne odgovara za upotrebu ovog softvera na bilo koji način. Softver je dostupan u obliku u kome se nalazi i uz njega se ne dobija nikakva izričita ili posredna garancija, uključujući garanciju o prodaji, pogodnosti za odre?enu upotrebu ili kršenje nečijih prava. Celokupan rizik, u vezi s kvalitetom i performansama ovog softvera, snosite sami. Bruce Eckel i izdavač neće biti odgovorni za bilo kakvu štetu koju pretrpite vi ili neko drugi, kao posledicu upotrebe ili distribucije ovog softvera. Ni u jednom slučaju Bruce Eckel ili izdavač neće biti odgovorni za bilo kakav gubitak profita i podataka, niti za direktnu, indirektnu, posebnu, posledičnu, slučajnu ili krivičnu štetu, bez obzira na to kako su izazvane i bez obzira na teoriju o odgovornosti koja proizlazi iz upotrebe ili nemogućnosti upotrebe softvera, čak i kada bi Bruce Eckel i izdavač bili upozoreni na mogućnost takvih šteta. Ako se ispostavi da je softver neispravan, sami snosite sve troškove servisiranja, opravke ili ispravki. Ako mislite da ste pronašli grešku, molim vas da ispravku pošaljete putem obrasca koji možete pronaći na lokaciji www.BruceEckel.com. (Molim vas da na isti način prijavite i ostale greške u knjizi.)

///:~

Kôd možete koristiti u svojim nastavnim projektima (uključujući i vaše materijale za prezentaciju) dokle god zadržavate poruku o autorskim pravima koja se pojavljuje u svakom izvornom dokumentu.

Način pisanja korišćen u knjizi

U ovoj knjizi identifikatori (funkcije, promenljive i imena klasa) ispisana su polucrno. Većina rezervisanih reči tako?e je napisana polucrno, osim onih koje se toliko koriste da bi njihovo naglašavanje postalo zamorno, na primer "class".

Za pisanje primera u knjizi koristim odre?en stil. On odgovara stilu koji se koristi u kompaniji Sun za praktično sve programe koje možete naći na njihovoj Web lokaciji (pogledajte java.sun.com/docs/codeconv/index.html) i koji podržava većina razvojnih okruženja za Javu. Ako ste čitali moje druge radove, primetili ste tako?e da se stil pisanja programa koji koristi Sun podudara sa mojim stilom. Ovo mi je drago iako ja s time nisam imao nikakve veze. Pitanje stila može biti predmet višečasovnih rasprava, pa ću samo reći da ne želim da namećem tvrdnju šta je pravilan stil kroz moje primere; imam lične razloge zašto koristim takav stil. Pošto je Java programski jezik slobodne forme, možete da koristite bilo koji stil koji vama odgovara.

Programi u ovoj knjizi ubačeni su u tekst direktno iz datoteka koje su prevo?ene. Stoga bi izvorni kodovi štampani u knjizi trebalo da rade bez grešaka pri prevo?enju. Greške koje bi trebalo da budu prijavljene pri prevo?enju prati komentar //! tako da se mogu lako pronaći i automatski proveriti. Sve otkrivene i autoru prijavljene greške prvo će biti otklonjene u izvornom kodu na Webu, a kasnije u ažuriranom izdanju knjige (koje će se tako?e pojaviti i na adresi www.BruceEckel.com).

Verzije Jave

Pri utvr?ivanju korektnog funkcionisanja, moja referenca je Sunova realizacija Jave.

Sun je objavio tri glavne verzije Jave: 1.0, 1.1 i 2 (koja se zove verzija 2 iako Sunova izdanja JDK-a nastavljaju sa numeracijom: 1.2, 1.3, 1.4 itd). Č;ini se da verzija 2 napokon dovodi Javu do vrhunca, naročito u domenu alata za izradu korisničkih okruženja. Ova knjiga počiva na Javi 2, u odnosu na nju je i testirana, iako ponekad koristim i funkcije iz starijih verzija, da bi kôd mogao da se prevede pod Linuxom (uz pomoć JDK-a za Linux koji je bio dostupan u vreme pisanja).

Ako hoćete da naučite nešto o ranijim varijantama jezika što nije obuhvaćeno ovim izdanjem, prvo izdanje knjige (na engleskom) možete besplatno preuzeti sa lokacije www.BruceEckel.com.

Primetićete da, kada treba da pomenem ranije verzije jezika, ne koristim brojeve podrevizija. U ovoj knjizi ću se pozivati samo na Javu 1.0, Javu 1.1 i Javu 2, da bih izbegao tipografske greške nastale usled dodatnih deljenja na podrevizije.

Seminari i savetovanja

Moja kompanija obezbe?uje petodnevne javne i privatne seminare za obuku, zasnovane na materijalu iz ove knjige. Odabrani materijal iz svakog poglavlja predstavlja lekciju koja podrazumeva i vreme za vežbe pod nadzorom, kako bi svakom polazniku bila posvećena pažnja. Audio zapis predavanja i slajdovi sa uvodnog seminara tako?e se snimaju na CD, da biste stekli uvid barem u deo seminara, bez putovanja i troškova. Više informacija naći ćete na adresi www.BruceEckel.com.

Moja kompanija obezbe?uje i konsultacije, savetovanja i usluge vo?enja projekta, da bi vam pomogla da sprovedete svoj projekat kroz ceo razvojni ciklus, naročito ako je to prvi Java projekat za vašu firmu.

Greške

Bez obzira na to koliko trikova pisac koristi da otkrije greške, neke se uvek provuku a nov čitalac ih često odmah primeti.

Na početku svakog poglavlja u HTML verziji ove knjige (na lokaciji www.BruceEckel.com) nalazi se veza ka obrascu za prijavu grešaka. Ako otkrijete bilo šta što smatrate greškom, molim vas da iskoristite taj obrazac, prijavite grešku i pošaljete predlog za ispravku. Ako je potrebno, pošaljite i originalnu izvornu datoteku i označite sve predložene izmene. Ceniću vašu pomoć.

Napomena o dizajnu korica

Korica knjige Misliti na Javi inspirisana je ,Pokretom za umetnost i zanatstvo" (American Art & Crafts Movement) koji se javio početkom 20. veka i dostigao zenit izme?u 1900. i 1920. On je otpočeo u Engleskoj kao reakcija na mašinsku proizvodnju, industrijsku revoluciju i veoma izražen dekorativni stil viktorijanskog doba. Pokret se zalagao za umeren dizajn i prirodne forme koje je promovisao umetnički pravac art nouveau. Isticana je važnost umetnika kao pojedinca, a nije odbacivano korišćenje modernih alata. Postoje velike sličnosti sa današnjom situacijom: prelazak u novi vek, napredak od prvih korena računarske revolucije do nečega plemenitijeg i značajnijeg za pojedinca, isticanje veštine pisanja softvera umesto čiste proizvodnje koda.

Javu vidim kao pokušaj uzdizanja programera iznad nivoa tehničara operativnog sistema, u pravcu "softverskog umetnika".

I autor i dizajner korica (koji su prijatelji od detinjstva) nalaze inspiraciju u ovom pokretu i obojica su okruženi nameštajem, lampama i drugim predmetima koji ili potiču iz tog perioda, ili su njime inspirisani.

Drugi detalj na ovim koricama je kutija za prikupljanje prirodnjačkih eksponata, u ovom slučaju insekata. Ti insekti su objekti stavljeni unutar kutija kao objekata. Same kutije su stavljene u objekat "korica", što ilustruje osnovni koncept kombinovanja u objektno orijentisanom programiranju. Programeru se lako nameće asocijacija na "bubice"; bubice su ovde uhvaćene i, po svoj prilici, ubijene u tegli za uzorke, da bi na kraju bile zatvorene u male izložbene kutije: sve ovo nagoveštava Javinu sposobnost da pronalazi, prikazuje i obuzdava bubice (što je zbilja jedan od njenih najjačih aduta).

Zahvalnice

Prvo, hvala saradnicima koji su radili sa mnom na seminaru, u konsultacijama i pri razvoju nastavnih projekata. To su: Andrea Provaglio, Dave Bartlett (naročito je doprineo poglavlju 15), Bill Venners i Larry O'Brien. Cenim vaše strpljenje, dok i dalje pokušavam da razvijem najbolji model za me?usobnu saradnju nezavisnih ljudi kao što smo mi. Rolf André Klaedtke (Švajcarska), Martin Vlcek, Martin Byer, Vlada i Pavel Lahoda, Martin zvani Medved i Hanka (Prag) i Marco Cantu (Italija) tako?e zaslužuju moju zahvalnost što su mi bili domaćini na mojoj prvoj evropskoj turneji koju sam sâm organizovao.

Hvala i firmi Doyle Street Cohousing Community što me je trpela dve godine, koliko mi je trebalo da napišem prvo izdanje ove knjige (i što me je uopšte trpela). Puno hvala Kevinnu i Sondi Donovan što su mi iznajmili preko leta njihovu divnu kuću u prelepom mestu Crested Butte u Koloradu, dok sam radio na prvom izdanju knjige. Tako?e hvala i druželjubivim stanovnicima Crested Buttea i zaposlenima u laboratoriji Rocky Mountain Biological Laboratory što su me tako lepo primili.

Zahvalnost zaslužuje i Claudette Moore iz agencije Moore Literary za tolerantnost i ogromno strpljenje kojim mi je obezbedila sve što sam tražio.

Prve dve knjige sam objavio sa Jeffom Pepperom kao urednikom u Osborne/McGraw-Hillu. Jeff se našao na pravom mestu u pravo vreme - u Prentice-Hallu - raščistio mi put i omogućio da se sve prave stvari dese, čineći ovo veoma prijatnim izdavačkim poduhvatom. Hvala, Jeff, to mi puno znači.

Posebnu zahvalnost zaslužuje Gen Kiyooka i njegova kompanija Digigami, koja mi je velikodušno obezbedila mrežni server prvih par godina moga prisustva na Webu. To je bila neprocenljiva pomoć pri učenju.

Zatim, tu su i Cay Horstmann (koautor knjige Core Java, Prentice-Hall, 2000), D'Arcy Smith (Symantec) i Paul Tyma (koautor knjige Java Primer Plus, The Waite Group, 1996), koji su mi pomogli da razjasnim koncepte jezika.

Hvala ljudima koji su govorili na odseku za Javu Konferencije za razvoj softvera, kao i studentima na mojim seminarima koji su postavljali prava pitanja i pomogli da ovaj materijal postane jasniji.

Posebnu zahvalnost upućujem Larriju i Tini O'Brien koji su mi pomogli da pretočim moja seminarska predavanja u originalni CD ROM Hands-On Java.

Mnogi su mi slali ispravke i svima sam dužnik, ali posebnu zahvalnost zaslužuju (za prvo izdanje): Kevin Raulerson (koji je pronašao obilje sjajnih bubica), Bob Resendes (zaista neverovatan), John Pinto, Joe Dante, Joe Sharp (sva trojica su bili čudesni), David Combs (mnoge gramatičke ispravke i razjašnjenja), dr Robert Stephenson, John Cook, Franklin Chen, Zev Griner, David Karr, Leander A. Stroschein, Steve Clark, Charles A. Lee, Austin Maher, Dennis P. Roth, Roque Oliveira, Douglas Dunn, Dejan Ristić, Neil Galarneau, David B. Malkovsky, Steve Wilkinson i mnogo drugih. Prof. dr. Marc Meurrens je uložio veliki napor da u Evropi objavi i učini dostupnom elektronsku verziju prvog izdanja knjige.

Bilo je više mudrih "tehničara" u mom životu koji su mi postali prijatelji i uticali na mene putem joge i drugih vrsta duhovnog napredovanja, koje smatram vrlo inspirativnim i poučnim. To su Kraig Brockschmidt, Gen Kiyooka i Andrea Provaglio (koji radi na podučavanju Jave i programiranja uopšte u Italiji, a sada i u Sjedinjenim Državama, kao saradnik tima MindView).

Nije iznena?enje što mi je poznavanje Delphija pomoglo da razumem Javu, budući da ta dva jezika imaju puno zajedničkih koncepata i dizajnerskih rešenja. Moji prijatelji koji se bave Delphijem pomogli su mi da proniknem u unutrašnjost tog sjajnog programskog okruženja. To su Marco Cantu (još jedan Italijan: da li dobro poznavanje latinskog doprinosi sklonosti ka programskim jezicima?), Neil Rubenking (koji se bavio jogom, vegetarijanstvom i zenom dok nije otkrio računare) i, naravno, Zack Urlocker, stari prijatelj s kojim sam proputovao svet.

Pronicljivost i podrška mog prijatelja koji se zove Richard Hale Shaw, bili su vrlo korisni. Richard i ja smo proveli više meseci zajedno, držeći seminare, pokušavajući da izradimo savršen metod učenja za polaznike. Tako?e, zahvalnost zaslužuju KoAnn Vikoren, Eric Faurot, Marco Pardi i ostala družina iz MFI-ja. Naročito Tara Arrowood koja mi je povratila veru u mogućnosti konferencija.

Dizajn knjige, dizajn korica i sliku na koricama uradio je moj prijatelj Daniel Will-Harris, priznati autor i dizajner (www.Will-Harris.com), koji se igrao sa samolepljivim slovima u osnovnoj školi dok je čekao da računari i stono izdavaštvo budu otkriveni, i koji se žalio na moje gun?anje u vezi sa algebarskim problemima. Ipak, knjigu sam složio sâm tako da sve greške u slaganju idu na moj račun. Za pisanje je korišćen Microsoftov Word 97, a za pripremu fotosloga Adobe Acrobat; originalna knjiga je napravljena direktno od Acrobat PDF datoteka. (Kao doprinos eri elektronike, desilo se da sam bio u inostranstvu oba puta kada je finalna verzija knjige bila pravljena - prvo izdanje je bilo poslato iz Kejptauna u Južnoj Africi, a drugo iz Praga). Za tekst je korišćen font Georgia, a za naslove Verdana. Font korišćen na koricama je ITC Rennie Mackintosh.

Hvala firmama koje su napravile programske prevodioce: Borlandu, grupi Blackdown (za Linux), i, naravno, firmi Sun.

Posebno zahvaljujem mojim učiteljima i svim mojim studentima (koji su istovremeno i moji učitelji). Najzabavniji učitelj pisanja bila je Gabrielle Rico (autor knjige Writing the Natural Way, Putnam 1983). Zauvek ću pamtiti sjajnu nedelju u Esalenu.

Listu prijatelja koji su me podržavali čine izme?u ostalih i: Andrew Birnstock, Steve Sinofsky, JD Hildebrandt, Tom Keffer, Brian McElhinney, Brinkley Barr, Bill Gates iz časopisa Midnight Engineering, Larry Constantine i Lucy Lockwood, Greg Perry, Dan Putterman, Christi Westphal, Gene Wang, Dave Mayer, David Intersimone, Andrea Rosenfield, Claire Sawyers, još Italijana (Laura Fallai, Corado, Ilsa i Cristina Giustozzi), Chris i Laura Strand, porodica Almquist, Brad Jerbic, Marilyn Cvitanic, porodica Mabry, porodica Haflinger, porodica Pollock, Peter Vinci, porodice Robbins, porodice Moelter (i McMillan), Michael Wilk, Dave Stoner, Laurie Adams, porodica Cranston, Larry Fogg, Mike i Karen Sequeira, Gary Entsminger i Allison Brody, Kevin Donovan i Sonda Eastlack, Chester i Shannon Andersen, Joe Lordi, Dave i Brenda Bartlett, David Lee, porodica Rentschler, porodica Sudek, Dick, Patty i Lee Eckel, Lynn i Todd i njihove porodice. I, naravno, moji mama i tata.

Saradnici sa Interneta

Hvala svima koji su mi pomogli da ponovo napišem primere uz korišćenje biblioteke Swing i za svu drugu pomoć. To su Jon Shvarts, Thomas Kirsch, Rahim Adatia, Rajesh Jain, Ravi Manthena, Banu Rajamani, Jens Brandt, Nitin Shivaram, Malcolm Davis i svi koji su mi dali podršku. To mi je zaista pomoglo da brzo započnem ovaj posao.