Package (Java)

Da Wikipedia, l'enciclopedia libera.

Un package Java è un meccanismo per organizzare classi Java all'interno di sottogruppi ordinati. Questi package possono essere memorizzati in file compressi chiamati file JAR, permettendo la trasmissione di più classi in una sola volta. I programmatori spesso usano i package per riunire classi logicamente correlate o che forniscono servizi simili. Gli attributi si inizializzano con package nomeattributo. Le librerie API Java ad esempio sono organizzate in una tipica struttura a package e classi gerarchizzate.

I file sorgente di classi Java possono includere un'istruzione package all'inizio del file per indicare di quale package fa parte.

  • Un package indica un unico namespace per le classi che contiene.
  • Le classi possono accedere ai metodi e alle variabili protected delle altre classi che fanno parte dello stesso package.
  • Un package può contenere i seguenti tipi di membri:

Uso dei package[modifica | modifica sorgente]

Nei file sorgente di Java, il package a cui appartiene il file è specificato con l'istruzione package:

package java.awt.event;

Per usare un package all'interno di un file sorgente Java è necessario includere le classi di quel package con l'istruzione import. L'istruzione:

import java.awt.event.*;

include tutte le classi contenute nel package java.awt.event package, mentre

import java.awt.event.ActionEvent;

include solo la classe ActionEvent contenuta in quel package. Dopo una delle precedenti invocazioni dell'istruzione import la classe ActionEvent può essere utilizzata usando il suo semplice nome di classe:

ActionEvent myEvent = new ActionEvent();

È anche possibile usare direttamente il nome intero della classe, evitando così l'istruzione import. Ad esempio:

java.awt.event.ActionEvent myEvent = new java.awt.event.ActionEvent();

Protezione di accesso dei package[modifica | modifica sorgente]

Le classi appartenenti ad un package possono accedere altre classi ed in generale membri con accesso default e membri con accesso protected. L'accesso default rappresenta il comportamento generale, che si ha quando non viene specificato nessun modificatore d'accesso durante la dichiarazione del membro. Al contrario, classi contenute in altri package non possono accedere a classi o membri con accesso default. Da notare che membri protected possono essere usati da classi in altri package che siano state dichiarate sottoclassi della classe in questione.

Convenzioni sui nomi dei Package[modifica | modifica sorgente]

I Package sono di solito definiti usando una struttura gerarchica, indicando i livelli di gerarchia con dei punti. Anche se i package più in basso nella gerarchia sono spesso chiamati sotto-package di altri package, non c'è nessuna relazione semantica. Il documento Java Language Specification stabilisce le convenzioni da adottare nei nomi dei package, così da evitare di pubblicarne due con lo stesso nome. Le convenzioni descrivono come creare nomi unici, in modo da assicurare che package di uso generale e di larga distribuzione non abbiano nomi che possano generare ambiguità.

In generale, un nome comincia con il dominio di primo livello dell'organizzazione che lo produce, seguito dal dominio e da altri eventuali sottodomini, elencati in ordine inverso. L'organizzazione può infine scegliere un nome specifico per quel particolare package. Inoltre, sempre per convenzione, i nomi dei package dovrebbero contenere solo lettere minuscole.

Ad esempio, se un'organizzazione canadese chiamata MySoft crea un package che si occupa di frazioni, chiamare il package ca.mysoft.fractions lo distingue da un altro package simile creato da un'altra compagnia. Infatti se una compagnia americana omonima crea un package sulle frazioni, ma lo chiama com.mysoft.fractions, le classi nei due package saranno tutte definite in namespace separati ed unici.

Altre convenzioni per evitare le ambiguità e regole per dare nomi ai package quando in dominio Internet non può essere direttamente usato nel nome sono descritte nella sezione 7.7 della Java Language Specification.

Package di base contenuti nella J2SE 6.0[modifica | modifica sorgente]

java.lang — funzionalità di base del linguaggio e tipi di dato fondamentali
java.util — classi di collezione (Strutture dati)
java.io — operazioni su file
java.math — aritmetica multiprecisione
java.nio — il nuovo framework I/O per Java
java.net — operazioni di rete, socket, ricerca DNS, ...
java.security — generazione di chiavi crittografiche, sicurezza e crittografia
java.sql — Java Database Connectivity (JDBC) per facilitare l'accesso a database
java.awt — struttura di base per componenti GUI (Graphical User Interface)
javax.swing — struttura avanzata ed indipendente dalla piattaforma per componenti GUI (Graphical User Interface)

Collegamenti esterni[modifica | modifica sorgente]