Na pierwszy strzał idzie wyjaśnienie jednej z kilku nieścisłości, które pojawiły się w tym artykule. Pakiety tworzone za pomocą słowa "package" w języku Java są szeroko wykorzystywane tylko nie każdy wie z jakich powodów. Może Wy jesteście zainteresowani dlaczego stosujemy pakiety i jakie są zasady ich wykorzystywania?

UWAGA!!!

Ze względu na stwarzanie problemów przez Joomlę z powodu korzystania z samego słowa "Java" pisanego z małej litery, będę przez całość artykułu posługiwał się tą nazwą pisaną wielką literą. Przepraszam za utrudnienia jednak to prawdopodobnie wynika z kolizji nazw i Joomla musi jakoś korzystać z tego słowa podczas przetwarzania treści artykułu.

"PACKAGE" W JĘZYKU JAVA. DEFINICJA I POWODY TWORZENIA PAKIETÓW

Pakiet stanowi grupę czy też podzbiór utworzonych klas celem posegregowania ich według zastosowania. Działa to identycznie jak ma to miejsce w drzewie katalogów. Filmy pakujemy do filmów, obrazki do obrazków, a skróty do programów jeśli nie mieszczą się na pulpicie, to też powinniśmy znaleźć dla nich folder. W Javie wcale nie jest inaczej, aczkolwiek trzeba wiedzieć, że to NIE JEST jedyny powód ich stosowania.

Jeśli zajrzymy do dokumentacji to widzimy, że wszystko zbudowane z rąk firmy "Sun Microsystems" ma swoje miejsce i swój własny pakiet. A ten pakiet może mieć własne inne pakiety i dopiero te "podpakiety" mogą dysponować klasami. Słynne "ArrayList" na przykład pochodzi z pakietu "util" (skrót od "utilities"), a ten pakiet z kolei "należy" do rodziny wszystkich pakietów, "Java". W ten sposób mamy ten sam ciąg, który widzimy wielokrotnie podczas importowania, "Java. util.ArrayList".

Gdy korzystaliśmy z "BufferedReader" w tym artykule to też musieliśmy zaimportować stosowny pakiet (nie bibliotekę!). Zatem sięgaliśmy do "Java", "io" i tam mieliśmy "BufferedReader". "package" w języku Java jest wykorzystywane jeszcze z jednego powodu: minimalizują szansę na wystąpienie kolizji nazw! Jest pewne na 99%, że pracując w zespole ktoś wymyśli taką samą nazwę jak Wy. Zatem trzeba nasz pakiet osadzić w większy pakiet, który będzie miał bardziej unikatową nazwę. Odradzam wszelkich samowolek. Tak się składa, że wprowadzono obowiązującą konwencję nazewniczą. Nie muszę dopisywać, że wskazane jest jej trzymanie się!

PRZYJĘTA KONWENCJA NAZEWNICZA DLA PAKIETÓW

Przyjęło się, że pakiety tworzone przy użyciu "package" w języku Java powinny mieć strukturę nazewniczą w postaci odwróconej nazwy naszej domeny. Dlatego mogliście ujrzeć na obrazku:

pl.jasonxiii.Serialization

ponieważ zastosowałem nazwę "pl.jasonxiii.[nazwa klasy]". Tę samą postać przyjmowały klasy "Main" oraz "Point" w tym artykule. Dzięki temu, jest możliwość zminimalizowania występowania kolizji nazw w przypadku, gdyby ktoś inny na przykład zaimportował mój pakiet i też zbudowałby klasę o tej samej nazwie "Serialization". Mimo tego, że klasy nosiłyby tę samą nazwę, to wyróżniają je nazwy pakietów i w ten sposób problem znika.

KOMPILOWANIE KODU Z PAKIETÓW

Korzystając z pakietów w Javie kompilując to wszystko ręcznie przy użyciu jedynie wiersza poleceń, na pewno niejeden z Was zastanawiał się czemu znowu coś nie działa. Dzisiaj nikogo nie będzie dziwić korzystanie z dowolnego IDE, aczkolwiek warto chociaż parę razy w życiu skompilować swój kod manualnie od początku do końca, aby się dowiedzieć jak to działa w rzeczywistości. Pakiety w języku Java mocno komplikują proces ręcznej kompilacji i tym się teraz zajmiemy zanim zakończę temat pakietów.

Tym razem zapodam jedną jedyną klasę, która przyda się do eksperymentu. Jednak zapomnijcie o jakimkolwiek IDE na czas tego artykułu. Zróbcie sobie nowy katalog, a w nim utwórzcie "ciąg" podfolderów, które MUSZĄ odpowiadać ciągowi podanemu po słowie kluczowym "package" w języku Java. Czyli w folderze głównym tworzycie folder o nazwie "X", a w nim tworzycie kolejny folder "Y" (możecie po nim dać jeszcze więcej). Właśnie tam zapiszcie plik z rozszerzeniem ".java" wklejając poniższą zawartość:

package [X].[Y];

public class Main
{
	public static void main(String[] args)
	{
		System.out.println("Program działa!");
	}
}

Pakiety w języku Java są niczym innym jak ciągiem podfolderów, które przypominają strukturę drzewa. Po każdej kropce "schodzi się" poziom niżej, pisząc kolokwialnie, i w ten sposób można dostać się w każde miejsce zaczynając od "korzenia" jakim jest nasz folder główny. Po zapisaniu pliku z rozszerzeniem ".java", otwórzcie sobie wiersz poleceń (najlepiej z uprawnieniami administratora) i przy pomocy polecenia "cd", przejdźcie bezpośrednio do katalogu posiadającego folder o nazwie "X". Wpisując poniższe polecenie:

javac [X]/[Y]/[nazwa pliku źródłowego].java

kompilator Javy przejdzie wówczas po wszystkich katalogach jeden po drugim i skompiluje program o ile ciąg po słowie "package" w języku Java zgadza się ze wszystkimi podfolderami. Pakiety w języku Java są wyjątkowo czułe na literówki więc w przypadku wystąpienia błędu, upewnijcie się, że wpisaliście wszystkie nazwy perfekcyjnie. Znaki diakrytyczne też najlepiej obejść szerokim łukiem. Jeśli poprzednie polecenie niczego nie wypisuje, to znak, że kompilacja się udała. W celu uruchomienia skompilowanego programu, zostajemy w tym samym folderze i wpisujemy to:

java pl.jasonxiii.example.Main

Zwróćcie uwagę, że teraz są kropki zamiast slash'y, tak jak się wpisało w kodzie po słowie kluczowym "package". Też wyjątkowo łatwo się pomylić więc pozostaje Wam tylko "wejście w krew". Jeśli kompilacja, to znaki ukośników. Jeśli uruchamianie, to kropki. Przyjrzyjcie się poniższemu obrazkowi i zobaczcie jakie są różnice.

Podfoldery pakietu w języku Java

Pakiety tworzą "drzewiastą" strukturę katalogów, która umożliwia segregację plików źródłowych i klasowych.

Przedstawione tu tłumaczenia stanowią wstęp do kolejnego artykułu w którym będziemy wtłaczać program do archiwum JAR przy pomocy tzw. "manifestu". Oto dalsza część.


To było wyjaśnienie i teoretyczne, i praktyczne. Słowo kluczowe "package" w języku Java powinno być wykorzystywane W KAŻDYM Waszym programie i należy to robić z głową.

PODOBNE ARTYKUŁY