Dione
Z. Kotala, P. Toman: Java
Predchozi ( Obsah ) Dalsi

12. Balíky (packages)

Balíky (packages) slouží k vytváření nových prostorů jmen (namespaces) (1) a umožňují tak 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 a rozhraní

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 a/nebo rozhraní. K tomu slouží klíčové slovo import:

   import úplnéJménoTřídyNeboRozhraní ;

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 a rozhraní 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 (například 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 a rozhraní 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).

Pozn.: Jména balíků začínajících na java jsou rezervována a nedoporučuje se jich používat pro vlastní účely. Například internetové prohlížeče z bezpečnostních důvodů nedovolují appletům stahovat třídy z těchto balíků z jiného, než lokálního počítače.

12.3. Java Core API

Java Platforma definuje 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 matematický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 volání metod (Remote Method Invocation - RMI).

    • java.rmi.dgc - definuje rozhraní distribuovaného garbage collectoru.

    • 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 - definuje rozhraní 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 (vektor, zásobník, slovník, hašovací tabulka), třídu pro generování náhodných čísel, manipulaci s textem a časovými formáty.

    • java.util.zip - umožňuje práci s komprimovanými soubory formátu ZIP a GZIP, generování 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 například databázi s přístupem přes speciální class loader.
  • (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 0.91 on 04.02.2001 19:33
Dalsi