Java/Classi e oggetti: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Paidos (discussione | contributi)
Paidos (discussione | contributi)
Riga 146:
Compilando “a mano” la procedura diventa trasparente, più chiara, almeno per quanto riguarda la formazione di pacchetti di classi del programmatore.
 
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, dovremo creare 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.
 
DovremoDovrà crearla noiesserci la directory saluti mae dunque si pongono degli interrogativi: dove montareè montata la cartella saluti? A che livello del file System? Ricordiamoci che dopo deve essere anche ritovata e occorre sapere non solo il suo nome ma anche dov'è.
 
Entra in gioco un percorso parziale che comincia dalla root e si interrompe al livello superiore più vicino alla directory del package, il percorso a monte della cartella “saluti”:. questoQuesto percorso è importante se vogliamo ritrovare poi le nostre classi. Questo indirizzopercorso si chiama "CLASSPATH". e questo"CLASSPATH" è anche il nome della variabile di sistema che va settata con il medesimovalore del percorso. Del CLASSPATH ne parliamo dopo.
 
La JVM, per riutilizzare e ritrovare le classi, pur conoscendone il nome, non sa dove sono montate. La JVM sa che la classe HelloWorld è nella cartella “saluti” ma non sa dove è questa, sà mezzo percorso, quello del package, l'ultima parte dell'indirizzo assoluto. E' Lanecessario perciò che la prima parte dell'indirizzo deve essere già esistente sul disco fisso e dobbiamociò deve essere specificarlospecificato anche al compilatore.
 
Ora poniamo che sia "/home/giovanni/mieclassi/", questo indirizzo lo dobbiamo specificare quando compiliamo le classi da archiviare, eed siè questo con l'opzioneil "-dCLASSPATH" di "javac" seguito dal CLASSPATH, in questo modo: .
 
Si realizza con l'opzione "-d" di "javac" seguito dal CLASSPATH, in questo modo:
l'indirizzo /home/giovanni/mieclassi/ deve già esistere realmente sul fyle system
 
ripeto che l'indirizzo /home/giovanni/mieclassi/ deve già esistere realmente sul fyle system
 
<source lang=java>
Line 163 ⟶ 165:
 
Il compilatore leggerà nell'istruzione "package" il nome "saluti", creerà la directory e la accoderà. Automaticamente ci sarà /home/giovanni/mieclassi/saluti e lì metterà HelloWorld.class.
In questo caso è il compilatore che ha creato la cartella "saluti".
Non dobbiamo fare altro.
Non dobbiamo fare altro. Avremo archiviato la classe HelloWorld nel package saluti.
 
Questo indirizzo CLASSPATH dovrà essere specificatolo stesso anche nel CLASSPATH al momento della lettura delle classi, cosicchè sia quando compiliamo un sorgente sia archiviando le classi e sia quandoriusandole loin compiliamo riusando le classilettura illa compilatoreJVM si riferirà alla medesima locazione di storage delle classi.
 
Il package può avere anche più directory. Nel caso produciamo molte classi esse infatti andranno stipate in cartelle diverse ed il nome della cartella, chiaramente, indicherà il contenuto.
 
Con più directory ambiacambia di poco: metteremo un punto “.” tra una directory e l'altra sul codice dopo l'istruzione package. La jvm cambierà automaticamente il punto nel carattere separatore del sistema operativo usato e la classe dovrà essere archiviata nell'ultima sottodirectory.
 
Mettiamo che voglio fare delle classi di saluto simili ad HelloWorld ma in molte lingue e tirarle fuori, quando ne ho bisogno, secondo la nazionalità degli utenti del programma.
 
Faremo questi file, notare il nome del package che ora sono con una directory e e una sottodirectory separate dal punto:
Faremo questi file:
<source lang=java>
package saluti.inghilterra;
Line 203 ⟶ 206:
Sul disco preparerò la directory “saluti” con all'interno le cartelle “inghilterra”, “francia”, “italia”, tutte e tre queste cartelle sono allo stesso livello sottodirectory di saluti.
 
Non cambia niente per la prima parte dell'indirizzo, il classpath, di cui parlavamo sopra che rimane invariato.
 
Un'altra cartella ancora.