1
Package e
documentazione
Programmazione in Rete e Laboratorio
Matteo Baldoni Dipartimento di Informatica Universita` degli Studi di Torino C.so Svizzera, 185 I-10149 Torino baldoni@di.unito.it
http://www.di.unito.it/~baldoni/didattica
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
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
4
Package
java
awt util
...
public
package
classi interfacce
event
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?
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
7
Un esempio
■ Voglio definire un package di nome geometria contenente a sua volta due package di nome poligoni e prismi
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;
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
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 { […]
}
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
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:\esempi\esempiPackage
◆ javac -classpath .;C:\esempi\esempiPackage
◆ java -classpath .;C:\esempi\esempiPackage temporaneamente in modo definitivo (nel file autoexec.bat)
3
13
Classpath:
lo spazio dei nomi
import javamio.util.*;
import corso.*;
class ProvaClassPath { A a = new A();
}
javac -classpath .;C:\esempi\provaclasspath\directory1;
C:\esempi\provaclasspath\directory2 ProvaClassPath.java
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
15
Documentazione automatica
■ javadoc permette di generare automaticamente file di documentazione analizzando i commenti compresi tra i simboli /** e */
■ Produce documentazione in formato HTML
■ La documentazione di Java sulle API e` generata con tale utility
■ package, classe pubblica, interfaccia pubblica, metodo pubblico o protetto, variabile pubblica o protetta
16
Un Esempio
package geometria.prismi;
import geometria.poligoni.*;
/**
Classe che definisce un <i>prisma</i>.
Un prisma ha come base un poligono ed una altezza (double).
@author Matteo Baldoni
@version 1.0 1 settembre 2000
@see <a href="http://www.di.unito.it/~baldoni/didattica/">
Matteo Baldoni's Home page</a>
@see geometria.poligoni.Poligono#Poligono
*/
public class Prisma { […]
}
Commenti per il package (si puo` aggiungere un file di nome package.html)
17
Un esempio
/** Costruttore, un prisma e` costruito mediante un poligono (Poligono) e una altezza (double).
@param b base del prisma
@param h altezza del prisma
@return un oggetto di tipo Prisma
@throw non definito
*/
public Prisma(Poligono b, double h){
base = b;
altezza = h;
}
/** Base del poligono.
*/
protected Poligono base;
/** Altezza del prisma.
*/
protected double altezza;
Commenti per i metodi
Commenti per le variabili
18
Estrazione dei commenti
■ javadoc nomeDelPackage
■ javadoc -d docDirectory nomeDelPackage
■ javadoc -d docDirectory nomeDelPackage1 nomeDelPackage2 …
■ javadoc -d docDirectory -author -version nomeDelPackage1 nomeDelPackage2 …
■ javadoc -help per avere l’elenco di tutte le opzioni
■ javadoc sottosta` alle stesse regole di javac e java per quanto riguarda il classpath