Package e documentazione Laboratorio di Programmazione ad Oggeti 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