2.6. Balíky tříd

Obsah

2.6.1. Odkaz na třídu v jiném balíku
2.6.2. Standardní programové balíky
2.6.3. Úlohy k řešení

Při vytváření jednoduchých příkladů jsme ještě bez problémů schopni volit taková jména tříd, aby byla jednoznačná, a nemáme ani potíže s orientací ve zdrojových souborech. Ovšem pokud budeme součástí týmu, jenž má řešit rozsáhlý projekt zahrnující stovky tříd, bude situace zcela odlišná. V minulosti se tato situace řešila často tím způsobem, že jednotlivé skupiny programátorů používaly předem definované předpony v názvech tak, aby nemohlo dojít ke kolizím.

V jazyce Java jsou pro oddělení prostorů jmen k dispozici tzv. balíky (packages), jejichž jména jsou tvořena hierarchicky identifikátory oddělenými tečkami. Tuto hierarchii můžeme chápat také jako cestu v adresářové struktuře, kde na té nejnižší úrovni jsou uložené přímo jednotlivé třídy. To dobře odpovídá i způsobu, jakým se v prostředí Javy zdrojové i cílové soubory organizují a vyhledávají.

Každý zdrojový text může být zařazen do jednoho balíku a může obsahovat i více tříd, i když to nebývá příliš časté. Balík pak vytváří prostor, v rámci něhož teprve musejí být jména tříd jednoznačná; zároveň je to také prostor zajišťující zapouzdření tříd v rámci jednoho balíku. Z jiných balíků jsou přístupné pouze ty třídy, které jsou označeny atributem public. Zároveň všechny proměnné a metody tříd, které neobsahují žádný explicitní atribut private, protected nebo public, jsou přímo dostupné všem metodám tříd z téhož balíku. To značně usnadňuje komunikaci v rámci tříd konkrétního balíku, kde by konzistence měla být zajištěna přímo jeho autory a není třeba všechny přístupy k atributům řešit voláním přístupových metod.

Prozatím jsme ve zdrojových textech žádný název balíku neuváděli. To pouze znamená, že všechny naše třídy byly umístěny do implicitního balíku s prázdným názvem a veškeré soubory se pak hledaly v aktuálním adresáři. Uvedeme-li tedy na začátku souboru řádek

package pte.priklady;
budou všechny dále definované třídy součástí balíku pte.priklady; zdrojové soubory bychom pak měli umístit do podadresáře pte/priklady, kam se budou ukládat také soubory přeložených tříd. Při překladu však máme možnost umístění cílových souborů změnit.