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ß° */ 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 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() { 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(); 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 | |