Preamble

Lasaris

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.