1217
Misliti na Javi Prevod četvrtog izdanja Bruce Eckel MindVievv, Inc., predsednik Preveo Miljenko Šućur PRENTICE HALL

Misliti Na Javi

Embed Size (px)

DESCRIPTION

Priručnik za programiranje na programskom jeziku JAVA. Srpsko izdanje.

Citation preview

  • Mislitina

    JaviPrevod etvrtog izdanja

    Bruce EckelMindVievv, Inc., p redsedn ik

    Preveo

    Miljenko uur

    P R E N T I C EH A L L

  • Misliti na Javi, prevod etvrtog izdanja

    G lavni u red n ik O lga M ilankoR edak to ri Stela Spasi

    Sneana Biseni Tehniki u red n ik Sanja TasiL ektor i k o rek to r Vesna ukiRealizacija korica N ataa PavlovP relom teksta i o b rad a slika Sanja Tasi

    M iiica D eanski N ataa Pavlov

    Izdava M ikro knjiga , BeogradD irek to r D ragan Tanaskoski

    ta m p a P u b lik u m , Beograd

    Ako im ate p iran ja ili k o m en ta re , ili ako elite da dob ije te b esp la tan katalog , piite n am ili se javite:

    M ikro knjiga P. fah 20-87 11030 Beograd tel: 011/3540-544 pi sma@mi k ro k n j i g a . r s

    A utorizovan p revod sa engleskog jezika knjige T h in k in g in Java, F o u rth l 'd itio n .

    llo p v rig h t 2007 M ik ro kn jiga. Sva prava zadrana . N ije d o zvo ljeno da ijedan deo ove knjige b u d e rep ro d u k o v an ili em itovan n a bilo koji n a in , e lek tronski ili m ehan ik i, uk ljuu iui fo to k o p iran je , sn im an je ili b ilo koji d ru g i sistem za beleenje, bez p re th o d n e p ism en e dozvole izdavaa.

    T ransla tion co p v rig h t - 2007 by M ikro k n jig a , T h in k in g in Java, F o u r th E d itio n by B ruce Eckel, C o p y rig h t

  • Kratak sadrajPredgovor 1U vod 81: Upoznavanje sa objektim a 152: Sve je objekat 423: O peratori 654: Kontrolisanje izvravanja 995: Inicijalizacija i ienje 1156: Kontrola pristupa 1597: Ponovno korienje klasa 1808: Polim orfizam 2119: Interfejsi 23910: U nutranje klase 26611: uvanje objekata 30212: O brada greaka pom ou izuzetaka 34513: Znakovni nizovi 39214: Podaci o tipu 43215: Generiki tipovi 48416: Nizovi 59317: Detaljno razm atranje kontejnera 62818: Javin ulazno-izlazni sistem 71919: Nabrojani tipovi 80520: Anotacije 84521: Paralelno izvravanje 88522: Grafika korisnika okruenja 1045A: Dodaci 1166B: Resursi 1170Spisak term ina korienih u knjizi 1175Indeks 1177

  • Sadraj

    Java SE5 i S E 6...................................2Java SE6..........................................2

    etvrto izdanje.................................3Iz m e n e ..........................................................3

    Napomena o dizajnu k o r ic a .........4Zahvalnice......................................... 5

    U v o d 8

    Preduslovi......................................... 8Uenje Jave.......................................9C ilje v i................................................9Pouavanje na osnovuove k n jig e .......................................10Dokumentacija na W ebu.............11V ebe................................................11Javini tem elji.................................. 11lzvorni k o d .....................................12

    Nain pisanja korisen u knjizi............13

    G reke ............................................. 14

    1: U p o z n a v a n je sa o b je k t im a 15

    Razvoj apstrakcije..........................15Objekat ima in terfe js ................... 17Objekat prua usluge................... 19Skrivena realizacija........................20Ponovno korienje realizacije.. .21N asleivanje...................................22

    Relaeije !! i IE-KAO.......................25Virtuelizacija objekata prekopo lim orfizm a................................ 26Hijerarhija s jedinstvenimk o re n o m ......................................... 29K ontejneri.......................................29

    Paramctri/uvani (generieki) tipuvi .. 30 Obrada izuzetaka: postupanje s grekam a.......................................33

    Predgovor 1Java i I n t e r n e t .......................................34

    Sta je Web?............................................34Programiianje s klijentske s trane .. . . 36 Programiranje sa serverske strane . . . 40

    S a e ta k .......................................................41

    2: Sve je objekat 42R ad sa o b je k t im a

    p re k o r e f e r e n c i .................................... 42M o ra te d a n a p ra v ite sve o b je k te . 43

    G de se nalazi skladite............................43Specijalan sluaj: prosti t ip o v i ............44Nizovi u Javi.............................................. 46

    N ik a d a n e m o ra te d a u n i t i te

    o b je k a t ...................................................... 46Oblast vaenja......................................46Oblast vaenja ob jekata ..................... 47

    P ra v lje n je n o v ih t ip o v ap o d a ta k a : k l a s a .................................... 48

    Polja i m eto d e ..................... ................ 48M e to d e , a r g u m e n t i i p o v r a tn e

    v r e d n o s t i ................................................. 50Lista a rg u m en a ta .....................................51

    P r a v l j e n je p r o g r a m a n a J a v i . . . .5 2Vidljivost im e n a .....................................52Korienje drugih kom ponenata . . . . 52Rezervisana re s t a t i c ............................53

    V a p r v i p r o g r a m n a J a v i ................. 5 4Prevodenje i izv ravan je ....................... 56

    K o m e n ta r i i u g r a e n a

    d o k u m e n t a c i j a ........................................ 5 7D okum entacioni kom entari................ 58S in ta k s a .....................................................58Ugradeni H T M L .....................................59Prim eri o z n a k a .......................................60Prim er d o k u m e n ta c ije ......................... 62

    S til p r o g r a m i r a n j a ............................... 6 3

    S a e t a k ........................................................... 6 3

    V e b e .............................................................. 6 3

    Paralelni r a d ...................................34

  • v i Misliti na Javi

    3: O p e r a to r i 65

    Jednostavnije naredbeza ispisivanje.................................. 65Korienje operatora u Javi.........66P rio rite ti.........................................66Dodela v red n o sti..........................67

    Pojava pseudonimapri pozivanju metode.....................68

    Matematiki operatori................. 69Unarni operatori minus i plus.........71

    Automatsko uveanjei um anjenje.....................................72Operatori poreenja......................73

    Ispitivanje jednakosti objekata.........73Logiki o p e ra to ri..........................75

    N epotpuno iz ra u n av a n je ...................76

    Literali............................................. 77Eksponencijalni z a p is ............................78

    Operatori nad bitovim a............... 79Operatori pom eranja................... 80Ternarni operator uslovljavanja. .84 Operatori + i += za znakovnen iz o v e ............................................. 85este greke prilikomkorienja operatora......................86Eksplicitna konverzija tipova . . .87

    Odsecanje i zaokruivanje..............88Unapredenje tipova........................ 89

    Java nema operatorza odreivanje veliine................. 89Saet pregle o pera to ra ............... 89Saetak............................................. 98

    4: K o n tr o l is a n je iz v r a v a n ja 99

    Logike vrednosti.......................... 99Naredba if-e ise .............................. 99P e tlje ............................................. 100

    Petlja do-vvhile.......................................101Petlja f o r ...................................................101O perator z a rez ....................................... 103

    Foreach sin taksa.......................... 103Rezervisana re r e tu rn ............... 106

    Rezervisane rei breaki con tinue.....................................107

    Cuveni s;oto...................................108

    N a r e d b a s w i t c h ................................112S a e ta k .................................................... 114

    5: I n i c i j a l i z a c i j a i i e n j e 115G a r a n to v a n a in ic ija liz a c ija

    p o m o u k o n s t r u k t o r a .................. 115P re k la p a n je m e t o d a ........................117

    Razlikovanje preklopljenih m etoda ..1 19Preklapanje i prosti t i p o v i ................ 120Preklapanje pov ra tn ih v re d n o s ti. . . 123

    Io d r a z u m e v a n i k o n s t r u k to r i . .124 R e z e rv is a n a re t h i s ........................125

    Pozivanje konstruk toraiz k o n s tru k to ra ..................................... 127Znaenje rezervisane rei s ta t ic . . . . 129

    i e n je : f in a liz a c ija

    i s a k u p l ja n je s m e a .......................... 129 em u slui m etoda fina lize()? ......... 130M orate da istite s a m i......................... 131Stanje o k o n an ja ................................... 131Kako radi sakuplja s m e a ? .............. 133

    I n ic i j a l i z a c i j a l a n i c a ....................... 136Zadavanje in ic ija lizacije ..................... 137

    I n ic i ja l iz a c i ja k o n s t r u k t o r i m a . .1 3 9Redosled in ic ija lizacije ....................... 139Inicijaiizacija statinih elem enata . . 140 I:ksplicitna inicijalizacija statinihe lem en a ta ................................................. 143Inicijaliz.acija nestatin ih instanci . . 144

    In ic ija liz a c ija n iz o v a ........................145E.iste promenljivih param etara........ 150

    N a b ro ja n i t i p o v i ............................... 155S a .e tak .................................................... 158

    6: K o n t r o l a p r i s t u p a 159P ak e t: b ib l io te k a j e d i n i c a .......... 160

    O rganizacija k o d a ................................. 10 1PravI jenje jedinst ven i him ena p a k e ta .......................................... 1^2Lina bihlioteka sa a la tk a m a ............ 166Korienje tivoenja za prom enuponaanja p ro g ra m a ............................ 16SUpozorenje pri radu s pakelim a . . . 168

    S p e c if ik a to ri p r i s tu p a u Javi . . .168Paketni p r i s tu p ..................................... 169public: intertejs za p r is tu p ................ 169p riva te : to ne sm e da se d ira ! ............ 171pro tec ted . pristup nasledi\'anjem . . 172

  • Sadraj v ii

    Interfejs i realizacija....................174Pristup k la sam a..........................175Saetak........................................... 178

    7: P o n o v n o k o r i e n je k la sa 180

    S in t a k s a k o m p o z i j e .......................18 0

    S in t a k s a n a s l e i v a n j a ....................... 183Inicijalizacija osnovne k la s e ..............185

    D e l e g i r a n j e ..........................

  • v iii Misliti na Javi

    Lokalne unutranje klase...........299Identifikatori unutranjih klasa.300 Saetak...........................................301

    1 1 : u v a n j e o b j e k a t a 3 0 2

    Generike klase i kontejneri za bezbedan rad s tipovim a. . . .303Osnovni po jm ovi........................306Dodavanje grupa elemenata . . .307 Ispisivanje sadraja kontejnera. .309L iste............................................... 311I te r a to r i .......................................315

    Listlterator.................................318Ulanana lis ta ..............................319Pravljenje steka od ulananeliste................................................. 320Funkcionalnost sk u p a ............... 322Funkcionalnost mape................. 326Pravljenje reda za ekanje(od ulanane lis te ) ......................329

    Prioritetni red ekanja (P rio rityQ ueue)............................... 330

    Poreenje kolekcija i Iteratora .332Foreach i iteratori........................336

    Adapterska metoda.......................338Saetak...........................................341

    1 2 : O b r a d a g r e a k a p o m o u

    i z u z e t a k a 3 4 5

    K o n c e p t i .............................................. 345

    O s n o v n i i z u z e c i ............................... 346Argumenti izuzetku........................... 347

    H v a ta n je i z u z e tk a ............................ 348Blok trv ................................................34SBlokovi za obradu izuzetaka...............348

    P ra v lje n je s o p s tv e n ih iz u z e ta k a .3 4 9Izuzeci i zapisivanje........................... 352

    S p e c if ik a c ija i z u z e t a k a .................. 355

    H v a ta n je b ilo k o g iz u z e tk a . . . .3 5 6Poloaj nastanka izuzetka na stekuizvravanja..........................................358Ponovno generisanje izuzetka........ 359Ulanavanje izuzetaka....................... 362

    S ta n d a r d n i izu zec i u J a v i .............365Specijalan sluaj klase Runtim eException........................... 305

    i e n je o d r e d b o m f i n a l l y . . . .3 6 7 em u slui odredba finally?..............368U potreba bloka finally tokom povratka iz m etode pom ourezervisane rei r e t u r n ....................... 371M ana: izgubljeni izuzetak ...................372

    O g r a n i e n j a i z u z e t a k a .................... 3 7 4

    K o n s t r u k t o r i ........................................... 3 7 7

    P r o n a l a e n j e s l i n ih i z u z e t a k a . .3 8 2

    D r u g i p r i s t u p i ........................................ 3 8 3I s to r i j a ..................................................... 384Perspektive.............................................. 386Prosleivanje izuzetaka na konzo lu . .387 Pretvaranje proverenih izuzetaka u n e p ro v e ren e ....................................... 388

    U p u t s t v a z a i z u z e t k e ..........................3 9 0

    S a e t a k ......................................................... 391

    13: Znakovni nizovi 392Nepromenljivi znakovni nizovi .392 Poreenje preklapanja operatora + i StringBuildera . .393Nenamerna rekurzija................. 397Operacije sa znakovnimnizovim a....................................... 398Formatiranje izlaza......................400

    M etoda p r in t f ( ) ..................................... 400S ystem .ou t.fo rm at()............................400Klasa F o r m a t te r ...................................401Specifikatori f o r m a ta ......................... 402Konverzije klase F o r m a t te r ..............403S tr in g .fo rm a t() .....................................406

    R e g u la r n i i z r a z i ..................................... 4 0 8O sn o v e .....................................................408Pravljenje regiilarnih i / r a z a ..............411K vantilikatori..........................................413C h arS eq u en c e ....................................... 414Klase P a tte rn i M a tc h e r .....................414M etoda s p l i t ( ) ....................................... 422O peracije z a m e n e ................................ 422M etoda re se t( ) ....................................... 424Regularni i/.ra/.i i Javinula/.no i/Iazni s istem ............................425

    Leksiko analiziranje ulaza . . . .427C raninici k laseS c a n n e r .................. 42l>l.eksika anali/a pom ouregularnih i / r a / a ...................................430

    Klasa S tringTokenizer............... 431Saetak........................................... 4 3 1

  • Sadraj ix

    14: Podaci o tipu 432Potreba za prepoznavanjemtipa tokom izvravanja............... 432Objekat tipa Class........................434

    Literali k la se ........................................... 439Generike reference k la sa .................. 441Nova sintaksa za konverziju tipova . 444

    Provera pre konverzije tipa . . . .445Korienje literala ldase....................... 451D inam iki instanceof . . : ...................453Rekurzivno b ro ja n je ............................454

    Registrovane proizvodnem etode...........................................456Poreenje instanceofsa ekvivalencijama klase............. 459Refleksija: informacije o klasiu vreme izvravanja....................461

    itanje metoda klase.....................462Dinamiki posrenici................. 465Null objekti...................................469

    Lani objekti i vezivne funkcije . . . . 476Interfejsi i podaci o tipu .............476Saetak........................................... 482

    15: Generiki tipovi 484Poreenje sa C+ + - 0 1 1 1 ............... 485Jednostavni generiki tipovi . . .485

    Bihlioteka n - to r k i ................................ 487Klasa s te k a ..............................................490N a su in ic n a L is ta .................................. 491

    Generiki interfejsi..................... 492Generike metode........................496

    Korienje zakljuivanja o tipua rg u m e n ta ..............................................497Argum enti prom enljive d u /in ei generike m etode ................................499Generika m etoda za upotrehus G e n e ra to r im a .....................................500G enerato r opte n a m e n e .................. 501Pojednostavljenje upo trehe n - to r k i . 502Usluna m etoda za S e t .......................504

    A n o n i m n e u n u t r a n j e k la s e . . . .5 0 8

    P r a v l j e n je s lo e n ih m o d e la . . . .5 0 9

    T a ja n s tv e n o b r i s a n j e ..........................5 1 2Pristup u G + + - u .................................. 513M igracijska k o m p a tih iln o s t..............516

    Problem s b r isan jem ............................517ta se zbiva na g ran icam a...................518

    K o m p e n z a c i j a z a b r i s a n j e ............522Pravljenje instanci t ip o v a ...................523Nizovi generikih tipova.....................526

    G r a n i c e ...................................................... 531D o k e r s k i a r g u m e n t i .......................535

    Koliko je prevodilac p am e tan ? ......... 537K ontravarijansa .....................................539

    N eogranieni dokerskiargum en ti................................................ 541Konverzija h v a tan jem ..........................547

    N e d o s t a c i ................................................... 549Prosti tipovi ne m ogu biti

    param etri t i p a ....................................... 549Realizacija param etrizovanih

    interfeisa...................................................551Eksplicitna konverzija tipova

    i u p ozo ren ja ............................................551P re k la p a n je ............................................553O snovna klasa o tim a in te rfe js ......... 554

    S a m o o g r a n i e n i t i p o v i .................... 555G eneriki kod koji se neobino

    p o n a v lja ...................................................555Sam oogranienje ...................................557Kovarijansa a rg u m en a ta .....................559

    D in a m i k a b e z b e d n o s t t ip o v a . .562I z u z e c i ....................................................563M i k s i n i ................................................. 565

    M iksini u jeziku C + + ......................... 566M eanje pom ou interfejsa................ 567Korienje obrasca D e c o r a to r ......... 568

    M iksini s d inam ikimp osredn icim a ..........................................570

    L a te n tn i t i p o v i .................................. 572K o m p e n z a c ija za n e p o s to ja n je

    la te n tn ih t i p o v a ............................... 576Relleksija........ ................................... 576Priinena metode na sekvencu ........ 577

    Kada sltiajno neinateodgovarajuc'i interfejs....................... 580Simuliranje latentnih tipovapomocu a d a p te ra ............................. 582

    U p o t r e b a fu n k c ijsk ih

    o b je k a ta k a o s t r a t e g i j a .................. 585S a e ta k : d a li je e k s p l ic itn a k o n v e rz ija t ip o v a z a is ta

    ta k o lo a ? ...............................................590Proitajte i o v o ....................................... 592

  • x Misliti na Javi

    1 6 :N iz o v i 5 9 3

    ta to nizove ini posebnim .. . .593 Nizovi su prvorazredni objekti. .595Vraanje niza v renosti.............597Viedimenzionalni n iz o v i.........599Nizovi i generiki tipovi............. 603Pravljenje podatakaza testiranje...................................605

    Arrays.fill()................................. 605Generatori podataka.....................606Pravljenje nizova od Generatora. . . 612

    Metode klase A rrays....................616Kopiranje niza..............................617Poreenje nizova.......................... 618Poreenje elemenata niza..............619Ureivanje niza............................ 623Pretraivanje ureenog niza.......... 624

    Saetak........................................... 626

    17: D e ta l jn o r a z m a tr a n je

    k o n te jn e r a 6 28

    Potpuna taksonomijakontejnera.....................................628Popunjavanje kontejnera...........629

    Generatorsko reenje............................630G eneratori m a p a .................................. 632Korienje apstraktn ih k lasa ..............635

    Funkcije interfejsa Collection. .643Opcione o p erac ije ......................646

    Nepodrzane o p e rac ije ......................... 647

    Funkcije liste.................................649Skupovi i redosled skladitenja. .652

    S o r te d S e t................................................ 656

    R e d o v i z a e k a n j e ................................6 5 7Redovi za ekanje s p rio rite tom . . . . 658Dvostrani redovi za e k a n je ..............660

    I s c r p n i j e o M a p a m a ..........................661Ferfo rm anse............................................663S o r ted M a p .............................................. 666L in kedH ashM ap ...................................667

    T ra n s f o r m is a n je k lj u e v a

    i k l ju e v i z a h e i r a n j e .......................6 6 8Nain rada m etode hashC ode( ) . . . 671 Transform isanje kljueva zbogh rz in e ....................................................... 674Kedefinisanje m etode h a sh C o d e () . . 678

    I z b o r r e a l iz a c i je ..................................... 6 8 3S truktura za ispitivanje

    p e rfo rm an si............................................684Perform anse razliitih L is ta ..............688

    O pasnosti od m ikroporedenjape rfo rm an s i............................................694

    Izbo rskupa(realizacije interfejsa S e t) .................. 696

    Izbor m apa(realizacija interfejsa M ap )................698

    U s l u n e m e t o d e .................................. 701Uredivanje i pretraivanje lista

    (realizacija interfejsa L i s t ) ................ 705Kako kolekciju ili m ap u uiniti

    n e p ro m en ljiv o m .................................. 706Sinhronizovanje kolekcije ili m ap e . .708

    uvanje referenci............................... 7 0 9K ontejner W ea k H ash M a p ................ 712

    Kontejneri Jave 1 . 0 / 1 . 1 ....................7 1 3V ector i E n u m e r a t io n .......................713Klasa H a s h ta b le .................................. 714Klasa S tack ..............................................714Klasa B itS e t........................................... 716

    Saetak .........................................................7 1 8

    1 8 : J a v i n u l a z n o - i z l a z n i

    s i s t e m 7 1 9

    Klasa File ................................................... 7 1 9Listanje d ire k to r iju m a ....................... 719

    Uslune m etode za d irek to rijum e . . 723 lrovera postojanja i pravljenje d irek to rijum a ......................................... 72S

    U la z i i / . I a z ................................................ 7 3 0Vrste ukr/nih to k o v a ............................730

    Vrste iz la/nih tokova(O u tp u tS trea m .................................. 732

    D o d a v a n je a t r i b u t a i k o r i s n ih

    i n t e r f e j s a ................................................... 7 3 2I iltriranje u la /nog t

  • Sadraj xi

    Form atiran ulaz iz m e m o r ije ............739O snove pisanja u d a to te k u ................ 740uvanje i rekonstruisanje podataka. .742 C itanje i upisivanje datotekas nasum in im p r is tu p o m ...................744C evovodi...................................................745

    U s l u n e k la s e z a i t a n j e

    i p i s a n j e ...................................................... 7 4 5 itanje b ina rn ih d a to te k a ...................748

    S t a n d a r d n i U /I t o k o v i .................... 7 4 9 itanje s tandardnog ulaznog toka . . 749 O m otavanje toka S ystem .ou tu P r in tW rite r ..........................................750Preusm eravanje standardnogulaza/izlaza.............................................. 751

    U p r a v l j a n j e p r o c e s i m a .................... 7 5 2

    N o v e U / I k l a s e ..................................... 7 5 3Konverzija p o d a ta k a ............................757Pribavljanje prostih t ip o v a ................ 759Baferi p rikaza ..........................................761Rad s podacim a pom ou b a fe ra . . . . 765D etaljno o ba te rim a .............................. 766D atoteke preslikane u m em oriju . . . 769 Zakljuavanje d a to te k a ....................... 772

    K o m p r i m o v a n j e .................................. 7 7 5Iednoslavno kom pi im ovanjeu lo rm atu G Z IP .....................................776K om prim ovanje veeg brojadatoteka u ib rm atu Z ip ....................... 777lava arbive ( IA IO ...................................779

    S e r i j a l i z o v a n je o b j e k a t a ................. 7 8 0Pronalaenje k la se ................................ 78 1Upravljanje ser ija lizo v a n je m ............785Korienje tra jn o s t i .............................. 793

    X M L ................................................................ 7 9 9

    P r e f e - r e n c e s ..............................................8 0 2

    S a e t a k ......................................................... 8 0 4

    1 9 : N a b r o j a n i t i p o v i 8 0 5

    Osnovne mogunosti nabrojanih tipova........................805

    Uvoz slalinih lanovii u nabrojani tip............................ . H06

    Dodavanje metoda nabrojanom t i p u ........................807

    Kedolinisanie t'iuini mcloda.......... S0SNabrojani tipovi u naredbama svvitch ............................................809

    Misterija metode v a lues().........810Realizuje, ne nasleuje............... 813Nasumian iz b o r ........................814Upotreba interfejsaza organizovanje..........................815Skup Enum Set urnestoind ika to ra .....................................819Korienje mape EnumM ap . . .821 Metode koje se menjaju u zavisnosti od konstan te .............823

    Stvaranje lanca ogovornostipomou nabrojanih tipova............ 826

    Maine stanja s nabrojanimtipovima...................................... 830

    Viekratno otkrivanje tip a .........836Otkrivanje tipa pomounabrojanih tipova........................ 838

    Korienje metoda koje se menjaju u zavisnosti od konstantenabrojanog tipa............................840

    Otkrivanje tipa pomou mapaEnumMap...................................842Korienje 2-D niza.......................843

    Saetak........................................... 844

    20: A n o t a c i j e 845Osnovna sin taksa........................846

    Detinisanje anotacije......................... 846M etaanotacije....................................848

    P isa n je p ro c e s o ra a n o ta c i ja . . . .848Elementi anotacija............................. 849

    Ogra n i enj a pod razu meva n i hv red n o sti............................................850Generisanje spoljnih dato teka........ 850

    Anotacije ne podravajunasleivanje........................................854Realizacija procesora......................... 854

    apt za obradu anotacija.............857Upotreba obrasca Visitorsa alatkom a p t.............................. 861Jedinino testiranje pomouano tac ija .......................................864

    Testiranje generikih tipovaalatkom @Unit............................873,,Svite nisu potrebne................... 874Realizaciia interfejsa (Unit...........875Uklanjanje koda za testiranje.........881

    Saetak........................................... 883

  • xii Misliti na Javi

    2 1 : P a r a l e l n o i z v r a v a n j e 8 8 5

    Svi aspekti paralelnogizvravanja.....................................886

    Bre izvravanje .....................................886Poboljan dizajn k o d a ......................... 889

    O s n o v e v i e n i t n o g

    p r o g r a m i r a n j a ........................................8 9 0Definisanje z a d a ta k a ............................890Klasa T h r e a d ......................................... 891U potreba izvrilaca(interfejsa E x e c u to r) ............................893D obijanje povra tn ih vrednostiod z a d a ta k a ............................................896S pavan je ...................................................897P r io r i te t ...................................................899Preputanje .............................................. 901Servisne n i t i ............................................901Varijante p ro g ram iran ja .....................906Term inologija..........................................911Kako se pridruiti postojeoj n i t i . . . 912 Korisniko okruenje kojebrzo re a g u je ............................................913G rupe n iti ................................................ 914H vatanje iz u z e ta k a .............................. 915

    Deljenje re su rsa .......................... 918Nepravilno p ristupanje resursim a . . 918 Razreavanje takm ienjaza deljene resu rse ...................................921Atomske operacije i trenu tnav id ljivost...................................................926Atom ske k la s e ....................................... 932Kritini o d e ljc i....................................... 933Sinhronizacija s drugimo b je k tim a ................................................ 939Lokalno skladite n i t i ......................... 940

    G a e n je z a d a t a k a ............................... 9 4 2Ukrasna bata ......................................... 942Gaenje blokiranih zadataka..............945Prekidanje izvrsavanja......................... 946Provera postoji li p r e k id .....................954

    M e u s o b n a s a r a d n j a

    z a d a t a k a ...................................................... 9 5 6w ait() i no tityA lI() ..............................957notify() u odnosu na no tify A ll(). . . 962Proizvoai i p o tro a i ....................... 965Proizvodai, potroai i redoviza ek a n je ................................................ 971Cevi za ulazno/izlazne operacije izm edu z a d a ta k a .................................. 976

    Uzajamna b lo k ad a ......................978Nove komponente biblioteke . .983

    C ountD ovvnLatch - bravasa o d b ro ja v a n je m ................................ 983C yclicB arrie r..........................................986D eIayQ ueue............................................988P rio rity B lo c k in g Q u eu e .....................991K ontroler staklenika napravljenpom ou S ched u led E x ecu to ra ......... 994S e m a fo r ...................................................997E x c h a n g e r............................................1001

    S i m u la c i j a ..........................................1003Sim ulacija alterskog slubenika . . 1003Sim ulacija re s to ra n a ......................... 1008Raspodela p o s la .................................. 1013

    O p tim iz a c i ja p e r f o r m a n s i . . . .1018 Poreenje tehnologija uzajam noiskljuivih brava (m u te x a ) ..............1018K ontejneri bez z ak ljuavan ja ......... 1027O ptim istiko zak lju av an je ............1034R eadW riteL ock .................................. 1036

    A k tiv n i o b j e k t i ............................... 1039

    S a e ta k ................................................. 1042Literatura za dalje usavravanje . . . 1044

    22: Grafika korisnika okruenja 1045

    A pleti........................................... 1047Osnove Svvinga..........................1047

    Alatka za p rikazivanje....................... 1050Pravljenje dugm eta................... 1051I Ivatanje dogadaja ................... 1052Vieredna polja za te k s t...........1054Rasporeivanje elem enata. . . .1056

    Rasporediva B o rd e rL a y o u t......... 1056Rasporediva F lo w L ay o u t.............. 1057Rasporediva G r id L a y o u t .............. 1058Rasporediva G ridB agLavout . . . . 1058A psolutno pozic ion iran je ................ 1059Rasporediva B o x I,ay o u t................ 1059Koji je pristup najbolji?..................... 1059

    Model dogaajagrafike biblioteke Svving.........1059

    Tipovi dogadaja i p rijem n ika .........1060Praenje vi.e d o g a d a ja ..................... 1066

    Primeri Svving komponenata. . 1068D u g m a d ................................................ IO(->9Ik o n ic e ................................................... 1071

  • Sadraj x iii

    Priruni s a v e ti ..................................... 1073Jednoredna polja za t e k s t ................ 1073Ivice..........................................................1075

    Mali program za uredivanje tek sta . . 1076Polja za p o tv rd u ...................................1077R ad io -dugm ad ..................................... 1078

    Kom hinovane liste(padajue liste)..................................... 1080

    Grafike liste..........................................1081O kno s jez ic im a ................................ 1083O kviri za p o r u k e ................................ 1083M en iji...................................! ................1085

    Iskaui m en iji..................................... 1091C r ta n je ...................................................1092

    O kviri za d i ja lo g .................................1095Dijalozi za rad s da to tekam a............1099

    HTM I. u kom ponentam abiblioteke Svving...................................1101Klizai i linije n ap redovan ja ............1102

    Biranje izgleda i p o n aan ja .............. 1103Stabla, tabele i ip b o a rd ...................1105

    J N L P i Jav a W e b S t a r t ................. 1 1 0 5

    Paralelno izvravanje i Svving. .1110D ugotrajni z a d a c i .............................. 1111Vizuelno vienitno program iranje ..1 1 1 8

    Vizuelno programiranje i zrna Ja v e ................................. 1120

    ta je z rn o ? ............................................ 1121Ispitivanje zrna

    klasom I n t r o s p e c to r ....................... 1123N aprednije z rn o ...................................1128

    Zrna J.ne i s in h ro n iza c ija ................ 1131Pakovanje z rn a ..................................... 1135

    Sloenija podrka za z r n a ................ 1137V'ie o z rn im a ....................................... 1137

    A l t e r n a t iv e za S v v in g .................... 1 137

    P r a v l j e n j e F la s h VVeb k l i j e n a t a

    p o n i o u F l e x a .................................. 11 3 8Zdravo, h lc x ..........................................1139Prevodenje M X M l.-a......................... 1 140

    MXML i A c tio n S crip t....................... 1141K ontejneri i k o n tro le ......................... 1141

    Hfekti i s tilo v i....................................... I 143l )ogada ji..................................... : . . . . 1 144

    Povezivanje ,s lavom ............................I 144M odeli podataka i povezivanjep o d a tak a .................................................1147

    Izgradnja i p rim en a ............................1 148

    I z r a d a SVVT a p l i k a c i j a ..................1150Instaliranje S W T -a ............................1150Zdravo, S W T ....................................... 1150Izbegavanje re d u n d an tn o sti............1153M en iji..................................................... 1155O kna s karticam a, dugm adi d o g a a ji..............................................1156G ra fik a ...................................................1160Paralelno izvravanje u SW T-u . . . 1162Poredenje SWT-a i Svvinga..............1164

    S a e t a k ......................................................1164R es u rs i.................................................. 1165

    A: Dodaci 1166Dodaci koji se mogupreuzeti sa Interneta................. 1166Misliti na jeziku C:osnova za J a v u .......................... 1166Seminar Thinking in Java . . . . 1166 CD sa seminaromHands-On Java.......................... 1167Seminar Thinking in O bjects.. 1167 Thinking in Enterprise fava.. .1167 Thinking in Patterns(vvith Java)...................................1168Seminar Thinking in P atterns.. 1168 Konsultacije i revizije dizajna.. 1169

    B: Resursi 1170Softver......................................... 1170Programi za ureivanje teksta i alatke za pravljenjeaplikacija.....................................1170K n jig e ......................................... 1171

    Analiza i projektovanje................ 1171Jezik Python............................... 1173Spisak rnojih knjiga.......... ......... 1174

    Spisak termina korienih u knjizi 1175

    Indeks 1177

  • PredgovorNa poctku satn priao Javi kao jojednom programskom jeziku, to ona umnogome ijeste.

    A l i, k a k o j e v r e m e o d m i c a l o I St o s a m je v i Se p r o u a v a o , p o C e o s a m d a u v i a m d a

    je osnovna namena Jave drugaija od namene svih drugih jezika koje sam sretao.Programiranje je snalaenje u sloenosti: sloenost problema koji elite da reite dodaje

    se na sloenost raunara na kome se problem reava. Zbog ove sloenosti veina naih pro- gramskih projekata propadne.- Pa ipak, za gotovo nijedan programski jezik za koji znam nije odlueno da bi njegov glavni cilj trebalo da bude savladavanje sloenosti razvoja i or- avanja program a.1 Naravno, mnoge odluke pri stvaranju programskih jezika donete su sa sloenou na umu, ali u nekom trenutku uvek bi se nale neke druge stvari za koje se sma- tralo da su neophodne u meavini. Te druge stvari neizbeno prouzrokuju da programer koji koristi dati jezik na kraju udari glavom o zid. Na primer, C++ je m orao da bude kom- patibilan sa starijim jezikom C (da bi se omoguio lak prelazak C programerima), a pri tom i efikasan. I jedno i drugo su veoma korisni ciljevi i umnogome zasluni za uspeh je- zika C++, ali takoe unose dodatnu sloenost zbog koje neki projekti ne bivaju zavreni (naravno, moete kriviti programere i upravu, ali, ako jezik moe da pomogne tako to e otkrivati vae greke, zato to ne bi i radio). Evo jo jednog primera. Visual Basic (VB) je bio vezan za BASIC, koji ba nije bio proiriv jezik, tako da su sva proirenja nagomilana u VB-u proizvela zaista zastraujuu sintaksu koja se veoma teko odrava. Perl je vertikalno kompatibilan sa Avvkom, Sedom, Grepom i drugim Unixovim alatima koje je trebalo da zameni, a posledica je bila da je esto optuivan kako proizvodi ,,kod samo za pisanje" (tj. posle nekoliko meseci ne moete ga vie itati). S druge strane, pri stvaranju jezika kao to su C++, VB, Perl i Smalltalk, deo napora je usmeren na reavanje problema sloenosti, pa oni veoma uspeno izlaze na kraj sa odreenom vrstom problema.

    Dok sam uio Javu, ini mi se da je na mene najvie uticalo to to je Sun meu svojim ciljevima pri projektovanju imao i princip smanjenja sloenosti zaprograrnera. Kao da su rekli: Vano nam je da ubrzamo i pojednostavimo pravljenje robusnog koda. U ranim danima, ovaj princip je rezultovao kodom koji se nije brzo izvravao (iako se to s vreme- nom popravilo), ali je zaista zadivljujue skratio vreme potrebno za pisanje programa- za izradu programa na lavi potrebno je upola manje vremena nego za pravijenje odgo- varajueg C++ programa. Ovaj rezultat sam po sebi moe da utedi mnogo vremena i novca, ali lava se tu ne zaustavlja. Ona nastavlja da pakuje sve vane i sloene zadatke, kao to su vienitni rad i mreno programiranje, u svojstva jezika ili bibliotcke koji pojedno- stavljuju te zadatke. Najzad, latila se nekih zaista veoma sloenih problem a kakvi su me- duplattonnsko programiranje, dinamika promena koda, ak i pitanja zatite od kojih se svaki na vaoj lestviei sloenosti moe svrstati od prepreka'1 do potpuno nemogue". Stoga, uprkos problemima s performansama koje smo susreli, Java silno obeava: moe od nas da napravi znatno produktivnije programere.

    Misiim da je programski jc/ik lvthon najblii t o m cilju. Ioglodajte ivw w .P ython.org

  • 2 Misliti na Javi

    Java na sve naine poveava opseg komunikacije tneu Ijudima: stvaranjem programa, timskim radom na stvaranju programa, izgradnjom korisnikog okruenja kao veze iz- meu programa i l

  • Predgovor 3

    etvrto izdanjeZadovoljstvo pisanja novog izdanja knjige donosi injenica se stvari mogu uraditi kako treba, u skladu sa onim to sam saznao od izlaska poslednjeg izdanja. esto su ti uvidi tipa Kada ne dobije ono to si hteo, dobije pouku" a za mene je to prilika da popravim ono to je pogreno ili prosto zamorno. fednako tako, pisanje novog izdanja dovodi do fa- scinantnih novih zamisli, a stid zbog pogreaka mnogo je manji od uivanja u otkriu i mogunosti da se zamisli izraze bolje nego pre.

    Tu je i izazov da knjigu napiem tako da i vlasnici prethodnih izdanja poele da je ku- pe. To me tera da poboijavam,preraujem i premetam sve to mogu da bi knjiga postala novo i vredno iskustvo za posveene itaoce.

    IzmeneU ovom izdanju nema CD-a. Osnovni deo tog CD-a, multimedijski seminar Thinking in C (koji je za MindVievv napravio Chuck Allison), sada se moe preuzeti u obliku Flash prezentacije. Polaznici tog seminara koji nedovoljno poznaju sintaksu C-a obuavaju se da ovladaju materijalom iz ove knjige. Iako dva poglavlja ove knjige daju pristojan uvod u sintaksu, ona moda nee biti dovoljna osobama bez adekvatnog predznanja, a prezen- tacija Thinking in C upravo njima pomae da dostignu potreban nivo.

    Poglavlje Paralelno izvravanje(ranijeVienitno izvravanje11) potpuno je preraeno da bi odraziio velike izmene u odgovarajuim bibliotekama Jave SE5, ali jo uvek prua temelj za osnovne koncepte paralelnog izvravanja. Bez tog jezgra, teko ete razumeti sioenije oblasti paralelnog izvravanja. Mnogo sam meseci radio na tome, uronjen u taj drugi para- lelan svet, i na kraju je ispalo da to poglavlje daje ne samo osnovu, nego i naprednije uvide.

    Znaajnim novim mogunostima Jave SE5 posveena su nova poglavlja, a ostale su utkane u izmene postojeeg materijala. Poto ja neprestano prouavam projektne obra- sce, povean je i njihov broj u knjizi.

    U knjizi je biio mnogo premetanja, u dobroj meri nadahnutih predavakom praksom i sa/.nanjem da bi se moje poimanje onoga to treba da stane u jedno poglavlje moglo raz- borito kritikovati. I5io sam sklon nepromiljenom verovanju da tema mora biti dovoljno velika" kako bi zasluila sopstveno poglavlje. Ali, naroito tokom predavanja projektnih obrazaca, uvideo sam da polaznici seminara najbolje shvataju kada uvodim jedan po je- dan obrazac i odmah uradim odgovarajuu vebu, ak i ako zbog toga tek nakratko go- vorim. (Otkrio sam da je taj tempo prijatniji i za mene kao predavaa.) Zato sam u ovoj verziji knjige pokuao da poelim poglavlja na teme i da ne brinem koliko su duga. ini m i se da je tako bolje.

    Uvideo sani i kolika je vanost testiranja programa. Ukoliko nemate ugraen sistem za testiranje, u kojem se testiranjeobavlja svaki put kada generiete program, ne moete znati koliko je va program pouzdan. Da bih izbegao tu nesigurnost, napravio sam sistem za te- stiranje koji prikazuje i vrednuje rezultate svakog programa. (Sistem je napisan na Pvtho- nu; nai ete ga u kodu ove knjige koji se moe preuzeti na lokaciji www.MindView.net.) Testiranje uopte razmotreno je u dodatku objavljenom na adresi http://MindView.net/ Books/Bctterjavn; tu su objanjene osnovne vetine kojima bi, po mom miljenju, svi pro- grameri trebalo da vladaju.

  • 4 Misliti na Javi

    Pored toga, proeljao sam sve prim ere u knjizi i zapitao se: Zato sam to uradio ba ovako?" U veini sluajeva neto sam izmenio i poboljao, da bi prim eri bili dosledniji i da bih pokazao ono to smatram najboljom praksom u pisanju Java koda (koliko se to moe u tekstu uvodnog nivoa). Dizajn i realizacija mnogih postojeih primera, znaajno su iz- menjeni. Uklonjeni su primeri koji su izgubili smisao i dodati novi.

    itaoci su imali zaista divne komentare na prva tri izdanja ove knjige to mi je bilo veoma drago. Tu i tamo, poneko bi imao i prim edbu i iz nekog razloga, periodino se ja- vljala ista primedba knjiga je preobimna". Po meni, ako itaocu smeta samo obim dela, to i nije tako strano (prisetimo se prim edbe austrijskog cara o Mocartovom delu: Pre- vie nota!, iako se ja ni na koji nain ne poredim s M ocartom). Mogu samo da pretpo- stavim kako takvu primedbu upuuje onaj ko e se tek upoznati sa irinom Jave i ko nije video ostale knjige o ovom jeziku. Ipak, pokuao sam da u ovom izdanju skratim delove koji su postali nepotrebni ili barem ne previe znaajni. Po praviiu, pokuao sam da uklo- nim sve to vie nije potrebno, ubacim izmene i poboljam sve to sam mogao. Mislim da sam to mogao slobodno da uradim , jer je originalni materijal i dalje na Internetu (na adresi www.MindView.net), u obliku prva tri izdanja koje se mogu besplatno preuzeti, i dodataka za ovu knjigu.

    Iskreno se izvinjavam svima koji jo uvek ne mogu da podnesu veliinu ove knjige. Ve- rovali ili ne, naporno sam radio da bih je smanjio.

    Napomena o dizajnu koricaKorice knjige Misliti na Javi inspirisala je amerika varijanta pokreta umetnost i zanatstvo (American Art & Crafts Movement) koji se javio poetkom 20. veka i dostigao zenit iz- meu 1900. i 1920. Nastao je u Engleskoj kao reakcija na mainsku proizvodnju, indu- strijsku revoluiu i veoma izraen dekorativni stil viktorijanskog doba. Pokret se zalagao za umeren dizajn i prirodne forme koie je promovisao umetniki pravac art nuvo (fr. l'art nouveau). Isticana je vanost umetnika kao pojedinca, a nije odbacivano korienje mo- dernih alata. Postoje velike slinosti s dananjom situacijom: prelazak u novi vek, napre- dak od korena raunarske revolucije do neega plemenitijeg i znaajnijeg za pojedinca, isticanje vetine pisanja soltvera umesto iste proizvodnje koda.

    Javu vidim kao pokuaj uzdizanja program era iznad nivoa tehniara operativnog si- stema, u pravcu softverskog majstora".

    I autor i dizajner korica (koji su prijatelji od detinjstva) nalaze inspiraciju u ovom po- kretu i obojica su okrueni nametajem, lampama i drugim predmetima koji ili potiu iz tog perioda, ili su njime inspirisani.

    T3rugi detalj na ovim koricama je kutija za prikupljanje prirodnjakih eksponata - u ovom sluaju insekata. Ti insekti su objekti stavljeni u kutije kao objekte. Same kutije su stavljene u objekat ,,korica, to ilustruje osnovni koncept kombinovanja u objektno ori- jentisanom programiranju. Programeru se lako namee asocijacija na ,,bubice; bubice su

    Vecina p rim era je p revedena , pa je inoguce da su se p u tk ra le i greke. U koliko uoc ite greku , m o lim o vas da poaljete p o ru k u na rctlakcijci@ tnikrokiijiga.co.yit. O rig in a ln e verzije svih p rim e ra naci cete na w w w .in iiic iv icw inc.com /ril4 /C ociclnstritc tio iis.litiiil.

  • Predgovor 5

    ovde uhvaene i, po svoj prilici, ubijene u tegli za uzorke i smetene u male izlobene ku- tije: sve ovo nagovetava Javinu sposobnost da pronalazi, prikazuje i obuzdava bubice (to je zbilja jedan od njenih najjaih aduta).

    Za ovo izdanje naslikao sam akvarel prikazan na koricama, ispod stilizovane kutije.

    ZahvalnicePrvo, hvala saradnicima koji su radili sa m nom na seminaru, u konsultacijama i pri ost- varivanju nastavnih projekata. To su: Dave Bartlett, Bill Venners, Chuck Allison, Jeremy Meyer i Jamie King. Cenim vae strpljenje, dok i dalje pokuavam da napravim najbolji model za m eusobnu saradnju nezavisnih ljudi kao to smo mi.

    Odnedavno, bez sumnje zaslugom interneta, povezao sam se sa iznenadujue velikim brojem ljudi koji mi pomau u poslu, uglavnom radei u svojim kunim kancelarijama. U prolo vreme, morao bih da iznajmim prilino veliki kancelarijski prostor gde bih sme- stio sve te ljude, ali zahvaljujui Mrei, ekspres poti i telefonu, koristim njihovu pomo bez tih dodatnih trokova. Tokom mojih pokuaja da nauim da se lepo igram sa ostali- ma svi vi ste bili veoma susretljivi, i nadam se da u i dalje bolje raditi svoj posao uz tuu pomo. Paula Steuer je neprocenjiva zato to je preuzela moju ofrlje poslovnu praksu i postavila je na zdrave temelje (hvala Paula, to mi ne da mira kada me mrzi da neto ura- dim). Jonathan Wilcox, Esq. proeljao je strukturu mog preduzea, prevrnuo svaki ka- men ispod kojeg se moda kriju korpioni i naterao nas da proemo kroz postupak pravno valjanogorganizovanja. Hvala ti na staranju i upornosti. Sharlynn Cobaugh je na- pravila od sebe strunjaka za obradu zvuka i postala je bitan deo tima za pravljenje mul- timedijskih kurseva, kao i za reavanje drugih problema. Hvala na upornosti koju pokazuje suoena s nepredvidivim raunarskim problemima. Ljudi iz prake firme Amaio izvukli su me iz neprilika u nekoliko projekata. Daniel Will-Harris me je prvi upoznao s radom preko Interneta, a i glavni je dizajner svih grafikih reenja.

    Tokom mnogih godina, Gerald VVeinberg je putem svojih konferencija i radioriica postao moj nezvanini trener i mentor, na emu mu zahvaljujem.

    Ervin Varga mi je izuzetno mnogo pomogao svojim tehnikim ispravkama 4. izdanja- iako su drugi pomagali u pojedinim poglavljima i primerim a, Ervin je bio osnovni tehniki recenzent cele knjige, a preradio je i vodi s reenjima za 4. izdanje. Ervin je pronaao greke i uneo poboljanja u knjigu koja su nemerljiv doprinos ovom tekstu. Njegova temeljnost i panja koju obraa na pojedinosti zauujue su, i on je najbolji re- cenzent kog sam imao. Hvala ti, Ervine.

    Moj blog na lokaciji www.Artiiiia.coin Bila Vennersa bio je izvor pomoi kada sam traio tua miljenja. Hvala itaocima koji su mi slali komentare na osnovu kojili sam razjasnio pojmove - to su James VVatson, Hovvar Lovatt, Michael Barker i drugi, poseb- no oni koji su pomogli s generikim tipovima.

    Hvala Marku VVelshu na njegovoj stalnoj pomoi.Evan Cofskv mi stalno prua veliku podrku svojim poznavanjem (napamet!) svih

    zamrenih pojedinosti o podeavanju i odravanju Web servera na Linuxu. On se stara da MindVievvov server bude podeen i bezbedan.

  • 6 Misliti na Javi

    Posebno hvala mom novom prijatelju, kafi, koja mi je ulila gotovo neogranien entu- zijazam za ovaj projekat. Kafi Camp4 u gradu Crested Butte u Koloradu bio je stalno sastajalite ljudi koji su dolazili na MindVievvove seminare, a tokom seminarskih odm ora pruao nam je najbolju opskrbu hranom i piem koju sam ikada dobio. Hvala mom drugaru Alu Smithu to ga je stvorio i od njega napravio tako zanimljivo i zabavno mesto. I svim barmenima kafia koji tako veselo toe pie.

    Hvala ljudima u Prentice Hallu na tolerantnosti i ogrom nom strpljenju kojim mi obezbeuju sve to traim.

    Odreene alatke su se pokazale nezamenljivim tokom procesa razvoja programa i ja osetim veliku zahvalnost prema njihovim stvaraocima svaki put kada ih upotrebim. Cyg- win (www.cygwin.com) reio mi je bezbroj problema koje Windows nee/ne moe, svakog dana sam m u sve vie privren (da sam ga samo imao pre 15 godina kada je moj mozak jo bio ,,zalemljen za GNU Emacse). IBM-ov Eclipse (www.eclipse.org) zaista je divan dopri- nos zajedni projektanata softvera, pa oekujem da e i ubudue davati velike rezultate, poto se i dalje razvija. (Od kad je to IBM postao kul? Mora da mi je neto promaklo.) Jet- Brains IntelliJ Idea nastavlja da kri nove kreativne puteve meu razvojnim alatkama.

    Na ovoj knjizi poeo sam da koristim Sparxsystemsov Enterprise Architect i on je brzo postao moja omiljena UML alatka. U raznim prilikama dobro je posluio formater koda Jalopy Marca Hunsickera (www.triemax.com), a Marco je bio veoma susretljiv i konfigu- risao ga prema mojim specifinim potrebama. Katkada je bio koristan i JEdit Slava Pesto- va ( www.jedit.org) sa svojim softverskim dodacima, i to je sasvim dobar editor za poetnike na seminarima.

    1 naravno, ako to nisam ve dovoljno puta rekao na svim moguim mestima, za rea- vanje problem astalnokoristim Pvthon (www.Pytlion.org). On je delo m o g drugara Guida Van Rossuma i grupe uvrnutih genija s kojima sam trao nekoliko divnih dana (Time Pe- tersu, uramio sam mia kojeg si pozajmio i zvanino ga nazvao TimBotMi"). Vi, mom- ci, treba da nadete neko zdravije mesto za ruak. (Takoe, hvala celoj Pvthon zajednici, oni su fenomenalna gomila ljudi.)

    Mnogi su mi slali ispravke i svima sam dunik, ali posebnu zahvalnost zasluuju (za prvo izdanje): Kevin Raulerson (koji je pronaao obilje sjajnih bubica), Bob Resendes (zaista ne- verovatan), (ohn Pinto, Joe Dante, Joe Sharp (sva trojica su bili udesni), David Combs (tnnoge gramatike ispravke i razjanjenja), 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, Da- vid B. Malkovsky, Steve VVilkinson i mnogi drugi. Prot. dr Marc Meurrens uloio je veliki naporda u Evropi objavi i uitii dostupnom elektronsku verziju prvog izdanja knjige.

    Hvala svitna koji su mi pomogli da ponovo napiem primere uz korienje biblioteke Swing (za 2. izanje) i za svu drugu pomo. To su Jon Shvarts, Thomas Kirsch, Rahim Adatia, Rajesh Jain, Ravi Manthena, Banu Rajamani, Jens Brandt, Nitin Shivaram, Mal- colm Davis i svi koji su tni daii podrku.

    U 4. izdanju, Chris Grinstaff je mnogo pomogao tokom razvoja odeljka o SVVT-u, a Sean Neville je za mene napisao prvu verziju odeljka o Flexu.

  • Predgovor 7

    Kad god pomislim da sam najzad sve nauio o program iranju za paraleleno izvra- vanje, otvore se neka nova vrata i pokae se da ima jo planina koje moram prei. Hvala Brianu Goetzu to mi je pomogao da savladam sve prepreke u novoj verziji poglavlja Pa- ralelno izvravanje i to je otkrio (nadam se!) sve greke.

    Nije iznenaenje to mi je poznavanje Delphija pomoglo da razumem Javu, budui da ta dva jezika imaju puno zajednikih koncepata i dizajnerskih reenja. Moji prijatelji koji se bave Delphijem pomogli su mi da proniknem u unutranjost tog sjajnog programskog okruenja. To su Marco Cantu (jo jedan Italijan: da li dobro poznavanje latinskog dopri- nosi sklonosti ka programskim jezicima?), Neil Rubenking (koji se bavio jogom, vegeta- rijanstvom i zenom dok nije-otkrio raunare) i, naravno, Zack Urlocker (prvi direktor projekta Delphi), stari prijatelj s kojim sam proputovao svet. Svi mi smo dunici briljant- nom Andersu Hejlsbergu, koji se i dalje mui sa C#-om (a taj jezik je bio glavni uzor za Javu SE5, u ta ete se uveriti u knjizi).

    Moj pronicljivi prijateij Richard Hale Shaw pruio mi je vrlo korisnu podrku (i Kim takoe). Richard i ja smo proveli vie meseci zajedno, drei seminare, pokuavajui da osmislimo savren metod uenja za polaznike.

    Dizajn knjige, dizajn korica i sliku na koricama uradio je moj priiatelj Daniel Will- Harris, priznati autor i dizajner (www.Will-Harris.com), koji se igrao sa samolepljivim slovima u osnovnoj koli dok je ekao da raunari i stono izavatvo budu otkriveni, i koji se alio na moje gunanje zbog algebarskih problema. Ipak, knjigu sam sloio sam tako da sve greke u slaganju idu na moj raun. Pisao sam u Microsoftovom Wordu XP, a fo- toslog je pripremljen u Adobeovom Acrobatu. Desilo se da sam bio u inostranstvu oba puta kada sam pravio finalnu verziju knjige - prvo izdanje sam slao iz Kejptauna u Junoj Africi, a drugo iz Praga (to je moj doprinos eri elektronike). Tree i etvrto sam poslao iz Creste Butta u Koloradu. Font korien na koricama je ITC Rennie Mackintosh.

    Posebno zahvaljujem svojim uiteljima i svim svojim studentim a (koji su istovremeno i moji uitelji).

    Dok sam radio na ovom izdanju, u krilu mi je esto leala maka Mollv i tako davala svoju toplu, krznenu podrku.

    Listu prijatelja koji su me podravali ine izmedu ostalih i: Patty Gast (izvanredna ma- serka), Andrew Birnstock, Steve Sinofskv, (D Flildebrandt, Tom Keffer, Brian McElhin- ney, Brinklev Barr, Liill Gates iz asopisa Midnight Engineering, Larry Constantine i Lucv Lockvvood, Gene Wang, Dave Mayer, David Intersimone, Chris i Laura Strand, porodica AImquist, Brad Jerbic, Marilvn Cvitanic, Mark Mabry, porodice Robbins, porodice Mo- elter (i McMillan), Michael Wilk, Dave Stoner, porodica Cranston, Larry Fogg, Mike Se- queira, Cary Entsminger, Kevin i Sonda Donovan, Joe Lordi, Dave i Brenda Bartlett, Patti Gast, Blake, Annette i Jade, porodica Rentschler, porodica Sudek, Dick, Patty i Lee Eckel, Lvnn i Todd i njihove porodice. I, naravno, moji mania i tata.

  • Uvodoveku je dao jezik, a jezik je stvorio misao, koja jc mera Univerzuma Osloboeni Pro- metej, eli

    Ljudska bia... sasvim su pod vlau odreenog jezika koji je postao sredstvo izraavanja u nji- hovotn drutvu. U zabludi je ko misli da u prilagodavanju pojedinca stvarnosti jezik ne igra znaajnu ulogu i da je jezik samo sluajno sredstvo reavanja specifinih problema optenja i miljenja. injenica je da je stvarni svet u velikoj meri nesvesno izgraden na osnovu jezikih navika grupe.Status lingvistike kao nauke, Edvard Sapir 1929.

    K AO I BILO KOJI LJUDSKIJEZIK, JAVA OM OGUUJE ISKAZIVANJE POJMOVA. S NARASTANJEM I

    uslonjavanjem problema, ovaj nain izraavanja bie vam znatno laki i fleksibilniji od bilo kojeg drugog, ukoliko bude uspean.

    Ne moete gledati na Javu samo kao na gomilu mogunosti, jer neke mogunosti ne- maju smisla same za sebe. Celinu svih delova moete da 'koristite samo ako razmiijate o projektovanju, a ne o pisanju koda. Da biste razumeli Javu na ovaj nain, morate razumeti i probleme koji se pri tome javljaju, kao i pri programiranju uopte. Ova knjiga razmatra probleme pri programiranju, objanjava zbogega oni predstavljaju probleme i pokazuje postupke kojima ih Java reava. Zato se skup mogunosti koje objanjavam u svakom po- glavlju zasniva na nainu reavanja pojedine vrste problema pom ou Jave. Na taj nain, trudim se da vas dovedem, korak po korak, do take kada Java postaje va maternji jezik.

    Od poetka do kraja, moj stav poiva na tome da vi elite sebi da predoite model koji e vas dovesti do dubokog razumevanja jezika; ako naiete na zagonetku, moi ete da je ubacite u svoj model i pronaete odgovor.

    PredusloviU ovoj knjizi podrazumeva se da koliko-toliko poznajete programiranje: shvatate da je pro- gram skup naredaba, poznajete princip potprograma/tunkcije/makroa, kontrolnih struk- tura kao to je ,,if konstrukcija za petlje kao to je vvhile" itd. Sve ovo ste mogli nauiti na raznim mestima, recimo pri programiranju na nekom makro-jeziku ili pri radu sa alatom kao to je Perl. Bez obzira na to koliko ste u dosadanjem programiranju ovladali osnovnim idejama, moi ete da radite po ovoj knjizi. Naravno, kniiga e biti laka C programerima, i jo vie C++ programerima, ali ne otpisujte sebe ako nemate iskustva u ovim jezicima - samo budite spremni da naporno radite. Takode, uz pomo multimedijalnog seminara Thinking in Ckoji moete preuzeti s Iokacije mvw.MiudView.net, ovladaete u potpunosti osnovama potrebnim za uenje Jave. Kroz knjigu u postepeno uvoditi koncepte objektno orijentisanog programiranja (OOP) i osnovnih Javinih kontrolnih ntehanizama.

    Cesta pozivanja na osobine jezika C i C++ ni.su komentari poznavaoca, ve su pomo programerima da uporede Javu s tim jezicima iz kojih je potekla. Trudiu se da ta po- reenja budu jednostavna i objasniu sveto mislim da ne zna neko ko ne koristi C/C++.

  • Uvod 9

    Uenje JaveOtprilike u isto vreme kada se pojavila moja prva knjiga, Using C++ (Osborne/McGravv- Hill, 1989), poeo sam da predajem taj jezik. Predavanje programskih jezika postala je moja profesija: gledao sam glave koje klimaju, bele poglee i zbunjene izraze u publici i- rom sveta jo od 1987. Kada sam poeo privatno da obuavam manje grupe Ijudi, tokom vebi sam otkrio da mnoga pitanja zbunjuju ak i one koji su se smeili i klimali glavom. Vie godina predsedavao sam na odseku za C++ na Konferenciji za razvoj softvera (ka- snije i na odseku za Javu), i primetio sam kako smo i ja i drugi govornici sldoni da pro- senoj publici serviramo preV ie informacija za kratko vreme. Zbog razliitih nivoa publike i naina na koji sam predstavljao materijal, na kraju bih izgubio deo slualaca. Moda previe traim, ali poto oseam otpor prem a tradicionalnom nainu predavanja (a verujem da veina slualaca takav otpor osea zbog dosade), pokuao sam da uinim da moja predavanja nikome ne budu dosadna.

    Jedno vreme sam pravio dosta raznih prezentacija u relativno kratkom periodu. Tako sam doao u situaciju da uim metodom pokuaja i pogreaka" (to je dobar nain i za projektovanje programa). Na kraju sam iskoristio sve to sam nauio kao predava- i na- pravio kurs koji bih rado drao due vreme. Sada ovaj kurs drim na javnim i privatnim sem inarim a o Javi; to je moj glavni uvodni seminar, koji prua osnovu za naprednije se- minare. O tim seminarima moete saznati vie na adresi www.MindView.net. (Uvodni se- m inar je dostupan i u obliku CD-a Hands on Java. Podaci o njemu su na istoj Web lokaciji.)

    Povratne informacije koje dobijam na svakom seminaru pomau mi da menjam i pre- raujem materijal sve dok nc zakliuim da je podesan kao sredstvo pouavanja. Ovu knji- gu ne ine samo beleke sa seminara: u nju sam pokuao da spakujem to vie informacija i spojio sam ih tako da vas vode od jednog do drugog predmeta. Zamislio sam da ova knji- ga slui usamljenom itaocu koji se bori s novim programskim jezikom.

    CiljeviKao i moja prethodna knjiga, Misliti na jczikit C++, i ova knjiga je pisana u skladu s na- inom na koji Ijudi ue jezik Java. Poglavlje u knjizi zamiljao sam kao jednu dobru lek- ciju na seminaru. Povratne intormacije od slualaca na seminarima pomogle su mi da otkrijem koji su delovi tei i zahtevaju dodatna objanjenja. U oblastima gde sam bio pre- ambiciozan i uvrstio previe novih pojmova odjednom, spoznao sam - kroz proces pri- kaza materijala - da vie novih pojmova zahteva vie objanjavanja, a to lako zbunjuje sluaoca.

    Cilj svakog poglavlja je da savladate jedan pojam, ili manje grupe povezanih pojmova, bez obzira na sve ostalo to se tu pominje. Na taj nain moete da prihvatite svaki eli teorije, u zavisnosti od vaeg dotadanjeg znanja, pre nego to produite dalje.

  • 10 Misliti na Javi

    Ciljevi koje sam hteo da ostvarim u ovoj knjizi jesu:

    1. Da predstavim materijal u jednostavnim koracima, tako da lako savladate svaki koncept pre nego to nastavite. Da paljivo odaberem redosled pojmova koje obja- njavam, tako da ne naiete na neto s im se ranije niste susreli. Naravno, to nije uvek mogue; u takvim situacijama, dat je kratak uvodni opis.

    2. Da koristim to jednostavnije i krae primere. To me ponekad spreava da se uhva- tim u kotac sa ,,stvarnim problemima, ali sam primetio da su poetnici obino sreniji kada mogu da shvate svaki detalj primera, i nisu impresionirani obimom problema koji se reavaju. Takoe postoji ozbiljno ogranienje koliine koda koji moe da se razume u uionici. Oni kojima se to ne dopada, neka ga prihvate kao pedagoki ispravniji pristup.

    3. Da pruim ono to sm atram bitnim za razumevanje jezika, a ne sve to znam. Ve- rujem u hijerarhiju informacija, kao i da postoje injenice koje 95% programera nikada nee imati potrebe da zna, a koje samo zbunjuju i poveavaju sloenost je- zika. Da uzmem prim er iz C-a: ako zapamtite tabelu prioriteta operatora (ja ni- kada nisam), moete da piete efikasan, ali neitljiv kod. Ali ako malo promislite o takvom stilu pisanja, shvatiete da zbunjuje onoga ko ita/odrava kod. Stoga za- boravite na prioritete i koristite zagrade svuda gde stvari nisu potpuno jasne.

    4. Da svaki odeljak bude ovoljno usredsreen, tako da vreme izlaganja i pauza izme- u iziaganja i vebe budu kratki. To sluaoca dri budnim i aktivnim tokom semi- nara, a itaocu prua oseanje da bre ovladava materijom.

    5. Da vam dam vrst temelj, kako biste mogli dobro da razumete teoriju i a sami na- stavite da prouavate Javu.

    Pouavanje na osnovu ove knjigePrvo izdanje ove knjige nastalo je na osnovu jednonedeljnog seminara. Dok je Java bila u povojima, to je bilo dovoljno vremena za savladavanje ovog jezika. Kako je Java rasla i obuhvatala sve vie mogunosti i biblioteka, ja sam tvrdoglavo nastojao da sve to ispre- ajem za sedmicu dana. U jednom trenutku, neki naruilac je od mene zatraio da pre- dajemsamo osnove, i radei to otkrio sam da je sabijanje svega u jednu sedmicu postalo muno i za mene i za polaznike. Java vie nije bila jednostavan" jc/.ik koji se moe ispre- davati za nedelju dana.

    To iskustvo i spoznaja potakli su me da reorganizujem knjigu, koja je sada napisana tako da moe da se ispredaje za dve sedmice na seminaru ili dva semestra na fakultetu. Uvodni deo se zavrava s poglavljem Obrada greakn pomou izuzetnkn, enut biste mogli da dodate uvod u JDBC, servlete i serverske Java stranice. To sainjava osnovni kurs i jez- gro CD-a Hands-On Javn. Ostatak knjige obuhvata kurs srednjeg nivoa i nalazi se na CD- u Intermedinte Thinking in Javu. Oba CD-a moete kupiti na www.M ind\ricw.nct.

    Ukoliko vam trebaju informacije o dodatnom materijalu za predavae, obratite se Prentice-Hallu na lokaciji www.prenludlprojessiouul.coin.

  • Uvod 11

    Dokumentacija na WebuJezik Java i njegove biblioteke iz Sun Microsystemsa (besplatno se preuzimaju s Weba) imaju okumentaciju u elektronskom obliku, kojoj moete pristupati koristei ita We- ba; gotovo svaka druga nezavisna distribucija Jave ima takav ili slian sistem dokum enta- cije. U veini knjiga o Javi kopira se taj sistem. Stoga takvu dokumentaciju ili ve imate, ili je moete preuzeti s Weba, i ukoliko to zaista nije neophodno, u ovoj knjizi je neemo ponavljati. Obino mnogo bre moete da naete opis neke klase pomou itaa Weba, nego da ga traite po knjizi (a dokumentacija na Webu je verovatno aurnija). Jednostav- no u vas uputiti nadokum entaciju JDK-a. Ovaknjiga e obezbediti dodatne opise klasa samo kada je neophodno dopuniti dokumentaciju da biste shvatili odredeni primer.

    VebePrimetio sam da jednostavne vebe pomau studentim a da shvate seminarsko gradivo, pa dajem nekoliko vebi na kraju svakog poglavlja.

    Vei broj vebi moe relativno lako i u razum nom roku da se uradi u uionici, pod nadzorom instruktora koji proverava da li su svi studenti usvojili izloenu materiju. Neke vebe su malo izazovnije, a li nijedna nije nereiva.

    Reenja izabranih vebi nalaze se u elektronskom dokum entu pod imenom Thc Thin- king iu java Annotatcd Solution Guide, koji se moe kupiti na lokaciji www.Mind- Vicw.com.

    Javini temeljiSa ovom knjigom dobijate i besplatan multimedijalni seminar koji moete preuzeti sa www.MindView.LOin. To je seminar T h in k in g in C, koji vas uvodi u sintaksu, operatore i funkcije jezika C na osnovu kojih je Java napravljena. U prethodnim izdanjima ove knjige na engleskom, to se nalazilo na CD-u Foundations for Java, ali sada se moe besplatno preuzeti.

    Prvobitno sam od Chucka Allisona naruio da napravi Thinking in C kao nezavisan proi/.vod, aii sam odluio da ga priloim uz drugo izdanje knjige Thinkingin C++ i drugo i tree izdanje knjige Thinking in Java, poto su mi na seminar stalno dolazili Ijudi bez do- voljnog poznavanja osnovne sintakse C-a. Izgleda da takva osoba misli: ,,Ja sam pametan program er i neu da uim C, nego C++ ili Javu, pa u C preskoiti i odmah prei na C++/ Javu. Po dolasku na seminar, ljui polako shvataju da sam imao veoma dobar razlog to sam poznavanje C-a proglasio za preduslov za pohaanje.

    Tehnologije se menjaju, i bilo je bolje preraditi Thinking in C u Flash prezentaciju koja se moe preuzeti sa Interneta, nego prilagati ga na CD-u. Poto je taj seminar na Inter- netu, svi mogu dobro da se pripreme prc nego to dou na moj seminar.

    Seminar Thinking in C i ovoj knjizi pribavlja veu publiku. Iako njena poglavlja Ope- ralori i Kontrolisanjc izvravanja obuhvataju osnove Jave koje potiu iz C-a, mreni semi- nar postepenije uvodi itaoca, a za njega je potrebno jo manje programerskog predznanja nego za knjigu.

  • 12 Misliti na Javi

    Izvorni kodKompletan izvorni kod iz ove knjige dostupan je kao slobodan softver zatien autorskim pravom, u jednom paketu, na adresi www.MindView.net. Ovo je zvanina Web lokacija za distribuciju koda i elektronskog izdanja knjige, pa moete biti sigurni da ete tu uvek nai najnoviju verziju. Kod moete deliti i koristiti u uionicama i u druge obrazovne namene.

    Osnovni cilj zadravanja autorskog prava jeste da se poreklo koda ispravno navede i da se sprei objavljivanje koda u tam panim medijima bez dozvole. (Ukoliko je poreklo koda ispravno navedeno, primeri iz knjige mogu se navoditi u veini medija.)

    U svakoj datoteci sa izvornim kodom nai ete sledeu napom enu o autorskim pravi- ma (obino na engleskom):

    //:! AutorskaPrava.txt

    Ovaj raunarski izvorni kod zatien je autorskim pravima (c)2006 MindView,

    Inc.

    Sva prava zadrana.

    Dozvoljava se besplatna upotreba, kopiranje, prepravljanje i distribuiranje

    ovog raunarskog izvornog koda (Izvorni kod) i njegove dokumentacije, u dole

    navedene svrhe i bez pismenog odobrenja, ukoliko gornju poruku o autorskim

    pravima, ovaj i sledeih pet numerisanih pasusa ne uklonite ni iz jedne

    njegove kopije.

    1. Dozvoljava se prevodenje Izvornog koda. Preveden Izvorni kod smete da

    ukljuite u privatne i komercijalne softverske programe, ali samo u izvrnom

    formatu.

    2. Neizmenjen Izvorni kod smete da upotrebljavate za potrebe nastave i u materijalima za prezentaciju, ukoliko navedete da je potekao iz knjige

    ,,Mi sl i ti na J a v i " .

    3. Dozvolu za korienje Izvornog koda u tampanim medijima moete pribaviti

    ako se obratite na adresu:

    MindView, Inc. 5343 Valle Vista La Mesa, California 91941 [email protected]

    4. MindView, Inc. je zatitio autorska prava Izvornog koda i dokumentacije.

    Izvorni kod je dostupan u obliku u kojem je dat i uz njega se ne dobija

    nikakva eksplicitna ili implicitna garancija, ukljuujui garanciju o pro-

    daji, pogodnosti za odreenu upotrebu ili nekrenju neijih prava. MindView,

    Inc. ne jami da e bilo koji program koji sadri Izvorni kod raditi bez

    prekida ili greaka. MindView, Inc. ne tvrdi da je Izvorni kod ili bilo koji

    softver koji ga obuhvata podesan za bilo koju namenu. Celokupan rizik, u vezi

    s kvalitetom i performansama ovog softvera, snosi sam korisnik Izvornog koda.

    Korisnik Izvornog koda razume da je Izvorni kod napravljen radi istraivanja i nastave, pa mu se savetuje da se ni u koju svrhu niti iz bilo kojeg razloga ne

    oslanja iskljuivo na Izvorni kod, niti na bilo koji program koji ga sad r i .

    Ako se ispostavi da je Izvorni kod neispravan, sam korisnik snosi sve tro-

    kove servisiranja, opravke ili ispravki.

  • Uvod 13

    5. NI U JEDNOM SLUAJU NI MINDVIEW, INC. NITI NJE60V IZDAVA NEE BITI

    ODGOVORNI BILO KOME, BEZ OBZIRA NA BILO KAKVU PRAVNU TEORIJU, ZA DIREKTNU,

    INDIREKTNU, POSEBNU, POSLEDINU ILI SLUAJNU TETU, ZA BILO KAKAV PREKID

    POSLOVANJA, GUBITAK PROFITA ILI POSLOVNIH PODATAKA, ILI BILO KAKAV DRUGI

    NOVANI GUBITAK ODNOSNO TELESNU OZLEDU KOJE SU IZAZVANE UPOTREBOM OVOG IZVOR- NOG KODA I NJEGOVE DOKUMENTACIJE ILI SU POSLEDICA NEMOGUNOSTI UPOTREBE BILO

    KOJEG REZULTUJUEG PROGRAMA, AK I KADA BI MINDVIEW, INC. ILI NJEGOV IZDAVA

    BILI UPOZORENI NA MOGUNOST TAKVIH TETA. MINDVIEW, INC. POSEBNO NE DAJE

    NIKAKVU GARANCIJU, UKLJUUJUI I IMPLICITNU GARANCIJU 0 PRODAJI I POGODNOSTI

    ZA ODREENU UPOTREBU ALI NE OGRANIAVAJUI SE NA TO. IZVORNI KOD JE DOSTUPAN U

    OBLIKU U KOJEM JE DAT I UZ NJEGA SE NE DOBIJA NIKAKVA USLUGA OD MINDVIEW, INC,

    KOJI NEMA NITI PREUZIMA BILO KAKVE OBAVEZE ZA PRUANJE USLUGA, PODRKE,

    AURIRANJA, POBOLJANJA ILI MODIFIKACIJA.

    Molim, imajte u vidu da MindView, Inc. odrava Web lokaciju http://www.Mind-

    View.net (i njene zvanine duplikate). Jedino se odatle mogu preuzeti elek-

    tronske kopije Izvornog koda, koje se pod prethodno navedenim uslovima mogu

    preuzeti besplatno.

    Ako mislite da ste u Izvornom kodu pronali greku, molim vas da ispravku

    poaljete preko sistema povratnih informacija koji moete pronai na lokaciji

    www.MindView.com.

    / / / : -

    Kod moete koristiti u svojim nastavnim projektima (ukljuujui i vae materijale za prezentaciju), dokle god zadravate poruku o autorskim pravima koja se pojavljuje u sva- koj izvornoj datoteci.

    Nain pisanja korien u knjiziU ovoj knjizi identifikatori (metode, promenljive i imena klasa) ispisani su polucrno. Ve- ina rezervisanih rei takode je napisana polucrno, osim onih koje se toliko koriste da bi njihovo naglaavanje postalo zamorno.

    Za pisanje prim era u knjizi koristim odreden stil. On odgovara stilu koji se koristi u kompaniji Sun za praktino sve program e koje moete nai na njihovoj Web Iokaciji (po- gledajte http://jiiva.siin.coin/docs/codcconr/indcx.html) i koji podrava veina razvojnih okruenja za favu. Ako ste itali moje druge radove, primetili ste takoe da se stil pisanja programa koji koristi Sun poudara s mojim stilom. Ovo mi je drago, iako ja s tim e (ko- liko znam) nisam imao nikakve veze. Pitanje stila moe biti predm et vieasovnih raspra- va, pa u samo rei da kroz moje primere ne elim da nameem pravilan stil, nego imam Iine razloge za korienje takvog stila. Poto je Java programski jezik slobodne forme, moete da koristite bilo koji stil koji vam ogovara. Da biste formatiranje doterali kako vam odgovara i reili pitanje stila, moete se posluiti alatkom kao to je Jalopy (www.trie- max.com) dok sam pisao knjigu, koristio sam je.

    Programi u ovoj knjizi ubaeni su u tekst direktno iz datoteka koje su prevoene i ispitivane na jednom automatskom sistemu. Stoga bi izvorni kod tampan u knjizi tre- balo da radi bez greaka pri prevoenju.

  • 14 Misliti na Javi

    Ova knjiga se zasniva na Javi SE5/6, i na njoj je i testirana. Ako hoete da nauite netoo ranijim varijantama jezika, a to nije obuhvaeno ovim izdanjem, prvo, drugo i tree iz- danje knjige (na engleskom) moete besplatno preuzeti s lokacije www.MindView.net.

    GrekeBez obzira na to koliko trikova pisac koristi da otkrije greke, neke se uvek provuku, a nov italac ih esto odmah primeti. Ako otkrijete bilo ta to smatrate grekom, molim vas da iskoristite hipervezu za ovu knjigu na lokaciji www.MindView.net, prijavite greku i poaljete predlog za ispravku. Ceniu vau pomo.

  • Upoznavanje sa objektimaPrirodu parceliemo i razvrstavamo u koncepte kojima pripisujemo znaenja, uglavnom zato to se drimo dogovora koji vai u naoj jezikoj zajednici i kodifikovan je u obrascima naeg jczika ... uoptc nc moetnogovoriti ukoliko se nepridravamo organizacije i klasifika- cije podataka koje taj dogovorpropisuje. Benjamin Lee W horf (1897-1941)

    R a u n a r s k a REVOLUCIj'A je n a s t a l a u m a S in i . N a S i p r o g r a m s k i j e z i c i s t o g a t e e d a

    izgledaju kao ta maina.Ali raunari nisu toliko maine koliko pojaala uma (tokovi za um kako Steve Jobs

    voli da kae) i drugi nain izraavanja. Zbog toga ti alati sve manje lie na maine, a sve vie na delove naeg uma, i na druge oblike izraavanja, kakvi su pisanje, slikanje, vajanje, animiranje i snimanje filmova. Objektno orijentisano program iranje (OOP) deo je ovog pomeranja ka korienju raunara kao sredstva izraavanja.

    Ovo poglavlje vas uvodi u osnovne koncepte OOP-a, ukljuivi i pregled metoda raz- voja, uz pretpostavku da imate iskustva s programiranjem, iako to ne m ora biti na jeziku C. Ako mislite da treba da se jo pripremate za program iranje pre nego to se uhvatite u kotac sa ovom knjigom, prouite multimedijski seminar Thinking in C, koji moete preuzeti na adresi mvw.MitidView.net.

    Ovo pogtavlje je i podloga i dodatni materijal. Mnogi se ne oseaju prijatno u svetu ol>iektno orijentisanog programiranja ako pre toga ne razumeju celinu. Stoga je ovde dat bogat pregled koncepata OOP-a. Drugi ne mogu da shvate glavne principe dok prvo ne upoznaju barem neke mehanizme. Ako pripadate toj grupi i etjni ste da otkrijete speci- finosti jezika, slobodno preskoite ovo poglavlje - u ovom trenutku to vas nee spreiti da piete programe ili nauite jezik. Meutim, poeleete da se vratite na ovaj deo knjige da biste dopunili svoje znanje i shvatili zato su objekti vani i kako da ih koristite pri pisanju programa.

    Razvoj apstrakcijeSvi programski jezici obezbeuju apstrakoiju. Moglo bi se raspravljati o tome da li je slo- enost problema koje ste u stanju da reite direktno povezana s vrstom i kvalitetom ap- strakcije. Pod vrstom" mislim na to ta apstrahujete. Mainski jezik je mala apstrakcija maine na kojoj se programi izvravaju. Mnogi takozvani ,,proceduralni jezici koji su sle- dili mainski (kao FORTRAN, RASIC i C) bili su apstrakcija mainskog jezika. Ovi jezici su veliki napredak u odnosu na mainski jezik, ali njihova prim arna apstrakcija ipak za- hteva od vas da razmiljate iz ugla strukture raunara umesto iz ugla probiema koji rea- vate. Programer mora da uspostavi vezu izmedu modela tnaine (u prostoru reenja koji predstavlja mesto gde realizujete reenje problema, na primer, u raunaru) i modela problema koji se reava (u prostoru problema" koji predstavlja mesto gde problem po- stoji, recimo poslovanje). Napor koji iziskuje ovo preslikavanje i injenica da je ono ne- bitno za programski jezik proizvode programe koji se teko piu i ije je odravanje skupo, a kao sporedni elekat nastaje celokupna industrija programskih metoda".

  • 1 6 Misliti na Javi

    Alternativa modelovanju maine je modelovanje problema koji pokuavate da reite. Rani jezici kao LISP i APL odraavali su pojedine predstave o svetu (Svi problemi se na kraju svode na liste ili Svi problem i su algoritamske prirode). Prolog prebacuje sve probleme u korake odluivanja. Stvoreni su jezici zasnovani na ogranienom programi- ranju i program iranju iskljuivo m anipulacijom grafikim simbolima (to se pokazalo kao previe restriktivno). Svaki ovaj pristup moe biti dobro reenje za odreenu klasu problema kojoj su namenjeni, ali kada istupite iz tog domena, oni postaju nezgrapni.

    Objektno orijentisani pristup ide korak dalje, obezbeujui alate pomou kojih progra- mer predstavlja elemente u prostoru problema. Ovo predstavljanje u principu ne ogra- niava programera na jednu vrstu problema. Elemente u prostoru problema i njihovo predstavljanje u prostoru reenja nazivamo ,,objekti. (Trebae vam i drugi objekti koji ne- maju svoj par u prostoru problema.) Ideja je da se programu dozvoli da se prilagodi nera- zumljivom jeziku problema tako to e se dodati novi tipovi objekata, te kada itate kod koji opisuje reenje, u isto vreme itate i rei koje izraavaju problem. Ovo je mnogo flek- sibilnija i snanija apstrakcija od prethodne.1 Stoga OOP dozvoljava da opiete problem iz ugla problema, umesto iz ugla raunara na kome e se to reenje izvravati. lo uvek postoji povratna veza ka raunaru: svaki objekat izgleda posve kao mali raunar - on ima unu- tranje stanje i operacije koje moete zahtevati da izvri. Meutim, ovo i nije tako loa ana- logija sa objektima u stvarnom svetu - svi imaju svoje karakteristike i osobeno se ponaaju.

    AJan Kay je naveo pet osnovnih obeleja Smalltalka, prvog uspenog objektno orijen- tisanog jezika, i jednog od jezika na kome je Java zasnovana. Ta obeleja predstavljaju ist i neiskvaren pristup objektno orijentisanom programiranju.

    1. Sve je objekat. Posmatrajte objekat kao poboljanu promenljivu; on uva podatke, ali moete i da mu postavite zahteve koje ispunjava vrei operacije nad tim po- dacima. Teoretski, moete uzeti bilo koju idejnu kom ponentu problema koji rea- vate (pse, zgrade, usluge itd.) i predstaviti je kao objekat u svom programu.

    2. Program je skup objekata koji jedni d rugim a porukam a saoptavaju ta da rade. Da biste uputili zahtev objektu, vi aljete poruku tom objektu. Konkretnije, mo- ete zamisliti da je poruka zahtev da se pozove metoda koja pripada odreenom objektu.

    3. Svaki objekat ima svoj m em orijski p rosto r koji se sastoji od drugih objekata.Drugaije reeno, vi stvarate novu vrstu objekta pravei paket koji sadri neke po- stojee objekte. Stoga moete da uslonjavate program koji e biti skriven iza jed- nostavnih objekata.

    4. Svaki objekat ima tip. Struno reeno, svaki objekat je instanca (primcrak) neke klase, pri emu su ,,klasa i ,,tip sinonimi. Najvanija odlika klase glasi: Koje poru- ke joj moete poslati?

    N eki a u to ri p ro g ra m sk ih jezika su sm atra li da o b je k tn o o rijen tisa n o p ro g ra n iira n jc n ije do v o ljn o da o m o g u i lako reavan je svih p ro g ram sk ih p ro b le m a , pa su pod ravaliu k o m b in o v a n je razli itih p ri- s tu p a k roz m u ltis ta n a rd m ' p ro g ram sk e jezike. Pog ledajte M iiltipiiratligm lrogrtunm ing in Lctlti, Ti- m o th y B udd (A ddison-W esley 1995).

  • Poglavlje !: Upoznavanje sa objektima 17

    5. Svi objekti odreenog tipa mogu da primaju iste poruke. Ovo je, u stvari, vie- znana izjava, kao to ete kasnije videti. Kako je objekat tipa ,,krug istovremeno objekat tipa ,,oblik, krug e zasigurno moi da prim a poruke za oblik. To znai da moete da napiete kod koji komunicira sa oblicima i automatski podrava i sve drugo to potpada pod opis oblika. Ova zamenljivost je jedna od najmonijih oso- bina OOP-a.

    Booch daje jo krau definiciju objekta:

    Objekat ima stanje, ponaanje i identitet.

    To znai da objekat moe imati interne podatke (koji definiu njegovo stanje) i metode (koje definiu njegovo ponaanje), i da je svaki objekat jedinstven (razlikuje se od svih drugih objekata) - konkretno, svaki objekat ima jedinstvenu adresu u memoriji.2

    Objekat ima interfejsAristotel je verovatno prvi poeo da paljivo prouava podelu na tipove - govorio je o klasi riba i klasi ptica. Ideja da svi objekti, premda jedinstveni, istovremeno pripadaju klasi objekata sa zajednikim karakteristikama i ponaanjem, direktno je iskoriena u prvom objektno orijentisanom jeziku, Simula-67. Njegova osnovna rezervisana re class uvodi novi tip u program.

    Simula, kao to joj ime govori, projektovana je za razvoj simulacija poput klasinog problem a bankarskog blagajnika". U tom problemu imate vie blagajnika, klijenata, ra- una, transakcija i novanih jedinica - puno ,,objekata. Objekti koji su identini po svemu osim po stanju tokom izvrenja programa, grupisani su uklase objekata" i odatle potie rezervisana re class. Stvaranje apstraktnih tipova podataka (klasa) osnovna je ide- ja u objektno orijentisanom programiranju. Apstraktni tipovi podataka rade gotovo isto kao ugraeni tipovi: moete stvarati promenljive datog tipa (koje se nazivaju objektiili in- stance u terminologiji objektno orijentisanog programiranja) i raditi s tim promenljiva- ma (to se naziva slanje poruka ili zahteva: vi poaljete poruku a objekat sam odredi ta e s njom da uradi). lanovi (elementi) svake klase imaju neke zajednike osobine: svaki ra- un ima saldo, svaki blagajnik moe da primi depozit itd. Istovremeno, svaki lan ima vla- stito stanje: svaki raun ima drugaiji salo, svaki blagajnik ima ime. Stoga blagajnici, klijenti, rauni, transakcije itd., pojedinano mogu biti predstavljeni jedinstvenim entite- tom u raunarskom programu. Ti entiteti su objekti, a svaki objekat pripada odreenoj klasi koja definie njegove karakteristike i ponaanje.

    Dakle, iako mi u objektno orijentisanom programiranju stvaramo nove tipove poda- taka, svi objektno orijentisani programski jezici koriste rezervisanu re,,class. Kada vidite re ,,tip, pomislite na ,,klasu i obrnuto.'

    O vo jc z ap ravo prcvic usko, poto ob jck ti m ogu posto ja ti u razn im ra u n a r im a i a d re sn im p ro s to - rim a , a m o g u b iti sn im ljen i i na ciisk. U tim slua jcv im a, id e n tite t ob jek ta se m o ra u tv rd iti na neki d ru g i n ain , a nc p o m o u njegove ad rcse u m em o riji .N eki Ijudi p rave razliku i tv rd e d a tip o d re d u je in terfejs, d ok jc k lasa p o seb n a realizacija tog in terfejsa .

  • 18 Misliti na Javi

    Poto klasa opisuje skup objekata koji imaju identine karakteristike (elementi s po- dacima) i jednako se ponaaju (funkcionalnost), klasa ie zaista tip podatka, jer i broj u formatu pokretnog zareza, na primer, takoe ima skup karakteristika i ponaanja. Razlika je u tome to program er definie klasu koja odgovara problemu, umesto da bude prinu- en da koristi postojei tip koji predstavlja m emorijsku jedinicu unutar raunara. Pro- gramski jezik proirujete dodavanjem novih tipova podatka, specifinih za vae potrebe. Programski sistem prihvata nove klase, o njima vodi rauna i proverava tipove, kao to radi i sa ugraenim tipovima.

    Objektno orijentisan pristup ne ograniava se samo na pravljenje simulacija. Bez ob- zira na to da li se slaete sa stavom da je svaki program simulacija sistema koji projektu- jete, upotrebom tehnika, OOP-a veliki skup problem a lako se moe da svesti na jednostavna reenja.

    Kada se klasa ustanovi, moete da napravite koliko god elite objekata te klase, a zatim da radite s tim objektima kao da su elementi u problema koji pokuavate da reite. Zaista, jedan od izazova objektno orijentisanog program iranja jeste ostvarivanje jednoznanog preslikavanja izmeu elemenata u prostoru problema i objekata u prostoru reenja.

    Kako da naterate objekat da uradi koristan posao? Mora postojati nain da postavite zahtev objektu da neto uradi, na primer, da zavri transakciju, iscrta neto na ekranu ili ukljui prekida. A svaki objekat moe da zadovolji samo izvesne zahteve. Zahtevi koje moete da postavite objektu efinisani su preko njegovog interfcjsa, koji je odreen tipom. Prost prim er bi mogla biti sijalica:

    Ime tipa

    Interfejs

    Sijalica sj = new Sijalica();

    sj .ukl juci ();

    Interfejs odreduje koje zahteve moete da postavite odredenom objektu. Naravno, ne gde mora postojati kod koji e zaovoljiti taj zahtev. 'Iaj kod, zajedno sa skrivenim poda- cima, ini implementaciju (realizaciju ili primenu interfejsa). S take gleita proceduralnog programiranja to i nije tako komplikovano. Tip uz svaki mogui zahtev ima pridruenu m etodu i kada napravite oreeni zahtev, poziva se odgovarajua meto- da. Za ovaj proces obino se kae da smo poslali poruku" (postavili zahtev) objektu, a objekat odreduje ta e s porukom da uradi (izvri kod).

    U naem prim eru, ime tipa/klase je Sijalica, ime posebnog objekta tipa Sijalica je sj, a zahtevi koje moemo postaviti objektu Sijalica su ukljui se, iskljui se, pojaaj svetlo ili prigui svetlo. Objekat tipa Sijalica pravite kada definiete njereniu (sj) na dati objekat i

  • Poglavlje I : Upoznavanje sa objektima 19

    pozovete nevv, ime zahtevate novi objekat tog tipa. Da biste poslali poruku objektu, na- vedite ime objekta i poveite ga s porukom - zahtevom, razdvajajui ih takom. S take gledita korisnika unapred definisane klase, to je skoro sve to vam treba da biste progra- mirali sa objektima.

    Gornja slika je napravljena u skladu s formatom koji koristi unifikovani jezik za mode- lovanje (engl. Unified Modeling Languagc, UML). Svaka klasa je predstavljena pravouga- onikom, ime tipa je u gornjem delu, podaci lanovi koje treba opisati nalaze se u srednjem delu, a u donjem delu pravougaonika su metode (funkcije koje pripadaju tom objektu, koje prim aju poruke koje aljete tom objektu). esto se u UML dijagramima prikazuju samo ime klase i javne metode, a srednji deo ne tako je i na prethodnoj slici. Ako vas za- nim a samo ime klase, nema potrebe da prikazujete ni donji deo.

    Objekat prua uslugeDok pokuavate da razvijete ili shvatite strukturu nekog programa, bilo bi dobro da ob- jekte smatrate davaocima usluga. I va program e pruati usluge kor