1
Matteo Baldoni
Dipartimento di Informatica - Universita` degli Studi di Torino C.so Svizzera, 185 - I-10149 Torino (Italy) e-mail: [email protected] - URL: http://www.di.unito.it/~baldoni
Linguaggi di
Programmazione: Paradigmi di Programmazione
I PACKAGE IN JAVA
Linguaggi di Programmazione: Paradigmi di Programmazione 2
Cos’e` un package?
• Perche` usiamo le cartelle (direttori, folder) sul nostro desktop?
– Perche` desideriamo tenere insieme i file che hanno uno stesso scopo o utilita`
– Per ritrovare i file con maggiore facilita` in un momento successivo
– Per archiviare i file piu` facilmente e passarli a qualcun’altro
– Per garantire l’unicita` ai nomi dei file
• Spesso un direttorio e` strutturato in sottodirettori Un package e` una cartella di classi Java
Linguaggi di Programmazione: Paradigmi di Programmazione 3
Package
• La cartella dove sviluppiamo un applicativo Java e`
un package, il package di default di Java
• I package possono essere strutturati in sottopackage come le cartelle
• Possono essere archiviati in file compressi (JAR file)
• Definiscono spazi dei nomi separati per garantire unicita` agli identificatori da noi utilizzati
• Le librerie di Java sono tutte organizzate in package e sottopackage
Linguaggi di Programmazione: Paradigmi di Programmazione 4
Package
java
awt util
...
public
package
classi interfacce
event
Linguaggi di Programmazione: Paradigmi di Programmazione 5
Package
• Come fare della nostra semplice cartella di classi un vero e proprio package?
• Come utilizzare un package all’interno di un file e quindi rendere disponibili le utilita` in esso definite?
Linguaggi di Programmazione: Paradigmi di Programmazione 6
L’istruzione package
• Posso definire che un certo file che contiene una certa classe pubblica e un certo numero di altre classi (non pubbliche!) fa parte di un certo package mediante la parola chiave package
package nomedelpackage ; class nomedellaclasse { . . . }
nomedelpackage . nomedellaclasse prima istruzione!
2
Linguaggi di Programmazione: Paradigmi di Programmazione 7
Un esempio
• Voglio definire un package di nome geometria contenente a sua volta due package di nome poligoni e prismi
Linguaggi di Programmazione: Paradigmi di Programmazione 8
Dichiarazione di un package
• In ogni file .java del sottodirettorio poligoni di geometria aggiungero` come prima istruzione
package geometria.poligoni;
In ogni file .java del sottodirettorio prismi di geometria aggiungero`
come prima istruzione
package geometria.prismi;
Linguaggi di Programmazione: Paradigmi di Programmazione 9
Effetto
• Effetto della precedente dichiarazione sara` quella di associare alla classe Poligono e Prisma il nome di
– geometria.poligoni.Poligono – geometria.prismi.Prisma
• Questi sono i veri nomi delle classi ed e` cosi` che andranno identificate
• Organizzazione e nomi simile a quella dei file nei direttori
Linguaggi di Programmazione: Paradigmi di Programmazione 10
Package, javac e java
• Nel diretorio esempiPackage:
– Per la compilazione
• javac geometria¥poligoni¥Rettangolo.java – Per l’esecuzione
• java geometria.poligoni.Rettangolo package geometria.poligoni;
public class Rettangolo { […]
}
Linguaggi di Programmazione: Paradigmi di Programmazione 11
L’istruzione import
• Scrivere i nomi delle classi e` diventato meno agevole e sicuramente piu` tedioso
• L’istruzione import permette di semplificare la scrittura dei nomi delle classi in package
• include in C/C++ vs import in Java
import geometria.poligoni.Rettangolo;
import geometria.poligoni.*;
Importo tutti i nomi del package geometria.poligoni
Importo il nome della classe Poligono nel package geometria.poligoni
Linguaggi di Programmazione: Paradigmi di Programmazione 12
CLASSPATH:
lo spazio dei nomi
• Dove andare a cercare i vari package e classi?
• Come rendere accessibili i miei package da un direttorio qualsiasi?
• Java fa uso (sia in compilazione che in esecuzione) della variabile di ambiente CLASSPATH
– SET CLASSPATH=.;C:¥MWT¥GiornoII¥esempi¥esempiPackage
– javac -classpath .;C:¥MWT¥GiornoII¥esempi¥esempiPackage – java -classpath .;C:¥MWT¥GiornoII¥esempi¥esempiPackage
temporaneamente in modo definitivo (nel file autoexec.bat)
3
Linguaggi di Programmazione: Paradigmi di Programmazione 13
Classpath:
lo spazio dei nomi
import javamio.util.*;
import corso.*;
class ProvaClassPath { A a = new A();
}
javac -classpath
.;C:¥MWT¥GiornoII¥esempi¥pr ovaclasspath¥directory1;C:¥
MWT¥GiornoII¥esempi¥provacl asspath¥directory2 ProvaClassPath.java
Linguaggi di Programmazione: Paradigmi di Programmazione 14
Visibilità dei membri delle classi
• Ad ogni membro di una classe può essere associata una delle parole chiave:
– nessuna visibile da tutte le classi nello stesso package
– public visibile da tutti (parte dell'interfaccia dell'oggetto)
– private visibile solo dalla classe stessa – protected visibile da tutte le sottoclassi