Java/Package

Wikibooks, manuali e libri di testo liberi.

Java

Linguaggio Java
Linguaggio Java

categoria · sviluppo · modifica
Come posso contribuire?

→ Vai su Wikiversity

Java:  Guida alla programmazioneJava/Introduzione - Specifica di linguaggio - Libreria standardJava/Comunicazione seriale

Tipi di datoJava/Tipi di datoEspressioniJava/OperatoriVariabiliJava/Variabili localiIstruzioniJava/IstruzioniStrutture di controlloJava/Strutture di controlloPackageJava/Package
Classi e oggettiJava/Classi e oggettiOggettiJava/OggettiMetodiJava/MetodiMetodi (cont.)Java/Metodi/2ArrayJava/Array
Modificatori di accessoJava/Modificatori di accessoEreditarietàJava/Ereditarietà
Gestione delle eccezioniJava/Gestione delle eccezioniGenericsJava/Generics
Thread e parallelismoJava/MultithreadingInterblocco ricontrollatoJava/Interblocco ricontrollato
Alcune differenze con il CJava/Concetti fondamentaliLessicoJava/LessicoGrammaticaJava/Grammatica

Premessa[modifica]

Il codice sorgente di un programma Java è costituito da un insieme di moduli, ognuno dei quali definisce una classe. Essi sono chiamati "unità di compilazione" (in inglese compilation unit). La definizione esatta di "unità di compilazione" dipende dal sistema di sviluppo in uso. Ad esempio, è possibile salvare le unità di compilazione all'interno di un database.

Tuttavia, spesso, le unità di compilazione sono definite come dei comuni file di testo che risiedono in una apposita cartella e che hanno estensione .java.

Il codice sorgente si scrive in un editor di testo che supporti Unicode, o con degli IDE; ad esempio, rispettivamente, il "Blocco note" di Windows e "NetBeans".

Il sorgente Java[modifica]

Unità di compilazione[modifica]

Le unità di compilazione sono organizzate in gruppi, chiamati packages. Nel caso in cui esse siano dei file, i packages sono le cartelle. I packages sono organizzati gerarchicamente, e all'interno del codice Java questa gerarchia è stabilita tramite il simbolo punto: ad esempio, java.lang è un sottopackage del package java.

L'albero delle directory[modifica]

Tutti i sorgenti Java che costituiscono un programma vengono tipicamente messi insieme al di sotto di un'unica cartella radice. La struttura delle cartelle deve riflettere la struttura dei package a cui le varie classi appartengono.

Il formato di una unità di compilazione[modifica]

Un'unità di compilazione è composta dalle seguenti sezioni, in questo ordine:

  1. indicazione del package cui appartiene la classe;
  2. sezione degli import;
  3. definizione vera e propria della classe.

Uno stesso file può contenere più di una definizione di classe, ma in questo caso non più di una di esse può essere public. Se ce ne è una public, allora questa deve coincidere con il nome del file.

Archiviare le classi[modifica]

I package sono meri contenitori di classi esattamente come le directory lo sono per i files e tra l'altro vale la stessa regola: nello stesso package non vi possono essere due classi con lo stesso nome così come nella stessa directory non vi possono essere due file con lo stesso nome.

Il programmatore così come può creare sue classi così può ordinarle in suoi package. Ordinare proprie classi può servire a ritrovarle con facilità e a riusarle, vedremo poi come, con altrettanta facilità.
Il programmatore può assegnare una classe ad un suo package usando la parola chiave package seguita da un nome attribuitogli, caratterizzante l'insieme delle classi; con questa sintassi:

package nomedelpackage;

Il nome del package dovrebbe essere indicativo delle caratteristiche della collezione delle classi. Per archiviare la classe "HelloWorld". che abbiamo visto prima, in un package di nome "saluti" dobbiamo scrivere:

package saluti;

I nomi del package devono avere una corrispondenza diretta nel filesystem: ad esempio, se si vuole archiviare il file helloWorld.class nella cartella “saluti” del file system, la cartella "saluti" dovrà essere presente, perché è qui che vogliamo conservare il file insieme ad altri dello stesso argomento e crearci la nostra collezione di classi.

Il package può avere anche più directory. Con più directory cambia di poco: metteremo un punto “.” tra una directory e l'altra; la jvm cambierà automaticamente il punto nel carattere separatore del sistema operativo usato e la classe dovrà essere archiviata nell'ultima sottodirectory.

Facciamo, per esempio, delle classi di saluto simili ad HelloWorld, in molte lingue, per tirarle fuori al bisogno, secondo la lingua parlata dagli utenti del programma.

Faremo questi file, notare il nome del package che ora sono con una directory e e una sottodirectory separate dal punto:

package saluti.inghilterra;
public class HelloWorld {
    public void faisaluto () {
       System.out.println("Hello, world!");
   }
}

e

package saluti.francia;
public class HelloWorld {
   public void faisaluto ()  {
       System.out.println("Bonjour, monde!");
   }
}

e

package saluti.italia;
public class HelloWorld {
   public void faisaluto ()  {
       System.out.println("Ciao, mondo!");
   }
}

Se archivio con un package così: “packages saluti.italia.dialetto”, allora ci sarà la cartella dialetto come sottodirectory della cartella italia. All'interno di dialetto dovranno esserci i file corrispondenti dei saluti italiani in dialetto, ognuno con un diverso nome.

L' istruzione

package nomedelpackage;

è facoltativa, è possibile non metterla: se queste non c'è, il compilatore inserisce la classe in un package di default.

Importare le classi[modifica]

Per usare le classi dei package bisogna scrivere la parola chiave import:

import nomedelpackage; 

Vogliamo riusare le classi che abbiamo già fatto. Per farlo dobbiamo dire all'interprete dove sono le classi e in contemporanea quali sono. Se volessimo richiamare le nostre classi, prima archiviate, dovremo scrivere nel codice

import saluti.inghilterra.*;

Se non mettessimo l'asterisco dovremo mettere il nome preciso del file.class. Invece e quasi sempre, abbiamo bisogno di riusare molte classi e perciò è comodo l'asterisco.

Faremo questo codice per i saluti in inglese:

   import saluti.inghilterra.*;

class Test{
   public static void main(String [] args){

         HelloWorld inglese = new HelloWorld();
         inglese.faisaluto();

}
}