Introduzione ai package in Java e al programma di utilità Javadoc

Package e
documentazione
Linguaggi di Programmazione: Paradigmi
di Programmazione (Sperimentazioni)
Matteo Baldoni
Dipartimento di Informatica
Universita` degli Studi di Torino
C.so Svizzera, 185 I-10149 Torino
[email protected]
http://www.di.unito.it/~baldoni/didattica
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
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
Package
java
util
package
public
classi
interfacce
awt
event
...
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?
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
6
3
Un esempio
■
Voglio definire un package di
nome geometria contenente a
sua volta due package di nome
poligoni e prismi
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;
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
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
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
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
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();
}
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
14
7
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
15
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)
16
8
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
Commenti per i metodi
@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 le variabili
17
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
18
9