• Java jako narzedzie programistyczne,
• zalety Javy,
• koncepcje jezyka Java,
• Java i Internet,
• krótka historia Javy,
• glówne nieporozumienia dotyczace Javy.
Przez dlugi czas trudno bylo znalezc czasopismo komputerowe, w którym nie bylo chocby
jednego artykulu o Javie. Nawet gazety i czasopisma kierowane do szerokiej rzeszy odbior-
ców, takie jak The New York Times, The Washington Post czy Bussiness Week zamiescily
po kilka artykulów poswieconych temu jezykowi. Jest coraz lepiej (albo gorzej, zaleznie od
Twoich pogladów na te sprawe) — czy przypominasz sobie, kiedy ostatnio w jakimkolwiek
radiu wyemitowano dziesieciominutowe omówienie jezyka programowania? Albo kiedy
ostatnio sto milionów dolarów zostalo zainwestowanych wylacznie w produkty napisane
przy uzyciu pewnego konkretnego jezyka programowania? CNN, CNBC czy jakiekolwiek
inne media publiczne — wszyscy rozmawiali, i w zasadzie rozmawiaja nadal o tym, jak
mozna za pomoca Javy zrealizowac okreslone zadania.
Niniejsza ksiazke adresujemy do profesjonalnych programistów, a poniewaz Java jest po-
waznym jezykiem programowania, jest mnóstwo rzeczy, o których musimy powiedziec.
Tak wiec, zamiast zajac sie analiza tego calego szumu wywolanego przez Jave i próbowac
dotrzec do tej niewielkiej (choc interesujacej) ilosci prawdziwych informacji, jakie go roz-
poczely, spróbujemy raczej powiedziec cos o Javie jako jezyku programowania (w tym
równiez, oczywiscie, o wszystkich narzedziach Javy uzywanych w Internecie, które to wlasnie
rozpoczely caly ten szum informacyjny). Nastepnie spróbujemy oddzielic rzeczywistosc od
mrzonek, wyjasniajac, co Java moze, a czego nie moze zrobic.
Zaraz po wejsciu Javy na rynek mielismy do czynienia z olbrzymia rozbieznoscia pomiedzy
tym, co mówiono o Javie, a tym, co ona naprawde potrafila. W miare jak jezyk rozwijal sie,
technologia stawala sie coraz bardziej stabilna i niezawodna, a oczekiwania stawaly sie co-
raz bardziej racjonalne. W trakcie pisania tej ksiazki Java byla najczesciej uzywana jako
middleware — oprogramowanie sluzace do utrzymywania lacznosci pomiedzy klientami a za-
sobami serwera, takimi jak np. bazy danych. Nie jest to moze nic nadzwyczajnego, ale jest
to wazny obszar, gdzie Java, przede wszystkim ze wzgledu na swoja uniwersalnosc, wielo-
watkowosc i mozliwosci sieciowe, moze sie naprawde przydac. Jezyk Java stal sie integralna
czescia wielu systemów i jest bardzo prawdopodobne, ze wkrótce stanie sie standardem dla
urzadzen elektronicznych, sklepików internetowych, samochodowych komputerów itd.
Jednakze wczesne próby przepisywania istniejacych programów na jezyk Java nie byly zbyt
obiecujace — aplikacje okazywaly sie slabe i powolne. W obecnej wersji Javy niektóre z tych
problemów zostaly rozwiazane, lecz i tak uzytkownikom jest zazwyczaj wszystko jedno, w jakim
jezyku programowania zostaly napisane ich aplikacje. Uwazamy, ze korzysci wynikajace z uzy-
wania jezyka Java pojawia sie wraz z nowymi rodzajami urzadzen i programów, a nie w zwiazku
z przepisywaniem programów juz istniejacych.
Obiegowe opinie na temat jezyka Java sa przesadzone — Java na pewno jest dobrym jezykiem
programowania. Nie ma watpliwosci, ze jest to jeden z lepszych jezyków dostepnych dla
profesjonalnych programistów. Uwazamy, ze Java potencjalnie moglaby zostac wspanialym
jezykiem programowania, lecz prawdopodobnie jest juz na to za pózno. W momencie, gdy
jezyk programowania pojawia sie na rynku, pojawia sie tez okrutna koniecznosc, by pozo-
stawal on zgodny z napisanym juz kodem. Co wiecej, nawet jesli mozliwe sa zmiany, które
nie wprowadzilyby niezgodnosci, twórcom jezyka tak uznanego jak Java trudno jest tak po
prostu stwierdzic: „No cóz, moze mylilismy sie co do X, i rzeczywiscie lepiej byloby uzyc Y".
Podsumowujac, chociaz spodziewamy sie w przyszlosci pewnych ulepszen, struktura jezyka
Java w przyszlosci zapewne nie ulegnie zasadniczym zmianom.
Skoro juz o tym powiedzielismy, pojawia sie oczywiste pytanie, skad w takim razie biora sie te
wszystkie znaczace ulepszenia jezyka Java? No cóz, ulepszenia nie dotycza samego jezyka,
lecz zmian w bibliotekach Javy. Z czasem Sun Microsystems zmienil wszystko, od nazw wielu
funkcji bibliotecznych (tak by byly bardziej konsekwentne), przez dzialanie grafiki (zmieniony
zostal model obslugi zdarzen, a niektóre elementy zostaly napisane od nowa), po imple-
mentacje waznych koncepcji, jak np. drukowanie, które nie byly czescia Java 1.0. Wynikiem
tego jest znacznie bardziej uzyteczna platforma programistyczna, o znacznie wiekszych moz-
liwosciach niz wczesniejsze wersje Javy.
Microsoft wydal produkt nazwany J++, w duzej mierze podobny do Javy. Tak jak Java,
programy J++ sa interpretowane przez maszyne wirtualna zgodna z wirtualna maszyna
Javy, ale istnieja pewne bardz o istotne róz nice w kodzie obydwu produktów. Podsta-
wowa skladnia jezyka J++ niewiele róz ni sie od s kladni Javy. Jednakze Microsoft
wprowadzil pewne koncepcje ulatwiajace komunikacje z Windows API, których uzytecz-
nosc na innych platformach jest dosc watpliwa. Oprócz uzywania tej samej s kladni,
pods tawowe biblioteki Javy i J++ (lancuchy, uzytki, dz ialalnos c w siec i, wielowatko-
wosc, matem atyka itd.) s a w gruncie rzeczy identyczne. Jednakze biblioteki grafic zne,
interfejs y uz ytkownika i dostep do odleglych obiektów s a zupelnie rózne. Obec nie
Microsoft nie rozwija juz J-t-+ — zamiast tego wprowadzil na rynek kolejny jezyk pro-
gramowania, nazwany C#, który równiez przejawia wiele podobienstw do Javy, ale wy-
korzystuje inna maszyne wirtualna. W naszej ksiazce nie zajmujemy sie ani J++, ani C#.
Rozdziali. • Wprowadzenie do Javy 19
Oczy wista zaleta jest niezalezne od platformy srodowisko programistyczne, w którym uru-
chamiane sa aplikacje -— mozesz uzywac tego samego kodu pod Windows, Solaris, Linux,
Macintosh, i pod kontrola innych systemów. Jest to bardzo wazne, jesli program ma byc
pobierany przez Internet i powinien dzialac na róznych platformach.
Kolejna zaleta jest fakt, ze skladnia jezyka Java jest podobna do skladni C++, co sprawia,
ze programisci C i C++ moga sie latwo nauczyc programowac w Javie. Sprawia to równiez,
ze programisci Yisual Basic zapewne uznaja skladnie Javy za irytujaca.
Jesli do tej pory zajmowales sie innym jezykiem niz C++, niektóre terminy uzywane w tym
podrozdziale moga wydac Ci sie niezrozumiale — opusc nastepne podrozdzialy. Bedziesz
znal wsz ystkie wazne term iny po dotarciu do konc a rozdzialu 6.
Java jest w pelni zorientowana obiektowo -— nawet bardziej niz C++. Wszystko w Javie, moze
oprócz kilku podstawowych typów danych, jak np. liczby, jest obiektem. (Programowanie zo-
rientowane obiektowo wyparlo wczesniejsze techniki programowania, poniewaz pozwala
ono w latwiejszy sposób tworzyc skomplikowane projekty. Jesli nie jestes zaznajomiony z pro-
gramowaniem zorientowanym obiektowo, w rozdzialach 3. i 6. znajdziesz wszelkie potrzebne
informacje).
Oczywiscie, stworzenie kolejnego ulepszonego dialektu jezyka C++ nie byloby wystarczajace.
Podstawowa zaleta jest to, ze o wiele latwiej jest pisac nie zawierajacy bledów kod, uzywajac
Javy niz C+ +.
Dlaczego? Projektanci Javy dlugo mysleli nad tym, czemu w kodzie C++ tak latwo o bledy.
A nastepnie dodali do jezyka Java narzedzia eliminujace mozliwosc tworzenia kodu, w którym
znajdowalyby sie najbardziej powszechne bledy.
• Projektanci Javy wyeliminowali reczna alokacje i dealokacje pamieci.
Pamiec w Javie jest sprzatana automatycznie. Nigdy nie musisz sie martwic o uwalnianie
pamieci.
• Wprowadzili prawdziwe tablice, eliminujac arytmetyke wskazników.
Nigdy nie bedziesz musial sie martwic, ze nadpisujesz zawartosc pamieci, która jest Ci po-
trzebna, co zdarzalo sie przy uzywaniu wskazników.
• Wyeliminowali zamieszanie zwiazane z mozliwoscia przypisania wartosci, zamiast
porównania jej, w wyrazeniach warunkowych.
Nie jestes w stanie nawet skompilowac i f (ntries = 3) . . . (Jesli programujesz w jezyku
Yisual Basic, mozesz nie zdawac sobie sprawy, ze jest to jakis problem, ale uwierz nam, taka
sytuacja jest zródlem wielu bledów w kodzie C/C++).
• Wyeliminowali wielokrotne dziedziczenie, zastepujac je nowym pojeciem interfejsu,
pochodzacym z Objective C.
Interfejsy udostepniaja wiekszosc zalet wielokrotnego dziedziczenia, unikajac zlozonosci
wynikajacej z zarzadzania hierarchiami wielokrotnego dziedziczenia. (Jesli dziedziczenie jest
dla Ciebie zupelnie nowa koncepcja, przyblizy Ci ja rozdzial 5.).
Specyfikacja jezyka Java jest publiczna. Mozesz znalezc ja w Internecie pod adresem
http://java. sun. com/docs/books/jls/html/index. html.
Autorzy Javy napisali szczególowy raport wyjasniajacy cele i osiagniecia ich projektu. Raport
jest zorganizowany wokól nastepujacych jedenastu okreslen definiujacych jezyk:
• prosty,
• zorientowany obiektowo,
• rozproszony,
• niezawodny,
• bezpieczny,
• neutralny pod wzgledem architektury,
• uniwersalny,
• interpretowany,
• wydajny,
• wielowatkowy,
• dynamiczny.
Niektóre z tych punktów omówilismy w poprzednim podrozdziale. W tym podrozdziale:
• strescimy, poslugujac sie akapitami z raportu, wypowiedzi projektantów Javy na
temat wyzej wymienionych pojec;
• powiemy, co myslimy o kazdym z pojec, bazujac na wlasnych doswiadczeniach
z aktualna wersja jezyka Java.
W trakcie pisania tych slów raport, o którym mowa, byl dostepny pod adresem http://
java. sun. com/doc/language_environment.
Chcielismy zb udowac system, w który m mo zna by latwo pr ogr amowac, bez potrze by p rz
cho dze nia d lug ieg o, ez ote ryczn ego tr ening u, i k tór y k la dzie n acisk na pr ak tyk e. W z wi
Z tym, na wet jes li u waz amy C++ za nieo dpowied ni, zap roje kto walismy Jave w taki spo s
Rozdzial 1. • Wprowadzenie do Jaw 21
by byla na tyle podobna do C++, jak to tylko mozliwe, aby nasz system byt bardziej zrozu-
mialy. Java unika wielu rzadko uzywanych i niezbyt dobrze rozumianych zagadnien C++,
które naszym zdaniem wnosza wiecej problemów niz korzysci.
W rzeczy samej, skladnia Javy jest „uprzatnieta" wersja skladni C++. Nie ma potrzeby
uzywania plików naglówkowych, arytmetyki wskazników (ani nawet samych wskazników),
struktur, unii, przeladowania operatorów, wirtualnych klas bazowych i tak dalej. (Zwróc uwage
na rozmieszczone w ksiazce notki C++ opisujace róznice pomiedzy Java a C++). Jednakze
projektanci nie wyeliminowali wszystkich niewygodnych cech C++. Dla przykladu, niewygodna
skladnia polecenia swi tch pozostala niezmieniona. Jezeli znasz C++, bedzie Ci bardzo latwo
przyzwyczaic sie do skladni Javy.
Jezeli do tej pory uzywales graficznego srodowiska programowania (jakim jest np. Yisual Basic),
Java moze wydac Ci sie bardzo skomplikowana. Skladnia Javy wyda Ci sie co najmniej dziwna
(chociaz nie zabiera zbyt wiele czasu jej opanowanie). Co wazniejsze, w Javie musisz o wiele
wiecej programowac. Pieknem Visual Basicajest jego graficzne srodowisko programowania,
dostarczajace duza czesc infrastruktury aplikacji prawie automatycznie. W Javie te infrastrukture
musisz zaprogramowac recznie, co zazwyczaj zajmuje troche czasu. Jednakze istnieja sro-
dowiska programowania, w których mozesz programowac technika „przeciagnij i upusc".
Inna cecha prostego programu jest jego maty rozmiar. Jednym z celów Javy jest umozli-
wianie konstruowania oprogramowania, które mozna byloby uruchamiac na malych auto-
nomicznych maszynach. Rozmiar podstawowego interpretera wraz z obsluga klas to ok. 40
kilobajtów; dodajac do tego podstawowe biblioteki i obsluge watków (czyli w gruncie rzeczy,
dodajac samowystarczalne jadro), zajmujesz kolejne 175 kB.
To wielkie osiagniecie. Jednakze zwróc uwage, ze biblioteki graficznego interfejsu uzyt-
kownika (graphical user interface — GUI) sa znacznie wieksze.
Mówiac wprost, projektowanie zorientowane obiektowo to technika programowania kon-
centrujaca sie na danych (czyli obiektach) i na interfejsach tych obiektów. Odwolajmy sie
do jakiejs obrazowej analogii — „zorientowany obiektowo" ciesla jest przede wszystkim
skoncentrowany na krzesle, które konstruuje, a dopiero w dalszej kolejnosci na narzedziach
uzywanych w tym celu. Natomiast „niezorientowany obiektowo" ciesla mysli przede wszystkim
o swoich narzedziach. Zorientowane obiektowo koncepcje Javy sa w gruncie rzeczy takie
same jak w C++.
Orientacja obiektowa wykazala swoja wartosc w ciagu ostatnich 30 lat i jest czyms niewyobra-
zalnym, aby nowoczesny jezyk programowania nie uzywal tej koncepcji. Rzeczywiscie, zo-
rientowane obiektowo cechy Javy sa podobne do tych w C++. Glówne róznice pomiedzy
Java a C++ leza w zagadnieniu wielokrotnego dziedziczenia, w którym to przypadku Java
udostepnia lepsze rozwiazanie, oraz w modelu metaklasy Javy. Mechanizm odbicia (opisany
w rozdziale 5.) i koncepcja serializacji obiektów (rozdzial 12.) znacznie ulatwiaj a implementacje
najwazniejszych obiektów i narzedzi budujacych GUI, integrujacych komponenty programu.
Jesli nie masz doswiadczenia z zorientowanymi obiektowo jezykami programowania,
sugerujem y, abys uwaznie przec zytal rozdzialy od 4. do 6. Roz dzialy te wyjas niaja,
c zym jest program owanie zorientowane obiektowo i dlaczego jest ono bardz iej uzy-
teczne przy programowaniu skom plikowanych projektów niz tradycyjne, zorientowane
proceduralnie jezyki, takie jak C lub Basic.
Java posiada olbrzymia biblioteka funkcji kopiujacych przy uzyciu protokolów TCP/IP, jak
np. HTTP i FTP. Aplikacje Javy moga otwierac obiekty w calej Sieci za pomoca adresu
URL z taka sama latwoscia, z jaka otwieraj a pliki w systemie lokalnym.
Java udostepnia szerokie mozliwosci korzystania z Internetu. Kazdy, kto próbowal progra-
mowac aplikacje internetowe za pomoca innego jezyka, zachwyci sie latwoscia, z jaka Java
wykonuje tak uciazliwe zadania, jak np. nawiazywanie polaczenia sieciowego. Elegancki me-
chanizm, okreslany mianem serwlet, czyni niesamowicie efektywnym dzialanie programu
Javy po stronie serwera. Wiele popularnych serwerów stron internetowych pozwala na uzycie
serwletów. (Zajmiemy sie omawianiem programowania sieciowego w ksiazce ,Java 2.
Techniki zaawansowane.) Mechanizm zdalnego wywolywania metod umozliwia komunikacje
pomiedzy obiektami rozproszonymi (piszemy o tym w Java 2. Techniki zaawansowane).
Java zostala zaprojektowana do pisania programów, które musza okazac sie niezawodne
na wiele róznych sposobów. Java kladzie duzy nacisk na wyszukiwanie potencjalnych pro-
blemów we wczesnej fazie pisania programu, nastepnie na dynamiczne sprawdzanie jego
dzialania (w czasie wykonywania programu) oraz na eliminowanie niebezpiecznych sytuacji.
Najwieksza róznica pomiedzy Java a C/C++ jest to, ze w Javie istnieje model wskaznika
eliminujacy mozliwosc nadpisywania zawartosci pamieci i niszczenia danych.
Ta wlasciwosc równiez jest bardzo uzyteczna. Kompilator Javy wykrywa wiele problemów,
które w innych jezykach ujawnilyby sie dopiero w trakcie wykonywania programu. Natomiast
jesli chodzi o drugi aspekt, kazdy, kto spedzil dlugie godziny na wyszukiwaniu bledów pamieci
spowodowanych przez zle ustawiony wskaznik, doceni to narzedzie Javy.
Jesli wczesniej uzywales takich jezyków jak Yisual Basic lub COBOL, które nie uzywaja
wskazników w sposób bezposredni, prawdopodobnie dziwisz sie, czemu jest to takie wazne.
Programisci C nie maja takiego szczescia. Potrzebuja wskazników, aby miec dostep do lan-
cuchów, tablic, obiektów, a nawet plików. W Yisual Basicu nie uzywasz wskazników do zadnej
z tych rzeczy, nie musisz sie tez martwic o alokacje pamieci dla nich. Z drugiej strony, istnieje
wiele struktur danych, które trudno jest zaimplementowac w jezyku nie uzywajacym wskazni-
ków. Java laczy najlepsze cechy obu tych swiatów. Nie potrzebujesz wskazników do zwy-
czajnych konstrukcji, takich jak lancuchy czy tablice. Ale masz dostep do potegi wskazników,
jesli tylko tego potrzebujesz, na przyklad gdy tworzysz liste danych. I, co wiecej, zawsze
masz poczucie bezpieczenstwa, poniewaz nigdy nie uzyjesz blednie ustawionego wskaznika,
nie wywolasz bledów alokacji i nie musisz sie martwic o przecieki pamieci.
Rozdziali. • Wprowadzenie do Javy 23
Java jest przeznaczona do uzycia w srodowiskach sieciowych i rozproszonych. W zwiazku z tym
polozylismy duzy nacisk na bezpieczenstwo. Java umozliwia tworzenie systemów odpornych
na wirusy i majsterkowanie.
W pierwszej edycji Córe Java napisalismy: „Cóz, jak to sie mówi, nigdy nie mów nigdy"
i okazalo sie, ze mielismy racje. Grupa ekspertów ochrony z Uniwersytetu Princeton znalazla
pierwsze bledy w koncepcjach bezpieczenstwa Javy 1.0 wkrótce po pojawieniu sie na rynku
pierwszej wersji Java Development Kit. Co wiecej, oni, a takze wiele innych osób, wciaz znaj-
duja dziury w mechanizmach bezpieczenstwa kazdej kolejnej wersji Javy. Jesli chcesz za-
siegnac opinii ekspertów na temat aktualnych systemów bezpieczenstwa jezyka Java, powi-
nienes odwiedzic witryne grupy Princeton (http://www.cs.princeton.edu/sip/) i grupe comp.
risks. Zespól Javy oglosil, ze wprowadza polityke „zerowej tolerancji" dla bledów ochrony
i ze natychmiast przystepuje do naprawy wszystkich bledów znalezionych w aplecie mechanizmu
bezpieczenstwa. W szczególnosci, publikujac wewnetrzna specyfikacje interpretera Javy,
Sun ulatwia prace ludziom poszukujacym bledów w narzedziach ochrony Javy — pozy-
skujac w ten sposób spolecznosc komputerowa dla skomplikowanego zadania wyszukiwania
dziur w systemie. Dzieki temu mozemy miec pewnosc, ze bledy ochrony zostana znalezione
tak szybko, jak to tylko mozliwe. W kazdym razie, mechanizmy bezpieczenstwa Javy bardzo
trudno przechytrzyc. Znalezione do tej pory bledy byly bardzo subtelne i bylo ich (relatyw-
nie) niewiele.
Obecnie strona firmy Sun zwiazana z kwestiami systemu bezpieczenstwa jest dostep-
na pod adresem http://j ava.sun.com /sfaq/.
Program napisany w Javie powinien byc powstrzymywany przez mechanizmy bezpieczenstwa
od nastepujacych przykladowych dzialan:
• przeladowywania stosu, jak czynil to pewien nieslawny robak internetowy,
• nadpisywania i niszczenia pamieci poza swoja wlasna przestrzenia procesowa,
• czytania i zapisywania lokalnych plików, jesli program zostal wywolany przez
znajacy system bezpieczenstwa mechanizm ladowania klas, czyli np. przez
przegladarke internetowa, zaprogramowana tak, by zabraniala tego rodzaju dostepu.
Wszystkie te koncepcje zostaly wpisane w jezyk Java i wiekszosc z nich wydaje sie dzialac
tak, jak powinna. Java jest w tej chwili bezsprzecznie najbezpieczniejszym jezykiem pro-
gramowania. Ale ostroznosci nigdy za wiele. Chociaz dziury znalezione do tej pory w sys-
temie bezpieczenstwa nie byly latwe do wykorzystania, a wszystkie szczególy sa zazwyczaj
trzymane w tajemnicy, wciaz moze okazac sie niemozliwym udowodnienie, ze Java jest je-
zykiem bezpiecznym.
Kilka narzedzi ochrony zostalo dodanych do jezyka Java w trakcie jego rozwoju. Od wersji 1.1
Java uzywa notacji klas cyfrowo oznaczonych (spójrz do Java 2. Techniki zaawansowane).
Uzywajac klasy oznaczonej, wiesz, kto ja napisal. I jezeli tylko ufasz autorowi tej klasy, moze
ona otrzymac wieksze przywileje niz inne klasy w Twoim projekcie.
Konkurencyjny mec hanizm dostarczania kodu, stworzony przez Mic rosoft i bazujacy na
tec hnologii ActiveX, polega jedynie na cyfrowym podpisie. Rzec z jasna, to nie wystar-
cza — kaz dy uzytkownik produktów firmy Microsoft moze potwierdzic , ze programy
znanych wydawc ów zawieszaja sie i w ten lub inny sposób moga uszkodzic system .
Java posiada o wiele potezniejszy model bezpieczenstwa niz ActiveX, poniewaz kontro-
luje aplikacje w czasie jej dzialania i powstrzym uje ja przed s pustoszeniem komputera.
Kompilator generuje neutralny pod wzgledem architektury format plików obiektowych — skom-
pilowany kod moze byc wykonywany przez wszystkie procesory, jakie znane sa danemu sro-
dowisku Javy. Kompilator Javy potrafi to uczynic, poniewaz generuje zestaw instrukcji,
który nie ma nic wspólnego z konkretna architektura komputera. Instrukcje sa natomiast
zaprojektowane tak, by byly latwe do zinterpretowania na kazdej maszynie i aby mozna
bylo przelozyc je na jezyk maszynowy w czasie rzeczywistym.
Nie jest to nowy pomysl. Ponad dwadziescia lat temu zarówno oryginalna implementacja
jezyka Pascal Niklausa Wirtha, jak i system UCSD Pascal korzystaly z tej samej techniki.
Dzieki uzyciu instrukcji interpretera wykonanie staje sie szybsze (lecz z drugiej strony, kom-
pilacja w czasie rzeczywistym w wiekszosci wypadków spowalnia dzialanie programu).
Projektanci Javy wykonali wspaniala robote, tworzac zestaw instrukcji Javy, który dziala na
wszystkich najpopularniejszych dzisiaj architekturach komputerów. Same instrukcje zostaly tak
zaprojektowane, by mozna je bylo latwo przelozyc na jezyk maszynowy danego komputera.
W przeciwienstwie do C i C++, w Javie nie istnieja „zalezne od sprzetu" cechy implementacje.
Rozmiar prymitywnych typów danych jest okreslony podobnie jak zachowanie wykonywanej
na nich arytmetyki.
Dla przykladu, 1 nt jest w Javie zawsze 32-bitowa liczba calkowita. W C/C++ 1 nt mógl
oznaczac liczbe 16-bitowa, 32-bitowa albo liczbe jakiejkolwiek wielkosci, jaka zazyczylby
sobie projektant komputera. Jedynym ograniczeniem jest to, ze int musi miec co najmniej
tyle bajtów co short Int i co najwyzej tyle bajtów co long Int. Okreslony rozmiar typów
liczbowych eliminuje najwiekszy problem wystepujacy przy przenoszeniu programów na
inne platformy. Dane liczbowe sa transmitowane w okreslonym formacie, co eliminuje nie-
porozumienia. Lancuchy sa zapamietywane w formacie Unicode.
Biblioteki, bedace czescia systemu, definiuja przenaszalne interfejsy. Dla przykladu, istnieje
abstrakcyjna klasa Window i jej implementacje dla systemów Unix, Windows i Macintosh.
Jak wie kazdy, kto kie dyko lwiek tego próbowal, napisanie pro gramu dzialajacego dobrze
zaró wno pod syste mem Windo ws, Macintos h, jak i po d dziesie cio ma ró znymi wer sjami
sys temu Unix, to prawdziwie heroiczny wysilek. J ava 1.0 doko nala tego heroiczne go wy-
silku, udostepniajac prosty zestaw narzedzi, który mapowal ele menty wspólnego interfejsu
uzytko wnika ha wszystkie te platformy. Nies tety, wynikiem tego byla biblio teka, która, po
dlugich godzinach pracy "wlozonej w nia, dawala z trudem zadowalajace rezultaty w róznych
Rozdzial 1. • Wprowadzenie do Javy 25
systemach (i zazwyczaj produkowala rózne bledy w róznych implementacjach graficznych). Ale
byl to dopiero poczatek. Istnieje wiele programów, w których uniwersalnosc jest wazniejsza niz
wyglad interfejsu uzytkownika, i te programy skorzystaly na wczesnych wersjach jezyka
Java. Do chwili obecnej zestaw interfejsu uzytkownika zostal calkowicie przepisany, tak ze
teraz jego dzialanie nie zalezy juz od interfejsu uzytkownika maszyny, na której pracuje.
Wyniki sa znacznie bardziej przewidywalne i chyba bardziej atrakcyjne niz we wczesniejszych
wersjach Javy.
Interpreter Javy moze wykonywac instrukcje Javy bezposrednio, na kazdej maszynie, dla
której istnieje interpreter. Poniewaz laczenie jest procesem prostszym i w mniejszym stopniu
obciazajacym system, tworzenie programów moze byc szybsze i bardziej elastyczne.
Byc moze jest to zaleta w trakcie pisania aplikacji, ale autor tego twierdzenia wyraznie przesa-
dza. Niezaleznie od wersji, kompilator Javy zamieszczany w Java Software Development Kit
(SDK) okazuje sie byc dosc powolny. (Niektóre kompilatory pochodzace z innych firm, jak na
przyklad kompilator wyprodukowany przez IBM, sa troche szybsze). A predkosc rekompilacji
jest tylko jednym ze skladników srodowiska programistycznego. Jezeli przyzwyczailes sie
do predkosci programowania w Yisual Basicu, bedziesz prawdopodobnie zawiedziony wydaj-
noscia srodowiska programistycznego Javy.
Podczas gdy wydajnosc zestawu instrukcji Javy jest zazwyczaj wiecej niz wystarczajaca,
istnieja sytuacje, gdy potrzebna jest zwiekszona wydajnosc. Instrukcje moga byc tlumaczone
w czasie rzeczywistym (podczas dzialania programu) na kod maszynowy procesora, na którym
aplikacja wlasnie dziala.
Jezeli uzywasz interpretera do wykonywania instrukcji Javy, „wydajnosc" nie jest tutaj od-
powiednim slowem. Jednakze na wielu platformach masz mozliwosc skorzystania z innego
sposobu kompilacji, kompilatorów czasu rzeczywistego (Just-in-time — JIT). Kompiluja
one instrukcje Javy w kod maszynowy, zapamietuja go i wywoluja, jesli dany kod okaze sie
znowu potrzebny. Takie podejscie niezwykle przyspiesza dzialanie programu, poniewaz
kazda jego funkcja zostaje zinterpretowana tylko raz. Mimo ze wciaz wolniejszy od praw-
dziwych kompilatorów, kompilator czasu rzeczywistego pozwala na dziesiecio-, a nawet
dwudziestokrotne przyspieszenie dzialania niektórych programów i prawie zawsze bedzie
znaczaco szybszy od interpretera Javy. Ta technologia jest wciaz ulepszana i moze któregos
dnia przyniesc rezultaty nieporównywalne z tradycyjnymi systemami kompilacji. Dla przy-
kladu, kompilator czasu rzeczywistego moze sprawdzac, który fragment kodu jest wyko-
nywany najczesciej i optymizowac wykonywanie tego fragmentu ze wzgledu na predkosc.
Korzysci wielowatkow osci polegaja na lepszej interaktywnosci i dzialaniu w czasie rzeczywistym.
Jesli kiedykolwiek próbowales korzystac z wielowatkowosci, piszac program w innym jezyku,
bedziesz mile zaskoczony, jak latwo mozna zrobic to w Javie. Watki w jezyku Java moga
korzystac z wielu procesorów jednoczesnie, jezeli tylko system operacyjny potrafi z nich
korzystac. Z drugiej strony, implementacja watków moze byc bardzo rózna na róznych plat-
formach i Java nie ma zamiaru byc niezalezna od platformy w tym aspekcie programowania.
Jedynie kod wywolujacy watki pozostaje taki sam na wszystkich maszynach; Java pozo-
stawia implementacje wielowatkowosci bibliotekom oraz systemom operacyjnym, na których
pracuje. (Zagadnienie wielowatkowosci zostanie omówione w ksiazce Java 2. Techniki za-
awansowane). Pomimo tego, latwosc w uzywaniu watków jest jedna z glównych przyczyn
popularnosci Javy wsród programistów aplikacji serwerów.
Java jest na kilka sposobów jezykiem bardziej dynamicznym niz C i C++. Zostala zapro-
jektowana tak, by adaptowala sie do róznych srodowisk, biblioteki moga implementowac
nowe metody i zmienne skladowe, i nie ma to wplywu na dzialanie wykorzystujacych je
programów. W przypadku programów napisanych w Javie znalezienie interesujacej nas
informacji w trakcie dzialania programu jest bardzo prostym zadaniem.
To wazne udogodnienie w sytuacjach, gdy musimy zaimplementowac nowy kod do dzialaja-
cego juz programu. Typowym przykladem jest kod pobrany z Internetu, który ma zostac wy-
konany przez przegladarke. W Javie 1.0 znajdowanie informacji w trakcie dzialania pro-
gramu mozna bylo nazwac w kazdy sposób, ale na pewno nie „prostym zadaniem", ale aktualne
wersje Javy daja programiscie pelny wglad zarówno w strukture, jak i w dzialanie obiektów.
Ten fakt jest szczególnie wazny dla systemów, które musza analizowac obiekty w trakcie
dzialania programu, takich jak mechanizmy budujace interfejsy uzytkownika Java GUI,
inteligentne debuggery, komponenty zdolne do podlaczania sie w czasie rzeczywistym oraz
obiektowe bazy danych.
Pomysl jest prosty — uzytkownicy beda pobierac instrukcje Javy z Internetu i uruchamiac
je na swoich komputerach. Programy Javy, które dzialaja na stronach WWW, sa nazywane
apletami. Aby uzyc apletu, potrzebujesz polaczonej z Java przegladarki internetowej, która
bedzie interpretowala instrukcje. Poniewaz Sun wydaje licencje na kod zródlowy Javy i nalega,
aby nie bylo zadnych zmian w jezyku ani w strukturze podstawowych bibliotek, mozesz byc
pewien, ze aplet Javy zadziala pod kazda przegladarka, która jest polaczona z Java. Zauwaz,
ze Netscape 2.x i Netscape 3.x sa polaczone tylko z Java 1.02, podczas gdy Internet Explo-
rer 3.0, Netscape 4 i Internet Explorer 4 uzywaj a róznych podzbiorów Javy 1.1. Ta przykra
sytuacja spowodowala, ze bardzo trudno jest napisac aplet, który móglby korzystac z najnow-
szej wersji Javy. Aby rozwiazac ten problem, Sun wydal Java Plug-in, narzedzie, dzieki któremu
najnowsza wersja Javy jest dostepna zarówno dla przegladarki Netscape, jak i dla Internet Explo-
rera (wiecej informacji na ten temat znajdziesz w rozdziale 10.).
Rozdziali. • Wprowadzenie do Javy 27
Mamy wrazenie, ze poczatkowy szum, jaki powstal wokól Javy, mial zródlo glównie w checi
zbicia majatków na oprogramowaniu apletowym. Zalózmy, ze napisales swietny maly program
o nazwie „Testament Kreator". Zamieniasz go w aplet i pobierasz oplate za kazdym razem,
gdy ktos bedzie chcial go uzyc — najprawdopodobniej wiekszosc ludzi rzadko bedzie
uzywac programów tego typu. Niektórzy przewiduja, ze pewnego dnia wszyscy beda placic
za programy sciagniete z Internetu w trybie „od uzycia". Moze to byc wielki dzien dla korpo-
racji programistycznych, ale naszym zdaniem nie mozna oczekiwac na to, ze internauci beda
np. sciagali i placili za aplet sprawdzajacy slownictwo za kazdym razem, gdy beda chcieli
wyslac e-mail.
Innym, zasugerowanym juz na samym poczatku istnienia apletów sposobem ich uzycia byly
tak zwane uchwyty zawartosci i protokolu, które póz walaj a polaczonej z Java przegladarce
dynamicznie obslugiwac nowe rodzaje danych. Zalózmy, ze wynalazles nowy algorytm kom-
presji, obslugujacy olbrzymie pliki graficzne, i chcesz pokazac komus próbke Twojej nowej
technologii, zanim kazesz sobie slono placic za jej uzywanie. Piszesz w Javie uchwyt zawar-
tosci zajmujacy sie dekompresja i wysylasz go razem z kilkoma spakowanymi plikami. Prze-
gladarka Hotlava firmy Sun Microsystems obsluguje to narzedzie, ale ani Netscape, ani Internet
Explorer tego nie potrafia.
Aplety moga byc takze uzywane do tworzenia przycisków i pól edycji na stronie HTML.
Ale ladowanie tych apletów bedzie bardzo powolne, jesli uzywasz polaczenia telefonicznego,
a w wiekszosci przypadków mozesz dokonac tego samego przy uzyciu jezyka Dynamie HTML,
formularzy HTML albo jednego z jezyków skryptowych, jak chociazby JavaScript. No i,
oczywiscie, pierwsze aplety byly uzywane przy tworzeniu animacji (znane wszystkim krecace
sie kule, tanczace postacie z kreskówek, falujacy tekst itd.). Ale animowane GIF-y pozwalaja
zrealizowac to samo, a Dynamie HTML w polaczeniu ze skryptami udostepnia mozliwosci
znacznie wieksze od mozliwosci pierwszych apletów Javy.
W wyniku niezgodnosci przegladarek i niedogodnosci w sciaganiu kodu apletów powol-
nymi polaczeniami sieciowymi aplety na stronach internetowych nie okazaly sie wielkim
sukcesem. Sytuacja jest jednak diametralnie odmienna w przypadku intranetów. Zazwyczaj
nie ma tam problemów z przepustowoscia, wiec czas ladowania apletów nie ma zadnego
znaczenia. Mozna natomiast kontrolowac, jaka przegladarka jest uzywana, albo konse-
kwentnie uzywac programu Java Plug-in. Pracownicy nie moga skasowac ani przekonfigu-
rowac programów, które sa dostarczane przez serwer przy kazdym uzyciu, a administrator
systemu nie musi chodzic po firmie i naprawiac terminali. Wiele korporacji uzywa obecnie
wykorzystujacych przegladarki apletów do inwentaryzacji, planowania urlopów, refundowania
delegacji i innych zadan.
Nasza ksiazka zawiera tylko kilka przykladowych apletów; najwiekszym zródlem apletów
jest Internet. Niektóre z apletów zamieszczonych na stronach internetowych mozna zobaczyc
tylko w trakcie dzialania, inne zawieraj a równiez kod zródlowy. Gdy zapoznasz sie juz z Java,
aplety stana sie wspanialym zródlem dodatkowej wiedzy o tym jezyku. Dobrym miejscem,
od którego mozesz zaczac poszukiwanie apletów, jest Gamelan — obecnie jest on czescia
witryny developer.com, ale wciaz mozesz dotrzec do niego bezposrednio, za pomoca adresu
URL http://www.gamelan.com. (Slowo gamelan oznacza równiez rodzaj jawajskiej orkiestry
muzycznej. Jesli bedziesz mial kiedys taka mozliwosc, posluchaj wystepu gamelan — to
niesamowita muzyka.)
Pobieranie apletu przypomina rysowanie obrazu na stronie WWW (dla tych, którzy znaja
HTML — mamy na mysli jeden obiekt opisany znacznikiem IMG). Aplet staje sie czescia
strony, a tekst uklada sie dookola miejsca uzywanego przez aplet. Róznica polega na tym,
ze ten obraz zyje. Reaguje na polecenia uzytkownika, zmienia swój wyglad oraz przesyla
dane pomiedzy komputerem ogladajacym aplet a komputerem wykonujacym go.
Rysunek l. l stanowi dobry przyklad dynamicznej strony WWW, na której znajduje sie poka-
zujacy czasteczki, wykonujacy skomplikowane obliczenia aplet. Uzywajac myszki, mozesz
obracac i przyblizac kazda z czasteczek, aby lepiej zrozumiec jej strukture. Tego rodzaju
interaktywnosci z rysunkiem nie mozna zaprogramowac przy uzyciu statycznych stron
WWW. (Mozesz znalezc ten aplet pod adresem http://jmol.sourceforge.net/applet.html.).
i^B&Htóir-
Creating a Web page
To use the Jrnol applet m a web page, use the <APPLET> tag with parameters speci
molecule f ile to load. For example, the this HTML was used to display the applet seen
«I DTH -"2 00 " HEIG HT""200"
W chwili, gdy piszemy te slowa, wahadlo przesunelo sie z powrotem znad skoncentrowanych
na uzytkowniku programów na programowanie po stronie serwera. W szczególnosci, serwery
aplikacji moga korzystac z mozliwosci monitorowania, jaka posiada wirtualna maszyna Javy,
by tworzyc bilans automatycznie ladowanych obiektów, budowac polaczenia z bazami danych,
synchronizowac obiekty, bezpiecznie wylaczac i restartowac komputer oraz wykonywac inne
uslugi, które sa potrzebne szerokiej gamie aplikacji serwerowych, ale równoczesnie niezwykle
trudno zaimplementowac je poprawnie. Tak wiec programisci aplikacji powinni raczej kupowac
te skomplikowane mechanizmy, zamiast programowac je. W ten sposób zwieksza sie produk-
tywnosc — programisci moga skoncentrowac sie na swoim fachu, tworzeniu swoich progra-
mów, a nie na walce z dzialaniem serwera.
Krótka historia Jaw
Ten rozdzial omawia pokrótce ewolucje Javy. Zostal napisany na podstawie róznych publikacji
(przede wszystkim na podstawie wywiadu przeprowadzonego z twórcami Javy w lipcu 1995
przez magazyn internetowy SunWorld).
Rozdzial 1. • Wprowadzenie do Javy 29
Aby poznac poczatki Javy, musimy cofnac sie do roku 1991, kiedy to grupka inzynierów firmy
Sun, dowodzona przez Patricka Naughtona oraz Slonecznego Chlopca (w jezyku angielskim
„Sun Fellow") i komputerowego czarodzieja Jamesa Goslinga próbowala zaprojektowac
niewielki jezyk komputerowy, który móglby byc uzywany w niewielkich urzadzeniach elek-
tronicznych, jak np. skrzynki przelaczników telewizji kablowej. Poniewaz urzadzenia te nie
maja zbyt wiele pamieci, jezyk musial byl maly i generowac bardzo prosty kod maszynowy.
A poniewaz rózni producenci mogli instalowac w swoich urzadzeniach rózne procesory, bylo
wazne, aby jezyk programowania nie byl zalezny od zadnej konkretnej architektury. Projekt tego
jezyka zostal ochrzczony nazwa „Green".
Wymagania dotyczace malego, prostego i niezaleznego od platformy kodu poprowadzily
zespól do wyciagniecia z lamusa modelu, którego próbowaly pewne implementacje jezyka
Pascal we wczesnych dniach komputerów PC. To, co rozpoczal Niklaus Wirth, wynalazca
jezyka Pascal, a UCSD Pascal wprowadzil na rynek, bylo projektem przenosnego jezyka,
generujacego kod posredni dla hipotetycznej maszyny. (Takie koncepcje czesto nazywane sa
maszynami wirtualnymi, stad wirtualna maszyna Javy — Java Yirtual Machine, JVM). Ten kod
posredni mógl byc uzywany przez kazda maszyne, która miala odpowiedni interpreter. Inzynie-
rowie projektu Green zastosowali wiec maszyne wirtualna, co rozwiazalo ich glówny problem.
Jednakze ludzie pracujacy w Sun wywodza sie sposród uzytkowników systemu Unix, dlatego
oparli swój jezyk na C++, nie na Pascalu. Co wiecej, zaprojektowali swój jezyk jako zorien-
towany obiektowo, a nie proceduralnie. Ale, jak Gosling powiedzial podczas wywiadu: „Przez
caly czas jezyk byl tylko narzedziem, nie celem". Gosling zdecydowal sie nazwac swój jezyk
Oak (czyli „dab", najprawdopodobniej dlatego, ze polubil widok debu znajdujacego sie za
oknem jego biura w Sun). Pózniej Sun dowiedzial sie, ze Oak jest nazwa istniejacego juz
jezyka programowania, wiec zmieniono jego nazwe na Java.
W roku 1992 projekt Green doczekal sie swojego pierwszego produktu, nazwanego „*7".
Bylo to niezwykle inteligentne urzadzenie zdalnego sterowania (mialo moc stacji SPARC,
mieszczac sie w pudelku o wymiarach 15 na 10 na 10 centymetrów). Niestety, nikt w Sun nie
byl zainteresowany jego produkcja, i ludzie z Green musieli znalezc inny sposób na sprzedanie
swojej technologii. Jednak zadna z korporacji produkujacych urzadzenia elektronicznie nie
byla zainteresowana. Nastepnie zespól wystartowal w konkursie na projekt skrzynki telewizji
kablowej, która moglaby obslugiwac nowe uslugi, takie jak przesylanie filmów wideo na
zadanie. Nie udalo im sie wygrac kontraktu. (Kontrakt podpisal zespól prowadzony przez
Jima Clarka, tego samego, który zalozyl Netscape — firme, której w duzym stopniu przypadaja
zaslugi za pózniejszy sukces Javy).
Projekt Green (z nowa nazwa: „First Person, Inc.") spedzil caly rok 1993 i polowe 1994 szukajac
osób, które chcialyby kupic ich technologie — nie znalezli nikogo. (Patrick Naughton, jeden
z zalozycieli grupy i czlowiek, który obecnie zajmuje sie przede wszystkim marketingiem
projektu, twierdzi, ze przebyl ponad 450.000 kilometrów próbujac sprzedac te technologie).
First Person zostala rozwiazana w 1994.
Podczas gdy to wszystko dzialo sie w Sun, w Internecie rosla World Wide Web. Kluczem do
stron WWW sa przegladarki, które tlumacza strone hipertekstu na to, co widzimy na ekranie.
W roku 1994 wiekszosc ludzi uzywala programu Mosaic, niekomercyjnej przegladarki stron
WWW, udostepnionej przez centrum komputerowe Uniwersytetu Illinois w 1993. (Mosaic
zostala czesciowo napisana przez Marca Andreessena, studenta tego uniwersytetu, za 6,85 dolara
za godzine. Marc zdobyl pózniej slawe i pieniadze jako jeden ze wspólzalozycieli i szef dzialu
technologii w Netscape.)
W wywiadzie dla SunWorld Gosling mówi, ze w polowie 1994 projektanci jezyka Java zro-
zumieli, ze „Mozemy napisac naprawde niezla przegladarke. Byla to jedna z niewielu rzeczy
w glównym nurcie aplikacji klient-serwer, która potrzebowala kilku z tych dziwnych rzeczy,
jakie zrobilismy: neutralnosci architektonicznej, czasu rzeczywistego, niezawodnosci, bezpie-
czenstwa— kwestii, które nie byly szczególnie wazne w swiecie komputerów autonomicznych.
A wiec napisalismy przegladarke".
Tak naprawde, przegladarka zostala napisana przez Patricka Naughtona i Jonathana Payne
i ewoluowala w przegladarke HotJava w jej dzisiejszej postaci. Przegladarka HoUava zostala
napisana w Javie, aby pokazac sile tego jezyka. Ale jej twórcy byli takze swiadomi mocy apli-
kacji, które dzisiaj nazywamy apletami, wiec stworzyli przegladarke, która potrafila wykonywac
kod wewnatrz stron WWW. Ten „dowód mocy" zobaczyl swiatlo dzienne na SunWorld'95,
23 maja 1995 roku, i rozpoczal szalenstwo, które nie oslablo do dzisiaj.
Moment przelomowy dla rozprzestrzenienia sie Javy po swiecie nastapil jesienia 1995, gdy
Netscape zdecydowal sie stworzyc polaczona z Java przegladarke Navigator, wydana w stycz-
niu 1996. Inne firmy, które znajduja sie w posiadaniu licencji na korzystanie z Javy to: IBM,
Symantec, Inprise i wiele innych Nawet Microsoft ma licencje na uzywanie Javy. Internet Explo-
rer jest polaczony z Java, a Windows obsluguje wirtualna maszyne Javy. (Zwróc uwage, ze
Microsoft nie obsluguje jednak najnowszej wersji Javy, a jego implementacja rózni sie od stan-
dardu Javy.)
Sun wydal pierwsza wersje Javy na poczatku 1996 roku. Kilka miesiecy pózniej zostala ona
uaktualniona do wersji 1.02. Ludzie szybko zrozumieli, ze Java 1.02 nie nadaje sie do pisania
powaznych aplikacji. Jasne, mogles uzyc Javy 1.02 do napisania apletu prezentujacego skaczacy
tekst, poruszajacy sie w losowo wybranym kierunku wewnatrz wytyczonego obszaru. Ale nie
mogles nawet drukowac, uzywajac Javy 1.02. Mówiac bez ogródek, Java 1.02 nie byla gotowa
na swoje wlasne piec minut.
Wielkie zapowiedzi przyszlych mozliwosci jezyka Java pojawialy sie wielokrotnie w ciagu
nastepnych kilku miesiecy. Ale jedynie na konferencji JavaOne, która odbyla sie w San Fran-
cisco w maju 1996 r., okreslono dokladniej, w jaki sposób Java stanie sie latwiejsza w uzyciu.
Na JavaOne ludzie z Sun Microsystems przedstawili swoja wizje przyszlosci jezyka Java jako
nie majaca konca liste ulepszen i nowych bibliotek.
Wazna wiadomoscia, jaka pojawila sie na konferencji JavaOne w roku 1998, bylo zblizajace
sie udostepnienie wersji Java 1.2, która zastapila wczesniejszy zabawkowy interfejs GUI
i prymitywne narzedzia graficzne ich bardziej skomplikowanymi i rozszerzalnymi wersjami,
dzieki którym obietnica „Napisz raz, uruchamiaj wszedzie" stala sie bardziej realistyczna.
Trzy dni (!) po jej wydaniu w grudniu 1998 r. nazwa wersji zostala zmieniona na Java 2.
Od tego czasu podstawowa koncepcja Javy pozostaje niezmieniona. Aktualna dystrybucja,
o chwytliwej nazwie Java 2 Software Development Kit, Standard Edition version 1.3, dodaje
szereg usprawnien do pierwotnej dystrybucji Javy 2 oraz pewna liczbe nowych wlasciwosci,
zwiekszona wydajnosc i, oczywiscie, nie ma w niej juz szeregu bledów, jakie znajdowaly
sie w poprzedniej wersji. Teraz, gdy istnieje juz stabilne zaplecze, innowacje przesunely sie
na zaawansowane biblioteki Javy, takie jak Java 2 Enterprise Edition i Java 2 Micro Edition.
Rozdziali. • Wprowadzenie do Javy 31
Glówne nieporozumienia dotyczace Javy
W tym podrozdziale zamiescilismy liste najczestszych nieporozumien dotyczacych Javy, wraz
z komentarzem.
Java to rozszerzenie HTML.
Java jest jezykiem programowania; HTML to sposób opisu struktury strony WWW. Nie maja
zadnych punktów wspólnych poza faktem, ze HTML pozwala na umieszczanie apletów
Javy na stronach WWW.
Java to jezyk latwy do nauczenia sie.
Zaden jezyk programowania tak potezny jak Java nie jest latwy. Musisz zrozumiec róznice
pomiedzy pisaniem latwych zabawowych programów a prawdziwa praca. Wez pod uwage,
ze tylko cztery rozdzialy tej ksiazki mówia o jezyku Java. Pozostale rozdzialy obu tomów
wyjasniaja, jak zmusic ten jezyk do dzialania przy uzyciu bibliotek Javy. Biblioteki Javy
zawieraja tysiace klas i interfejsów i dziesiatki tysiecy funkcji. Na szczescie nie musisz znac
ich wszystkich, ale i tak musisz wiedziec bardzo duzo, aby móc uzyc Javy w jakimkolwiek re-
alistycznym projekcie.
Java jest prostym srodowiskiem programistycznym.
Java SDK nie jest prostym w uzyciu srodowiskiem — chyba ze dla ludzi przyzwyczajonych do
pisania polecen z wykorzystaniem konsoli. Istnieja zintegrowane srodowiska programistyczne,
dostarczajace edytorów, kompilatorów, pozwalajace na projektowanie interfejsu w trybie
„przeciagnij i upusc" i polaczone z fachowymi narzedziami do obslugi bledów, ale moga sie
one wydawac troche zbyt skomplikowane i zniechecac poczatkujacego uzytkownika. Poza tym
generuja one setki linii kodu. Nie wydaje nam sie, bys mógl uznal za obiecujacy poczatek
programowania w Javie sytuacje, gdy masz przed soba setki wygenerowanych przez komputer
linii kodu opatrzonych komentarzami NIC NIE ZMIENIAJ albo podobnymi. Z doswiadczenia
wiemy, ze uzywanie ulubionego edytora tekstu jest wciaz najlepszym sposobem nauki jezyka
Java, i tak wlasnie bedziemy postepowac.
Java stanie sie uniwersalnym jezykiem programowania dla wszystkich platform.
To jest teoretycznie mozliwe i zapewne kazda firma, z wyjatkiem Microsoftu, chcialaby,
aby tak sie stalo. Jednakze istnieje wiele aplikacji doskonale dzialajacych na komputerach
osobistych, które nie dzialalyby tak dobrze na innych urzadzeniach lub wewnatrz przegladarki.
Te aplikacje zostaly napisane w taki sposób, by czerpac korzysci z predkosci procesora i ze
standardowej dla systemu biblioteki interfejsu uzytkownika, i zapewne i tak istnieja ich
wersje dla wszystkich innych waznych platform. Takimi aplikacjami sa na przyklad rózne
edytory tekstu, programy graficzne i przegladarki internetowe. Zazwyczaj sa one napisane
w C lub C++ i nie widzimy zadnych korzysci, jakie mogloby przyniesc uzytkownikowi
przepisanie ich w Javie. A przepisanie programu, przynajmniej w najblizszym czasie, na-
streczyloby pewnych trudnosci, poniewaz wersja Javy bylaby prawdopodobnie powolniejsza
i slabsza.
Jav aje sl po pr os tu kolejn ym jez yk iem pr ogr amowa nia .
Java to mily jezyk programowania; wiekszosc programistów przedklada go nad C i C++.
Ale byly juz setki milych jezyków programowania, które nigdy nie zdobyly szerokiej po-
pularnosci, podczas gdy jezyki o wyraznych niedociagnieciach, jak np. C++ i Yisual Basic,
zdobyly wielki rozglos.
Dlaczego? Sukces jezyka programowania w duzo wiekszej mierze zalezy od obslugujacego
go systemu niz od eleganckiej skladni tego jezyka. Czy istnieja uzyteczne, dogodne i standar-
dowe biblioteki koncepcji, które chcesz zaimplementowac? Czy istnieja firmy produkujace
swietne srodowiska programistyczne i obslugujace bledy? Czy jezyk i zestaw narzedzi tego
jezyka sa zintegrowane z reszta infrastruktury komputera? Java odnosi sukcesy w programowa-
niu aplikacji dla serwera, poniewaz jej biblioteki umozliwiaja prosta realizacje zadan, które
wczesniej byly skomplikowane, takich jak polaczenia sieciowe i wielowatkowosc. Fakt, ze
Java zmniejszyla liczbe bledów, usuwajac wskazniki, jest dodatkowa korzyscia i sprawia, ze
programisci wydaja sie dzialac bardziej efektywnie, korzystajac z Javy, ale nie to jest zródlem
jej sukcesu.
Warto zwrócic uwage, ze pewna korporacja — która traktuje przenosne biblioteki jak osobista
zniewage — próbuje ignorowac sukces Javy, nazywajac ja „po prostu kolejnym jezykiem
programowania" i dostarczajac na rynek system korzystajacy z jezyka pochodzacego od Javy
i prawnie zastrzezonej, nieprzenosnej biblioteki. Wynikiem takiego podejscia moze okazac
sie bardzo mily jezyk programowania, który bedzie bezposrednim konkurentem Yisual Basica,
ale niewiele wspólnego bedzie mial z Java.
J ava to jezy k in terp retowan y, wiec jes t z byt powo lny dla po wazn ych aplikacji, dziala jac
na kon kretnych platforma ch.
Wiele programów traci wiekszosc swojego czasu dzialania na komunikacje z uzytkownikiem
lub na czekanie na dane przesylane przez polaczenie sieciowe. Wszystkie programy, niewazne
w jakim jezyku zostaly napisane, wykryja klikniecie myszka w tym samym momencie. To
prawda, ze nie bedziemy wykonywac zadan wykorzystujacych intensywnie moce obliczeniowe
procesora za pomoca interpretera dostarczanego przez Java SDK. Jednakze na platformach,
na których dostepny jest kompilator czasu rzeczywistego, wystarczy uruchomic go na ze-
stawie instrukcji Javy i wiekszosc problemów zwiazanych z wydajnoscia zostanie rozwia-
zanych. Wreszcie, Java jest wspanialym rozwiazaniem dla programów zwiazanych z siecia.
Doswiadczenie pokazalo, ze Java moze bez najmniejszych klopotów radzic sobie z predko-
scia przesylu danych, z jaka mamy do czynienia w sieciach komputerowych, nawet wykonujac
prace wymagajaca tak wielu obliczen jak np. szyfrowanie. Tak dlugo, jak Java jest szybsza od
danych, które przetwarza, nie jest wazne, ze C++ móglby byc nadal od niej szybszy. W Javie
jest latwiej programowac i jest to jezyk przenosny. To czyni Jave wspanialym jezykiem dla
implementacji uslug sieciowych.
Wszys tkie pr ogr amy Javy dziala ja wewn atrz stron interne towy ch.
Wszystkie aplety Javy dzialaja wewnatrz przegladarek stron WWW. Taka jest wlasnie defini-
cja apletu — program Javy dzialajacy wewnatrz przegladarki. Ale mozna tez (i jest to calkiem
uzyteczne) pisac autonomiczne programy Javy, które dzialaja niezaleznie od przegladarek
internetowych. Te programy (zazwyczaj nazywane aplikacjami) sa calkowicie przenosne. Po
prostu wez kod i uruchom go na innej maszynie! A poniewaz Java jest wygodniejsza i bardziej
Rozdziali. • Wprowadzenie do Javy 33
odporna na bledy niz surowy C++, jest ona dobrym wyborem, jesli chodzi o pisanie programów.
Wybór Javy okazuje sie jeszcze lepszy, gdy jezyk ten zostaje polaczony z narzedziami dostepu
do baz danych, takimi jak Java Database Connectivity (wiecej na ten temat w Java 2. Techniki
z aawan sowan e). Java je st oc zywis ta dec yzja, gdy s tajes z prze d wybo rem pierwszego jezyka,
w któ rym chcialbys nauczyc s ie progr amo wac.
Wiekszosc programów w tej ksiazce to programy autonomiczne. Jasne, aplety to niezla zabawa,
jednak autonomiczne programy napisane w Javie sa w praktyce wazniejsze i bardziej uzyteczne.
Aplety Javy sa niebezpieczne.
Opublikowano juz kilka raportów o bledach w systemie bezpieczenstwa Javy. Wiekszosc z nich
okazywala sie miec zwiazek z implementacja Javy dla konkretnej przegladarki. Poszukiwacze
uznali za o sobis te wyzwanie znalezienie szcze lin w zbr oi J avy i walke z sila i zlozonosc ia
modelu ochro ny apletów. Wszystkie techniczne bledy, jakie znalezli, zostaly szybko napra-
wio ne i zaden z istniejacyc h obecnie sys temów nie zo stal zagrozony w wyniku tych bledów.
Dla porównania, wez pod uwage doslownie miliony wirusów atakujacych pliki systemu Win-
dows i makra programu Word, które sa przyczyna olbrzymich szkód, ale równoczesnie zaska-
kujaco niewielkiej krytyki slabosci atakowanej platformy. Takze mechanizm ActiveX przegla-
darki Internet Explorer móglby stac sie niezlym workiem treningowym dla sadystów, ale sposób
jego obejscia jest tak oczywisty, ze niewielu zadalo sobie trud opublikowania swoich spostrzezen.
Niektórzy administratorzy wylac zyli nawet mozliwo sc korzystania z J avy w pr zegladarkac h
w swoic h fir mac h, po mimo to wciaz zezwalajac swoim uzytko wnikom na pobier anie pli-
kó w wykonywalnych, ko ntro le k Active X i do kume ntów pr o gr amu Wor d. Wydaje sie to
nam dosc smieszne — obecnie r yzyko ataku pr zez wro gi aple t J avy jes t prawdopodobnie
por ównywalne do ryzyka s mier ci w katastro fie lotniczej; ryzyko zainfe ko wania s ys te mu
w wyniku o twarcia dokumentu Word jest por ównywalne do ryzyka s mierci w wyniku po-
trac enia przez samo chód.
JavaScnpt to prostsza wersja Javy.
JavaScript, jezyk skryptowy stosowany przez twórców stron internetowych, zostal wynaleziony
przez Netscape i poczatkowo byl rozwijany pod nazwa LiveScript. Skladnia JavaScriptu przy-
pomina skladnie Javy, ale nie istnieja zadne inne zwiazki pomiedzy tymi jezykami (oczywiscie,
za wyjatkiem nazwy). Podzbiór JavaScr iptu zostal znormalizowany jako ECMA-26 2, ale roz-
szerzenia, któryc h po trzebujesz do napisania czego kolwiek uzytecznego , nie zo staly znor-
malizowane i wynikiem tego napisanie kodu JavaScript, który dzialalby w ten sam sposób pod
prze gladarkami Netscape i Internet Explorer, to ciezka próba wytrzymalosci nerwów dla kaz-
dego programisty.
Powinienes uzywac Javy zamiast skryptów Perl i CGI.
W polowie jes t to prawda. Nie tylko nie powinienes w ogó le uzywac jezyka Per l, ale nie
powinienes równiez uzywac skryptów CGI w progr amach dzialajacych po stronie se rwera.
Serwlety Javy sa leps zym rozwiazaniem. Serwlety wykonuja sie w sposó b znacznie bardziej
efektywny niz skrypty CGI i, co wiecej, mozesz uzywac Javy — prawdziwego jezyka progra-
mo wania — do ich impleme ntac ji.
Java zre wolucjo niz uje aplikacje typu klient- ser wer.
To jest mozliwe i jest to pole, na którym Java najszybciej sie rozwija. Mamy juz kilka aplikacji
serwerowych, takich jak BEA Weblogic, calkowicie utworzonych w jezyku Java. JDBC, na-
rzedzie omawiane w ksiazce Java 2. Techniki zaawansowane, na pewno uprosci wykorzysta-
nie Javy do programowania aplikacji typu klient-serwer. Z uwagi na rosnaca liczbe narzedzi
produkowanych przez inne niz Sun firmy, oczekujemy, ze wykorzystanie baz danych w Javie
bedzie tak latwe, jak programowanie sieciowe po wprowadzeniu biblioteki Net. Zdalny dostep
do obiektów jest o wiele latwiejszy w Javie niz w C++ (wiecej na ten temat w Java 2. Techniki
zaawansowane).
Java umozliwi rozwój modelu obliczen opartego na komponentach.
Nie ma na swiecie dwóch osób, które mialyby na mysli te same rzeczy, gdy mówia o kom-
ponentach. Odnosnie kontrolek graficznych, takich jak komponenty ActiveX, które moga
zostac wbudowane w program GUI, Java 1.1 wprowadzila koncepcje Java Beans (wiecej
informacji na ten temat znajdziesz w Java 2. Techniki zaawansowane). Java Beans moga
realizowac te same zadania, co komponenty ActiveX, a poza tym sa automatycznie wielo-
platformowe. Natomiast po stronie serwera, przeznaczone do wielokrotnego wykorzystania
male programy handlowe potencjalnie moga byc uzywane w calej gamie aplikacji serwe-
rowych. Calkiem mozliwe, ze kiedys powstanie rynek tych komponentów, podobny do rynku
komponentów ActiveX.
Dzieki Javie moga wymienic mój komputer na terminal internetowy za 2.000 zlotych.
Niektórzy ludzie chetnie postawiliby spore pieniadze na to, ze tak sie stanie. Wydaje nam sie
troche absurdalne, by uzytkownicy komputerów osobistych zamienili swoje potezne i wygodne
maszyny na o wiele slabsze terminale nie posiadajace lokalnego dysku twardego. Jednakze
wyposazony w Jave komputer sieciowy jest realna opcja dla „inicjatywy zerowej administracji"
i dla ciecia wydatków na komputery w korporacjach.
Terminal internetowy wydaje sie tez sensownym przenosnym dopelnieniem komputera
osobistego. O ile cena nie bylaby zbyt wysoka, czy nie chcialbys miec w domu polaczonego
z Internetem urzadzenia wyposazonego w ekran, dzieki któremu móglbys czytac swoja poczte
lub przegladac grupy newsowe? Poniewaz jadro Javy jest tak male, Java staje sie oczywistym
wyborem dla takiego telefonu czy innego terminala internetowego.