Package (Java): differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica |
m Eliminato uno spazio nell'introduzione |
||
(21 versioni intermedie di 13 utenti non mostrate) | |||
Riga 1:
Un '''package
== Effetti dell'uso dei package ==
Un package definisce un ''namespace'' per le entità di primo livello gerarchico del linguaggio Java, ovvero [[Classe (informatica)|classi]], [[Interfaccia (informatica)|interfacce]], tipi enumerati, e [[Annotazione (Java)|annotazioni]]. Il nome completamente qualificato (FQN, ''fully qualified name'') di un'entità di primo livello comprende il nome del package come prefisso. Per esempio, la [[Classe (informatica)|classe]] <code>File</code> appartenente al package {{Codice|codice=java.io|linguaggio=Java}} ha FQN {{Codice|codice=java.io.File|linguaggio=Java}}. Due classi Java possono essere [[Omonimia|omonime]], a patto che abbiano FQN distinti. Per esempio, le librerie standard Java contengono due diverse classi chiamate <code>Node</code>, una che rappresenta nodi di un documento [[SOAP]] (con FQN {{Codice|codice=javax.xml.soap|linguaggio=Java}}) e una che rappresenta nodi di un documento nel modello [[Document Object Model|DOM]] di [[World Wide Web Consortium|W3C]] (con FQN {{Codice|codice=org.w3c.dom|linguaggio=Java}}). All'interno di un determinato package, è possibile riferirsi a un'entità usando il nome semplice; il ricorso all'FQN diventa necessario quando ci si riferisce a entità appartenenti ad altri package o in caso di ambiguità.
Oltre a svolgere questa funzione di ''namespace'', il package Java ha anche un ruolo nel contesto dei meccanismi di ''[[information hiding]]'' del linguaggio. In particolare, una classe può accedere a tutti i membri non privati delle altre classi appartenenti allo stesso package, mentre è soggetta a maggiori restrizioni nei confronti di classi appartenenti a package diversi.
== Uso dei package ==
Nei file sorgente di Java, il package a cui appartiene il file è specificato con l'istruzione
▲Nei file sorgente di Java, il package a cui appartiene il file è specificato con l'istruzione <code>package</code>:
▲<source lang="java">
package java.awt.event;
</syntaxhighlight>
In generale, classi appartenenti ad altri package dovranno riferirsi alla classe con il FQN. Come semplificazione, è possibile usare una speciale clausola {{Codice|codice=import|linguaggio=Java}} per indicare al [[compilatore]] di ricavare automaticamente il FQN di determinate classi o di classi appartenenti a determinati package. Per esempio, usando la clausola<syntaxhighlight lang="java">
import javax.xml.soap.Node
</syntaxhighlight>sarà possibile riferirsi alla classe {{Codice|codice=javax.xml.soap.Node|linguaggio=Java}} col nome semplice non qualificato (<code>Node</code>), demandando al compilatore di espanderlo sulla base dell'{{Codice|codice=import|linguaggio=Java}}, laddove sia possibile.
== Protezione di accesso dei package ==
Le classi appartenenti
Al contrario, classi contenute in altri package non possono accedere a classi o membri con accesso
▲Le classi appartenenti ad un package possono accedere altre classi ed in generale membri con accesso ''default'' e membri con accesso ''<code>protected</code>''. L'accesso ''default'' rappresenta il comportamento generale, che si ha quando non viene specificato nessun modificatore d'accesso durante la dichiarazione del membro.
I
▲Al contrario, classi contenute in altri package non possono accedere a classi o membri con accesso ''default''. Da notare che membri <code>protected</code> possono essere usati da classi in altri package che siano state dichiarate sottoclassi della classe in questione.
▲== Convenzioni sui nomi dei Package ==
▲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 [http://java.sun.com/docs/books/jls/third_edition/html/j3TOC.html 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.
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
== Package di base contenuti nella [[J2SE]] 6.0 ==▼
Questa lista include i package di base contenuti nella versione 6.0 della [[Java Platform, Standard Edition]].
{|
| {{Javadoc:SE|package=java.lang|java/lang}} ||
|-
| {{Javadoc:SE|package=java.util|java/util}} ||
|-
| {{Javadoc:SE|package=java.io|java/io}} ||
|-
| {{Javadoc:SE|package=java.math|/java/math}} ||
|-
| {{Javadoc:SE|package=java.nio|java/nio}} ||
|-
| {{Javadoc:SE|package=java.net|java/net}} ||
|-
| {{Javadoc:SE|package=java.security|java/security}} ||
|-
| {{Javadoc:SE|package=java.sql|java/sql}} ||
|-
| {{Javadoc:SE|package=java.awt|java/awt}} ||
|-
| {{Javadoc:SE|package=javax.swing|javax/swing}} ||
|}
== Collegamenti esterni ==
* {{Collegamenti esterni}}
*{{
*{{
{{Portale|informatica}}
▲*{{en}} [http://java.sun.com/docs/books/jls/third_edition/html/packages.html#7.7 Java Language Specification, 3rd edition: Unique Package Names]
▲*{{en}} [http://java.sun.com/docs/codeconv/html/CodeConventions.doc8.html Java Package Naming Conventions]
[[
|