Organizace tříd do balíků

  • Třídy zorganizujeme do balíků.

  • V balíku jsou vždy umístěny související třídy.

  • Co znamená související?

    • třídy, jejichž objekty spolupracují

    • třídy na podobné úrovni abstrakce

    • třídy ze stejné části reality

Zápis třídy do zdrojového souboru

  • Třída Person bude v souboru Person.java

  • Tento soubor bude v adresáři cz/muni/fi/pb162

  • Pozor na velká/malá písmena — v obsahu i názvu souboru i adresářů.

package cz.muni.fi.pb162; // zařazení do balíku
public class Person {
   //... popis vlastností (proměnných, metod...) osoby ...
}

Balíky

  • Balíky obvykle organizujeme do hierarchií, např.:

    • cz.muni.fi.pb162

    • cz.muni.fi.pb162.banking

    • cz.muni.fi.pb162.banking.credit

  • Neplatí však, že by

    • třídy "dceřinného" balíku (např. cz.muni.fi.pb162.banking.credit)

    • byly zároveň třídami balíku "rodičovského" ( cz.muni.fi.pb162.banking )!!!

  • Hierarchie balíků má tedy význam spíše pro srozumitelnost a logické členění.

  • Jinak rozhoduje pouze relace "je ve stejném balíku" či "není ve stejném balíku".

Příslušnost třídy k balíku

  • Deklarujeme ji syntaxí: package názevbalíku;

  • Uvádíme obvykle jako první deklaraci v zdrojovém souboru.

  • Příslušnost k balíku musíme současně potvrdit správným umístěním zdrojového souboru do adresářové struktury;

  • např. zdrojový soubor třídy Person umístíme do podadresáře cz/muni/fi/pb162

  • Neuvedeme-li příslušnost k balíku, stane se třída součástí implicitního balíku

  • implicitní balík nelze pro jakékoli větší a/nebo znovupoužívané třídy či dokonce programy doporučit a zde nebude tolerováno!

Deklarace import názevbalíku.NázevTřídy

  • Deklarace import souvisí s organizací tříd programu do balíků.

  • Umožní použít identifikátor třídy v rámci jiné třídy.

  • Syntaxe: import názevbalíku.NázevTřídy;

  • Kde název balíku je následovaný názvem třídy.

  • Píšeme obvykle ihned po deklaraci příslušnosti k balíku (package názevbalíku;).

  • Import není nutné deklarovat mezi třídami téhož balíku!

Deklarace import názevbalíku.*

  • Pak lze používat všechny třídy z uvedeného balíku

  • Doporučuje se "import s hvězdičkou" nepoužívat vůbec:

    • jinak nevíme nikdy s jistotou, ze kterého balíku se daná třída použila;

    • i profesionálové to však někdy používají :-)

    • lze tolerovat tam, kde používáme z určitého balíku většinu tříd;

    • v tomto úvodním kurzu většinou tolerovat nebudeme!

  • "Hvězdičkou" stejně nezpřístupníme třídy z podbalíků, např.

  • import cz.* nezpřístupní třídu cz.muni.fi.pb162.Person

Deklarace import static názevbalíku.NázevTřídy.NázevMetody

  • Lze pak použít dokonce identifikátor metody/proměnné třídy v rámci jiné třídy.

  • Relevantní pouze pro statické metody a proměnné;

  • tedy i konstanty;

  • opět možno použít variantu importu s hvězdičkou;

  • výborně použitelné i pro některé věci z Core API, např. Math, příklad z Wikipedia:Static import

Příklad import static

import static java.lang.Math.*;
import static java.lang.System.out;
public class HelloWorld {
   public static void main(String[] args) {
      out.println("Hello World!");
      out.println("Considering a circle with a diameter of 5 cm, it has:");
      out.println("A circumference of " + (PI * 5) + " cm");
      out.println("And an area of " + (PI * pow(2.5,2)) + " sq. cm");
   }
}
Note
Všimněte si použití rovněž pro výstupní proud System.out.