Pakiety w Javie

advertisement
Pakiety w Javie
Łukasz Smyczyński (132834)
Czym są pakiety?
• Klasy w Javie są grupowane w pewne zbiory
zwane pakietami.
• Pakiety są więc pewnym podzbiorem biblioteki,
zawierają klasy powiązane tematycznie.
• Pakiety mogą także zawierać definicje
interfejsów.
Czym są pakiety?
• Pakiety umożliwiają oddzielenie naszego
kodu od kodu bibliotek napisanych przez
innych programistów.
• Głównym powodem stosowania pakietów
jest gwarancja unikalności nazw klas.
• Wraz z JDK otrzymujemy dość pokaźną
liczbę pakietów, zawierających w sumie
kilka tysięcy klas.
Przegląd standardowych pakietów
Java posiada bogatą biblioteką standardowych
pakietów, i tak do podstawowych należą:
•java.lang: pakiet zawierający wszystkie podstawowe klasy
Javy. Nie musi być jawnie importowany, ponieważ
kompilator czyni to w sposób automatyczny.
•java.io: klasy implementujące operacje wejścia/wyjścia.
•java.util: pomocnicze klasy użytkowe (np. generacja liczb
losowych, operacje na ciągach znaków, itp.)
Przegląd standardowych pakietów
Java posiada bogatą biblioteką standardowych
pakietów, i tak do podstawowych należą:
•java.net: zawiera klasy konieczne do tworzenia
oprogramowania wykorzystującego sieć. Wraz z pakietem
"java.io" umożliwia dostęp do sieci w celu ładowania lub
wysyłania plików.
•java.awt: klasy służące do tworzenia graficznego
interfejsu użytkownika (GUI).
•java.applet: pakiet zawierający klasy używane podczas
tworzenia apletów.
Plik źródłowy w Javie
Ogólna postać pliku źródłowego Javy wygląda
następująco:
• pojedyncza instrukcja package (opcjonalna)
• dowolna liczba instrukcji import (opcjonalne)
• pojedyncza deklaracja klasy publicznej (wymagana)
• dowolna liczba klas prywatnych (opcjonalna)
Tworzenie pakietów
• Na samym początku pliku źródłowego Javy może
znajdować się instrukcja package, informująca
kompilator o nazwie pakietu, do którego mają należeć
wszystkie zdefiniowane klasy.
• Pominięcie instrukcji package powoduje, że klasy z
danego pliku są umieszczane w pakiecie domyślnym,
nie posiadającym nazwy.
• Użyta instrukcja package musi stanowić w pliku
pierwszy element nie będący komentarzem
Instrukcja package
• Ogólna postać instrukcji package wygląda następująco:
package nazwapakietu;
• A więc jeśli instrukcja pakietu umieszczona jako pierwsza
komenda pliku źródłowego, np.
package mojpakiet;
to:
• Wszystkie klasy w pliku należą do pakietu mojpakiet.
• Inne pliki mogą również posiadać tą instrukcję: pakiet rozkłada
się bowiem na wiele plików.
• Wszystkie pliki .java są zapisywane w katalogu mojpakiet.
Hierarchia pakietów
• Można również tworzyć strukturę hierarchiczną pakietów,
oddzielając ich nazwy za pomocą kropki.
package pakiet1.pakiet2.pakiet3
• Struktura pakietów musi być skorelowana ze strukturą
katalogów na dysku, a więc pliki zachowywane są w katalogu
pakiet1\pakiet2\pakiet3 system Windows
pakiet1/pakiet2/pakiet3 system Linux
• Należy pamiętać o tym, że w Javie rozróżniane są małe i duże
litery, zarówno w nazwach klas, jak i w nazwach plików i
katalogów.
Zmienna CLASSPATH
• Istnieje możliwość umieszczania pakietów w różnych miejscach, o
ile tylko ich struktura pokrywa się ze strukturą katalogów na dysku.
Trzeba jednak również zmodyfikować zmienną środowiskową
CLASSPATH, aby wskazywała ona na początek struktury, w której
będziemy zapisywać nasze programy.
• Np. jeżeli nasz plik zawierający definicję pakietu mojpakiet
znajduje się w C:\MyJava\mojpakiet to zmienna CLASSPATH powinna
mieć wartość . ; C:\MyJava
• Kropka w powyższym zapisie oznacza katalog roboczy.
• Java poszukuje pakietów przeszukując kolejne katalogi
wymienione w ścieżce CLASSPATH.
Pakiety: przykład
package mojpakiet;
public class StanKonta {
String nazwa;
double stankonta;
public StanKonta (String n, double s) {
nazwa = n;
stankonta = s;
}
public void pokaz() {
if (stankonta < 0)
System.out.println (nazwa + ": " + stankonta + " zl");
}
}
Pakiety: przykład
package mojpakiet;
class Pakiet {
public static void main (String[ ] args) {
StanKonta biezacy [ ] = new StanKonta [6];
biezacy [0] = new StanKonta ("T.Bialy" , 132.12 );
biezacy [1] = new StanKonta ("J.Schmidt" , -56.12 );
biezacy [2] = new StanKonta ("A.Moraw" , 34.75 );
biezacy [3] = new StanKonta ("K.Milski" , -46.95 );
biezacy [4] = new StanKonta ("L.Podly" , -134.14 );
biezacy [5] = new StanKonta ("A.Bakow" , 14.75 );
for (int i=0 ; i<6 ; i++)
biezacy[ i ].pokaz ( );
}
}
J.Schmidt:
-56.12 zl
K.Milski:
-46.95 zl
L.Podly:
-134.14 zl
Jak nazywać pakiety?
• Nazwy pakietów skonstruowane są podobnie jak ścieżki dostępu do
plików. Na przykład klasa Date znajdująca się w pakiecie
java.util ma pełną nazwę: java.util.Date, co oznacza:
- java - pakiet należy do zestawu standardowych pakietów Javy
- util - to różnego typu klasy użytkowe (pomocnicze)
- Date - konkretna nazwa klasy.
• Firma Sun zaleca, by w nazewnictwie klas niestandardowych przed
właściwą nazwą pakietu stosować odwróconą nazwę domeny
internetowej autora pakietu.
Np. pl.wroc.pwr.kmeif.mylibrary (odwrócona kolejność!)
• Dzięki takiemu systemowi nazwy klas są niepowtarzalne, co pozwala
uniknąć niejednoznaczności.
Korzystanie z pakietów
• Klasa może używać wszystkich klas ze swojego pakietu oraz
wszystkich klas publicznych należących do innych pakietów.
• Istnieją dwa sposoby dostępu do klasy publicznej innego pakietu:
1) Możemy dołączyć pełną nazwę pakietu na początku każdej nazwy
klasy, na przykład:
java.util.Date dzisiaj = new java.util.Date();
Jest to jednak bardzo niepraktyczny sposób.
2) Możemy zaimportować konkretną klasę albo cały pakiet korzystając
ze słowa kluczowego import.
Importowanie pakietów
• Słowo kluczowe import umożliwia bezpośrednie odwołanie się do
klasy przez jej nazwę.
• Możemy zaimportować cały pakiet albo konkretną klasę.
Umieszczamy w tym celu słowo import na początku pliku źródłowego
(ale pod słowem package), na przykład:
import java.util.*;
- cały pakiet java.util
import java.util.Date; - konkretna klasa
• Nie trzeba importować pakietu java.lang , gdyż kompilator dołącza
go automatycznie.
• Po zaimportowaniu możemy już używać
Date dzisiaj = new Date();
Konflikty nazw
• Jeśli klasa o tej samej nazwie występuje w dwóch różnych
importowanych do programu pakietach (np.klasa Date w poniższych
pakietach):
import java.util.*;
import java.sql.*;
to jeżeli użyjemy teraz klasy Date, otrzymamy błąd kompilacji, gdyż
procesor nie potrafi określić której klasy Date chcemy użyć.
• Można rozwiązać ten problem stosując jeszcze jedno polecenie
import java.util.Date;
lub przez użycie pełnej nazwy pakietu, na przykład
Java.util.Date termin = new java.util.Date();
Importowanie klas: przykład
package mojpakiet;
public class StanKonta {
String nazwa;
double stankonta;
public StanKonta (String n, double s) {
nazwa = n;
stankonta = s;
}
public void pokaz() {
if (stankonta < 0)
System.out.println (nazwa + ": " + stankonta + " zl");
}
}
Importowanie klas: przykład
import mojpakiet.*;
public class Imporotwanie {
public static void main ( String args[] ) {
StanKonta test = new StanKonta ("T.Biały",-12.57);
test.pokaz( );
}
}
T.Biały:
-12.57 zl
Literatura
• Patrick Naughton „Podręcznik języka programowania Java”
• Bruce Eckel – „Thinking in Java”
Koniec
Dziękuję za uwagę.
Download