I package in Java - Dipartimento di Informatica

Linguaggi di
Programmazione: Paradigmi
di Programmazione
I PACKAGE IN JAVA
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
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
I package di Java
2
1
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
3
I package di Java
Package
java
util
package
public
classi
interfacce
awt
event
...
I package di Java
4
2
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?
I package di Java
5
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 { . . . }
prima istruzione!
nomedelpackage . nomedellaclasse
I package di Java
6
3
Un esempio
• Voglio definire un package
di nome geometria
contenente a sua volta due
package di nome poligoni e
prismi
I package di Java
7
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;
I package di Java
8
4
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
I package di Java
9
Package, javac e java
package geometria.poligoni;
public class Rettangolo {
[…]
}
• Nel diretorio esempiPackage:
– Per la compilazione
• javac geometria¥poligoni¥Rettangolo.java
– Per l’esecuzione
• java geometria.poligoni.Rettangolo
I package di Java
10
5
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
Importo il nome della
import geometria.poligoni.Rettangolo; classe Poligono nel
import geometria.poligoni.*;
package
geometria.poligoni
Importo tutti i nomi del
package geometria.poligoni
11
I package di Java
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
in modo definitivo (nel file autoexec.bat)
–
SET CLASSPATH=.;C:¥esempi¥esempiPackage
–
–
javac -classpath .;C:¥esempi¥esempiPackage
java -classpath .;C:¥esempi¥esempiPackage
temporaneamente
I package di Java
12
6
Classpath:
lo spazio dei nomi
javac -classpath .;C:¥esempi¥provaclasspath¥directory1;
C:¥esempi¥provaclasspath¥directory2 ProvaClassPath.java
import javamio.util.*;
import corso.*;
class ProvaClassPath {
A a = new A();
}
I package di Java
13
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
I package di Java
14
7