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