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 |