Package

Le classi Java possono essere raggruppate in raccolte denominate package (pacchetti). I package sono utili per: • organizzare logicamente le classi (ad es. in base alle funzioni svolte); • separare le nostre classi da quelle di altri programmatori; • garantire l'unicità dei nomi delle classi (classi diverse ma con nomi identici possono essere collocate in package differenti). Inoltre, la collocazione di classi in package, permette di accedere ad una classe senza che essa debba essere necessariamente presente nella directory di lavoro corrente.

Nomi dei package
Da un punto di vista logico, i package possono essere paragonati alle directory (cartelle) di un file system. Basti pensare che anche i package hanno un'organizzazione gerarchica (package e sottopackage) come le directory (directory e sottodirectory - cartelle e sottocartelle).

appunti

informatica

m atem atica

Supponiamo che appunti, informatica e matematica siano nomi di cartelle. Nei sistemi operativi Windows le sottocartelle sono individuate mediante il nome di percorso (pathname): appunti\informatica appunti\matematica Nei sistemi operativi Unix si utilizza un diverso separatore: appunti/informatica appunti/matematica Se appunti, informatica e matematica sono package Java, l'individuazione dei sottopackage informatica e matematica avviene in maniera analoga a quella delle sottodirectory; il separatore utilizzato in questo caso è il punto: appunti.informatica appunti.matematica Nota: per convenzione, i nomi dei package Java contengono solo lettere minuscole.

Autore: Cinzia Bocchi Ultimo aggiornamento: 10/10/11

1

La definizione del nome di un package è un'operazione delicata poiché è necessario garantire l'unicità dei nomi, soprattutto quando si desidera distribuire il package creato. Per esempio, se distribuiamo un package di nome stat, contenente classi per la gestione di calcoli statistici, non possiamo escludere che un package con lo stesso nome sia già presente sul disco dei nostri clienti. Le specifiche di Java suggeriscono di utilizzare, quando è possibile, un nome di package che inizia con il nome dell'azienda proprietaria del codice o con il nome del dominio Internet (che è univoco) proprio o dell'azienda per la quale si lavora. Se non si possiede un dominio Internet o se non si produce software per un'azienda, è consigliabile utilizzare una combinazione che sia il più possibile univoca, per esempio formata a partire dai propri dati anagrafici: nomecognome.stat Le classi Java standard sono organizzate in una gerarchia di package al cui vertice si trovano java e javax. L'utente non può utilizzare questi nomi per definire i propri package.

Inserimento di classi in package
Una volta definito il nome di un package, affinché una classe possa essere archiviata al suo interno, è necessario aggiungere un enunciato package come primo enunciato del file sorgente: package miopackage; L’enunciato non deve assolutamente essere preceduto da altre linee di codice. Una classe priva di enunciato package viene collocata nel package di default (la cartella di lavoro corrente) che non ha un nome.

Utilizzare le classi di un package
Una classe può utilizzare tutte le classi del suo package, compreso quello predefinito e tutte le classi pubbliche degli altri package. Quando una classe desidera accedere ad un'altra classe del suo stesso package (in altre parole, presente all'interno della sua stessa cartella) non deve fare nient'altro che usarla. Quando si desidera accedere a classi pubbliche di altri package, è necessario specificare il nome completo della classe composto dal nome del pacchetto a cui appartiene, seguito dal nome della classe. Per esempio: java.util.Date data; java.awt.Button pulsante; myclass.ConsoleReader console; In alternativa è possibile utilizzare l'istruzione import. Con import è possibile importare una classe specifica o un intero package, così da non indicare più i nomi completi delle classi; per esempio: import java.util.Date; import java.awt.Button; import myclass.ConsoleReader; oppure oppure oppure import java.util.*; import java.awt.*; import myclass.*;

Autore: Cinzia Bocchi Ultimo aggiornamento: 10/10/11

2

La prima soluzione è poco pratica perché costringe il programmatore a scrivere molto, ma può rivelarsi utile quando si presenta il rischio di un conflitto di nomi. Per esempio, i package java.util e java.sql hanno entrambi una classe Date. Se si importano i due package con le direttive import java.util.*; import java.sql.*; la dichiarazione Date data; produce un errore in quanto il compilatore non è in grado di capire a quale classe Date ci stiamo riferendo. In situazioni come queste è necessario scrivere il nome della classe per esteso: java.util.Date data; oppure java.sql.Date data; Le istruzioni import devono essere collocate all'inizio del file sorgente e fuori dal codice della classe.

Quest'opera è stata rilasciata con licenza Creative Commons Attribution-ShareAlike 3.0 Unported. Per leggere una copia della licenza visita il sito web http://creativecommons.org/licenses/by-sa/3.0/ o spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.

Autore: Cinzia Bocchi Ultimo aggiornamento: 10/10/11

3