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 Java''' è un meccanismo per organizzare [[classe (informatica)|classi]] [[Java (linguaggio di programmazione)|Java]] all'internoin digruppi sottogruppilogici, ordinati.principalmente Questi(ma packagenon possonosolo) essereallo memorizzatiscopo indi [[file]]definire ''[[compressione dati|compressinamespace]]'' chiamatidistinti [[JARper (formatodiversi dicontesti. file)|fileIl JAR]],package permettendoha lalo trasmissionescopo di piùriunire [[Classe (informatica)|classi]] in(o unaentità solaanaloghe, volta. Iquali [[programmatoreInterfaccia (informatica)|programmatoriinterfacce]] spessoed usano i package per riunire classienumerazioni) logicamente correlate o che forniscono servizi simili. GliPer attributi si inizializzano con package nomeattributo.esempio, Lele [[libreriaLibreria (informaticasoftware)|librerie]] [[Applicationstandard programmingJava interface|API]]sono Javaorganizzate adin esempioun sistema di package sonoche organizzatecomprende inper unaesempio tipicaelementi strutturastrutturali adel packagelinguaggio servizi di rete e classicosì gerarchizzatevia.
 
== Effetti dell'uso dei package ==
I file sorgente di classi Java possono includere un'istruzione '''<code>package</code>''' all'inizio del file per indicare di quale package fa parte.
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.
* 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:
** [[Classe (informatica)|Classi]]
** [[Interfaccia (informatica)|Interfacce]]
** Tipi enumerati
** Annotations
 
== Uso dei package ==
Nei file sorgente di Java, il package a cui appartiene il file è specificato con l'istruzione <code>{{Codice|codice=package</code>|linguaggio=Java}}:
 
<sourcesyntaxhighlight lang="java">
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>
</source>
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">
Per usare un package all'interno di un file sorgente Java è necessario includere le classi di quel package con l'istruzione <code>import</code>. L'istruzione:
import javax.xml.soap.Node
<source lang="java">
</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.
import java.awt.event.*;
</source>
 
include tutte le classi contenute nel package <code>java.awt.event</code> package, mentre
<source lang="java">
import java.awt.event.ActionEvent;
</source>
 
include solo la classe <code>ActionEvent</code> contenuta in quel package. Dopo una delle precedenti invocazioni dell'istruzione <code>import</code> la classe <code>ActionEvent</code> può essere utilizzata usando il suo semplice nome di classe:
<source lang="java">
ActionEvent myEvent = new ActionEvent();
</source>
 
È anche possibile usare direttamente il nome intero della classe, evitando così l'istruzione <code>import</code>. Ad esempio:
<source lang="java">
java.awt.event.ActionEvent myEvent = new java.awt.event.ActionEvent();
</source>
 
== Protezione di accesso dei package ==
Le classi appartenenti ada un package possono accedere altre classi ede in generale membri con accesso ''{{Codice|codice=default''|linguaggio=Java}} e membri con accesso ''<code>{{Codice|codice=protected</code>''|linguaggio=Java}}. L'accesso ''{{Codice|codice=default''|linguaggio=Java}} 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 ''{{Codice|codice=default''|linguaggio=Java}}. Da notare cheI membri <code>{{Codice|codice=protected</code>|linguaggio=Java}} possono invece essere usati da classi in altri package che siano state dichiarate [[Sottoclasse (informatica)|sottoclassi]] della classe in questione.
 
== Convenzioni sui nomi dei Packagepackage ==
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 Packagepackage 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à.
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.
 
AdPer esempio, se un'organizzazione [[Canada|canadese]] chiamata MySoft crea un package che si occupa di frazioni, chiamare il package <tt>{{Codice|codice=ca.mysoft.fractions</tt>|linguaggio=Java}} lo distingue da un altro package simile creato da un'altra compagnia. Infatti se una compagnia [[Stati Uniti d'America|americanastatunitense]] [[omonimo|omonima]] crea un package sulle frazioni, ma lo chiama <tt>{{Codice|codice=com.mysoft.fractions</tt>|linguaggio=Java}}, le classi nei due package saranno tutte definite in ''namespace'' separati ede 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 [http://java.sun.com/docs/books/jls/third_edition/html/packages.html#7.7 sezione 7.7] della ''Java Language Specification''.
 
== Package di base contenuti nella [[J2SE]] 6.0 ==
 
== 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}} || - funzionalità di base del linguaggio e [[Tipo di dato|tipi di dato]] fondamentali
|-
| {{Javadoc:SE|package=java.util|java/util}} || - classi di collezione ([[Struttura dati|Strutturestrutture dati]])
|-
| {{Javadoc:SE|package=java.io|java/io}} || - operazioni su file
|-
| {{Javadoc:SE|package=java.math|/java/math}} || - aritmetica multiprecisione
|-
| {{Javadoc:SE|package=java.nio|java/nio}} || - il nuovo ''[[framework]]'' [[I/O]] per Java
|-
| {{Javadoc:SE|package=java.net|java/net}} || - operazioni di rete, [[Socket (reti)|socket]], ricerca [[Domain Name System|DNS]], ...
|-
| {{Javadoc:SE|package=java.security|java/security}} || - generazione di [[Chiave crittografica|chiavi crittografiche]], [[Sicurezza informatica|sicurezza]] e [[crittografia]]
|-
| {{Javadoc:SE|package=java.sql|java/sql}} || - [[Java DatabaseDataBase Connectivity]] ([[JDBC]]) per facilitare l'accesso a [[database]]
|-
| {{Javadoc:SE|package=java.awt|java/awt}} || - struttura di base per componenti [[GUI]] (Graphical User Interface (GUI)
|-
| {{Javadoc:SE|package=javax.swing|javax/swing}} || - struttura avanzata ede indipendente dalla piattaforma per componenti GUI (Graphical User Interface)
|}
 
== Collegamenti esterni ==
* {{Collegamenti esterni}}
*{{en}}cita [web|http://java.sun.com/docs/books/jls/third_edition/html/packages.html#7.7 |Java Language Specification, 3rd edition: Unique Package Names]|lingua=en}}
*{{en}}cita [web|http://java.sun.com/docs/codeconv/html/CodeConventions.doc8.html |Java Package Naming Conventions]|lingua=en}}
 
{{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]
 
[[Categoria:Linguaggio Java]]
 
[[enCategoria:Java package]]
[[es:Paquete Java]]
[[ja:パッケージ (Java)]]
[[nl:Java package]]
[[ru:Package (Java)]]