COMPUTERWORLD
Specializovan² t²denφk o v²poΦetnφ technice
o Internetu
(CW 42/97)

Programovßnφ v jazyce Java

David ètrupl

V prvnφm dφle naÜeho serißlu jsme skonΦili u systΘmu soubor∙ javovΘ aplikace, p°iΦem₧ tΘto problematice v∞nujeme nynφ jeÜt∞ n∞kolik v∞t, t∞sn∞ navazujφcφch na p°edeÜlΘ pojednßnφ.

Pokud pou₧φvßme integrovanΘ prost°edφ, nenφ v∞tÜinou pot°eba prom∞nnΘ prost°edφ nastavovat. Pokud je vÜak nastavφme, je t°eba dßvat pozor p°i spouÜt∞nφ n∞kter²ch prohlφ₧eΦ∙ -- zadßnφ t∞chto prom∞nn²ch jim m∙₧e zp∙sobit problΘmy pro spouÜt∞nφ Java applet∙, proto₧e nenajdou svΘ standardnφ knihovny.

P°i hledßnφ class soubor∙ m∙₧e interpret Javy krom∞ adresß°∙ prohledßvat i soubory s p°φponou .jar (java archive). Tyto soubory obsahujφ adresß°e a soubory podobn∞ jako nap°. soubory s p°φponou zip nebo tar -- p∙vodn∞ byl pou₧it formßt zip (Netscape 3.0), v dalÜφch verzφch byl vytvo°en nov² formßt jar. P°i spouÜt∞nφ samostatn²ch aplikacφ je mo₧nΘ v prom∞nnΘ CLASSPATH nebo pomocφ volby -classpath p°edanΘ p°φmo programu java zadat cestu do souboru formßtu jar nebo zip. Podφvejme se na p°φklad spuÜt∞nφ programu ulo₧enΘho v jar souboru:

java -classpath .;c:\mujJar.jar Program

Pokud chceme, aby programy z archivu jar nebo zip zφskßval prohlφ₧eΦ, m∙₧eme to stanovit pomocφ dalÜφho parametru p°φkazu applet ve WWW strßnce:

<applet code=HelloWorldApplet.class

archive=muj.jar

width=100 height=100>

</applet>

Mo₧nost pou₧φt jar soubory je novß od verze JDK 1.1 -- tuto volbu tedy podporuje a₧ prohlφ₧eΦ Netscape od verze 4.0. SouΦßstφ JDK je takΘ program na vytvß°enφ jar archiv∙ -- jmenuje se jar a jeho pou₧itφ je trochu podobnΘ unixovΘmu programu tar. Chceme-li nap°. vytvo°it archiv ze vÜech class soubor∙ v aktußlnφm adresß°i, pou₧ijeme p°φkaz:

jar cf myjarfile *.class

Pou₧itφ archiv∙ zrychluje nahrßvßnφ class soubor∙ ze sφt∞ a umo₧≥uje pracovat s cel²m Java programem jako s jednφm souborem.

Vlastnφ programovßnφ

Seznamme se vÜak koneΦn∞ s vlastnφmi zßklady programovßnφ v jazyce Java. Jeho syntaxe vychßzφ z jazyk∙ C a C++. Na rozdφl od t∞chto jazyk∙ je vÜak Java pln∞ objektov² jazyk, tj. p°evzal n∞kterΘ dobrΘ (a pro programßtora p°φjemnΘ) vlastnosti i nap°. z jazyka Smalltalk.

Nejprve se podφvejme, jak vypadajφ komentß°e. V Jav∞ existujφ t°i druhy komentß°∙:

/* toto je obyΦejn² komentß° */
// toto je komentß° do konce °ßdku
/** toto je dokumentaΦnφ komentß° */

Prvnφ dva druhy komentß°∙ jsou podobnΘ jako v C++ -- jedin² rozdφl je, ₧e komentß°e nelze vno°ovat do sebe. Poslednφ druh komentß°e slou₧φ k automatickΘmu generovßnφ dokumentace ze zdrojovΘho k≤du. SouΦßstφ v²vojovΘho prost°edφ je program javadoc, kter² ze vstupnφch soubor∙ s p°φponou java vytvo°φ ve formßtu HTML dokumentaci, v nφ₧ budou obsa₧eny poznßmky z dokumentaΦnφch komentß°∙.

Jazyk Java je siln∞ typovan² jazyk, tj. ka₧dß prom∞nnß a ka₧d² v²raz mß sv∙j typ. Zßkladnφ typy byly z velkΘ Φßsti p°evzaty z jazyka C. Pokud chceme deklarovat prom∞nnou n∞jakΘho typu, napφÜeme jmΘno typu a za n∞j jmΘno deklarovanΘ prom∞nnΘ:

/* celoΦφselnΘ typy */

byte b; // 8bitovΘ Φφslo se znamΘnkem
short s; // 16bitovΘ Φφslo se znamΘnkem
int i; // 32bitovΘ Φφslo se znamΘnkem
long l; // 64bitovΘ Φφslo se znamΘnkem
/* Φφsla s pohyblivou °ßdovou Φßrkou */
float f; // 32bitovΘ Φφslo
double d; // 64-bitovΘ Φφslo
/* ostatnφ typy */
boolean b;// typ pro ulo₧enφ pravdivostnφ
//hodnoty (true/false)
char c; // 16bitov² znak (Unicode)

Objekty

Krom∞ uveden²ch zßkladnφch typ∙ m∙₧eme jeÜt∞ pou₧φvat prom∞nnΘ, ve kter²ch je ulo₧en odkaz na objekt. Ka₧d² objekt mß takΘ sv∙j typ -- t°φdu. Slovo t°φda tedy pou₧φvßme k oznaΦenφ typu objektu. Mßme-li vytvo°enu (deklarovßnu) t°φdu, m∙₧eme vytvß°et jednotlivΘ objekty (instance) tΘto t°φdy. Ka₧d² objekt mß n∞jakΘ vlastnosti a metody (funkce), kterΘ s t∞mito vlastnostmi pracujφ. Co je vlastnostφ nebo metodou kterΘho objektu, to je prßv∞ urΦeno v deklaraci t°φdy, ze kterΘ bude tento objekt vytvo°en.

Chceme-li nap°φklad vytvß°et objekty, ve kter²ch budou ulo₧eny n∞kterΘ ·daje o zßkaznφcφch, vytvo°φme t°φdu Zßkaznφk nßsledujφcφ deklaracφ (viz obrßzek T°φdy a objekty):

class Zakaznik {

int cislo;

float dluh;

void zaplatil(float kolik) {

dluh = dluh - kolik;

}

}

Tento zßpis deklaruje novou t°φdu zßkaznφk∙ -- ka₧d² zßkaznφk bude mφt svΘ Φφslo a dßle mu bude p°i°azen n∞jak² dluh. Pokud zßkaznφk zaplatφ, m∙₧eme zavolat metodu zaplatil s parametrem kolik, kterß od jeho stßvajφcφho dluhu odeΦte zadanou Φßstku.

Stejn∞ jako u ka₧dΘ vlastnosti (prom∞nnΘ), je i u ka₧dΘ metody p°ed jejφm jmΘnem typ. Tento typ urΦuje typ nßvratovΘ hodnoty, kterou tato metoda vracφ jako v²sledek svΘ Φinnosti. UkonΦenφ metody a nßvrat n∞jakΘ hodnoty zajiÜ¥uje pou₧itφ specißlnφho p°φkazu return nßsledovanΘho hodnotou, kterß mß b²t vrßcena:

int vratDeset() {
return 10;
}

Specißlnφ klφΦovΘ slovo void °φkß, ₧e danß metoda nevracφ ₧ßdnou nßvratovou hodnotu.

Pokud mßme v²Üe uvedou t°φdu Zßkaznik, m∙₧eme ji pou₧φt nßsledujφcφm zp∙sobem:

Zakaznik novak = new Zakaznik();
novak.cislo = 124;
novak.dluh = 10000;
novak.zaplatil(4500); //snφ₧φ dluh o 4 500

Prvnφ °ßdek vytvo°φ nov² objekt typu Zakaznik a ulo₧φ odkaz na tento objekt do prom∞nnΘ novak. S odkazem na vytvo°en² objekt je dßle mo₧nΘ pracovat tak, ₧e pou₧φvßme vlastnosti danΘho objektu, nebo volßme jeho metody. K vlastnostem nebo metodßm vytvo°enΘho objektu mßme p°φstup pomocφ teΦkovΘ notace se jmΘnem prom∞nnΘ, do kterΘ byl ulo₧en odkaz na nßÜ objekt.

NovΘ objekty jsou tedy vytvß°eny pomocφ volßnφ new, o jejich odstra≥ovßnφ se nemusφme starat. Je starostφ systΘmu, aby zjistil, odkdy u₧ dan² objekt nenφ pot°eba. V okam₧iku, kdy je zjiÜt∞no, ₧e objekt u₧ nenφ pot°ebn², je objekt automaticky odstran∞n. To velice usnad≥uje tvorbu zvlßÜt∞ v∞tÜφch program∙ -- explicitnφ dealokace pam∞ti je mnohdy zdrojem nep°φjemn²ch chyb, co₧ se stßvß nap°. p°i v²voji v C nebo C++.


| <<< | COMPUTERWORLD | IDG CZ homepage |