1

Wprowadzenie do Jaw

W tym rozdziale:

• 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-

18 Java 2. Podstawy

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.

Java jako narzedzie programistyczne

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.

20 Java 2. Podstawy

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.

Koncepcje jezyka Java

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.

Prosty

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.

Zorientowany obiektowo

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.

22 Java 2. Podstawy

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.

Rozproszony

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).

Niezawodny

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

Bezpieczny

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.

24 Java 2. Podstawy

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.

Neutralny pod wzgledem architektury

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.

Przenosny

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.

Interpretowany

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.

Wydajny

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.

Wielowatkowy

Korzysci wielowatkow osci polegaja na lepszej interaktywnosci i dzialaniu w czasie rzeczywistym.

26 Java 2. Podstawy

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.

Dynamiczny

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.

Java i Internet

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.

Aplety w dzialaniu

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.)

28 Java 2. Podstawy

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.).

Rysunek 1.1.

Aplet Jmol

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"

Java po stronie serwera

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.)

Java 2. Podstawy

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.

32 Java 2. Podstawy

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.

34 Java 2. Podstawy

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.