Dione
Z. KotalaP. Toman: Java
Predchozi (Obsah) Dalsi

12. Balíky (packages)

Balíky (packages) jsou slouží k vytváření nových prostorů jmen (namespaces) (1) a umožňují například vytváření knihovnen tříd a rozhraní. (2) Každý balík je obvykle reprezentován adresářem (3) , který obsahuje přeložené třídy (soubory .class). Vnořováním adresářů vzniká hierarchie balíků.

Část hierarchie standardního Java Core API vypadá takto:

                java
                  |
                  +--- applet
                  +--- awt
                  |     |
                  |     +--- event
                  |     +--- datatransfer
                  +--- io
                  +--- lang
                  +--- net
                  +--- ...

Jména adresářů odpovídají jménům balíků. Pro přístup ke třídám, statickým metodám a členským proměnným se v balících používá tečkové notace:

   jménoBalíku.jménoTřídy
   jménoBalíku.jménoTřídy.jménoMetody ( parametry )
   jménoBalíku.jménoTřídy.jménoProměnné

Složená jména se oddělují tečkou (místo lomítek u adresářů). Jméno včetně balíku specifikuje úplné jméno (fully qualified name).

Priklad 12.1.
Soubor Thread.class je uložen v adresáři java/lang. (4) Úplné jméno třídy Thread je java.lang.Thread. Úplné jméno statické metody currentThread() obsažené v této třídě je java.lang.Thread.currentThread().

Cestu k balíkům udává systémová proměnná CLASSPATH Ta standardně obsahuje pouze cestu k balíkům Java Core API a aktuálnímu adresáři. Změna nastavení CLASSPATH viz D.1..

12.1. Import tříd

Protože psaní úplných jmen v programu je zdlouhavé, umožňuje Java používat neúplná (jednoduchá) jména (simple names). Na začátku zdrojového souboru je potřeba rozšířit rozsah platnosti identifikátorů na požadované třídy. K tomu slouží klíčové slovo import:

   import úplnéJménoTřídy ;

Priklad 12.2.
Po importu:

import java.awt.Toolkit;

je možné volat statickou metodu:

java.awt.Toolkit.getDefaultToolkit();

rovněž jen jako:

Toolkit.getDefaultTooklit();

Importu více tříd jedním příkazem se docílí pomocí znaku "*" - tzv. import na žádost (import on demand):

   import jménoBalíku.*;

Pokud by však docházelo ke kolizi jmen (dvě stejně pojmenované třídy v různých balících), je třeba pro rozlišení použít úplná jména, jinak ohlásí překladač chybu.

Priklad 12.3.
Importu všech potřebných tříd a rozhraní z balíku java.applet se dosáhne pomocí:

import java.applet.*;

Pozn.: V každém zdrojovém textu je automaticky proveden import všech tříd z balíku java.lang (viz 12.3.).

12.2. Vytváření balíků

Java umožňuje programátorovi vytvářet vlastní balíky. Na začátku zdrojového souboru je pouze třeba uvést:

   package jménoBalíku ;
a zajistit umístění přeloženého souboru do adresáře jménoBalíku.

Priklad 12.4.
Soubor Tetris.java obsahující zdrojový text:

package game;

public class Tetris {
   // ...
}

musí být přeložen do adresáře game.

Je třeba zdůraznit, že všechny třídy, u kterých není specifikován balík, patří automaticky do jednoho(!) implicitního balíku (default package).

12.3. Java Core API

Java Platforma obsahuje standardní aplikační rozhraní, tzv. Java Core API, (5) přičemž počet obsažených balíků (a tříd) s každou major nebo minor verzí (viz 4.1.1.) roste. Zde je přehled balíků z Java Core API v JDK 1.1:

  • java.applet - umožňuje tvorbu appletů, přehrávání zvuků a poskytuje přístup k některým funkcím internetového prohlížeče.

  • java.awt - obsahuje komponenty grafického uživatelského rozhraní (GUI) jako jsou okna, dialogy, menu, popisky, tlačítka, textová pole atd.

    • java.awt.datatransfer - obsahuje podporu pro práci se schránkou (clipboardem).

    • java.awt.event - definuje rozhraní a třídy pro zpracování událostí, podrobněji viz. A.2..

    • java.awt.image - umožňuje manipulaci s obrázky (ve spolupráci s třídou java.awt.Image).

  • java.beans - definuje rozhraní a třídy pro vytváření komponent podle standardu JavaBeans používaných v prostředích vizuálního programování.

  • java.io - obsahuje třídy pro práci s datovými proudy, viz kap. 15..

  • java.lang - obsahuje základní třídy runtime systému (Object, Thread, Compiler, Process, Runtime, Class, ClassLoader, SecurityManager, Throwable), třídu matemackých funkcí (Math) a třídy obalující primitivní datové typy (String, Void, Byte atd.).

    • java.lang.reflect - obsahuje třídy pro introspekci, tj. zjišťování informací o třídách a objektech.

  • java.math - balík pro matematické výpočty s libovolnou přesností v celých (třída BigInteger) a desetinných číslech (třída BigDecimal).

  • java.net - umožňuje síťovou komunikaci prostřednictvím socketů (protokol TCP/IP).

  • java.rmi - obsahuje prostředky pro vývoj distribuovaných programů pomocí vzdáleného spouštění metod (Remote Method Invocation - RMI).

    • java.rmi.dgc - implementuje distribuovaný garbage collector.

    • java.rmi.registry - poskytuje registr vzdálených objektů.

    • java.rmi.server - obsahuje podporu serverové strany RMI.

  • java.security - obsahuje obecné třídy a rozhraní pro manipulaci s veřejnými a privátními klíči, digitálními podpisy, certifikáty atd.

    • java.security.acl - datové struktury pro kontrolovaný přístup k prostředkům (resources).

    • java.security.interfaces - poskytuje rozhraní pro generování klíčů podle RSA (asymetrická šifra) a DSA (digitální podpisy).

  • java.sql - umožňuje připojení a práci s SQL databázemi pomocí ovladačů JDBC (Java DataBase Connectivity).

  • java.text - umožňuje práci s textem (formátování, parsing atd.)

  • java.util - obsahuje pomocné třídy několika základních programových struktur (zásobník, slovník, hašovací tabulka), generování náhodných čísel a manipulaci s řetězci.

    • java.util.zip - umožňuje práci s komprimovanými soubory formátu ZIP a GZIP, generováí kontrolních součtů a CRC32.

Referenční popis těchto balíků a další dokumentaci obsahuje [JDK97].


  • (1) Tzn. že do dvou různých balíků lze umístit shodně pojmenované třídy a rozhraní.
  • (2) Umístění tříd a rozhraní do balíků má vliv na přístupová práva (viz 11.4.).
  • (3) Je možné namísto adresářové struktury použít databázi.
  • (4) Zápis cesty se liší podle operačního systému.
  • (5) Autoři Javy se zřejmě baví tím, že tento název občas změní - v JDK 1.1.3 plný název zní Java Platform 1.1.3 Core API.

Predchozi
Converted by Selathco v0.9 on 25.09.1999 19:46
Dalsi