Cos’e` un package? Package e documentazione ■ Programmazione in Rete e Laboratorio Perche` usiamo le cartelle (direttori, folder) sul nostro desktop? ◆ ◆ ◆ ◆ Matteo Baldoni Dipartimento di Informatica Universita` degli Studi di Torino C.so Svizzera, 185 I-10149 Torino ■ 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 [email protected] http://www.di.unito.it/~baldoni/didattica 2 Package ■ ■ ■ ■ ■ Package java 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 package util public classi interfacce awt event ... 3 Package ■ ■ 4 L’istruzione 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? 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 5 6 1 Un esempio ■ Dichiarazione di un package Voglio definire un package di nome geometria contenente a sua volta due package di nome poligoni e prismi ■ 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; 7 8 Effetto ■ Effetto della precedente dichiarazione sara` quella di associare alla classe Poligono e Prisma il nome di ◆ ◆ ■ ■ Package, javac e java package geometria.poligoni; public class Rettangolo { […] } 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 ■ Nel diretorio esempiPackage: ◆ Per la compilazione ◆ Per l’esecuzione ✦ ✦ javac geometria\poligoni\Rettangolo.java java geometria.poligoni.Rettangolo 9 10 CLASSPATH: lo spazio dei nomi 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 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) import geometria.poligoni.Rettangolo; classe Poligono nel import geometria.poligoni.*; package geometria.poligoni ◆ SET CLASSPATH=.;C:\esempi\esempiPackage ◆ javac -classpath .;C:\esempi\esempiPackage java -classpath .;C:\esempi\esempiPackage ◆ Importo tutti i nomi del package geometria.poligoni temporaneamente 11 12 2 Classpath: lo spazio dei nomi Visibilità dei membri delle classi javac -classpath .;C:\esempi\provaclasspath\directory1; C:\esempi\provaclasspath\directory2 ProvaClassPath.java ■ Ad ogni membro di una classe può essere associata una delle parole chiave: ◆ import javamio.util.*; import corso.*; class ProvaClassPath { A a = new A(); } 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 13 Documentazione automatica ■ ■ ■ ■ 14 Un Esempio package geometria.prismi; 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 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 */ package, classe pubblica, interfaccia pubblica, metodo pubblico o protetto, variabile pubblica o protetta public class Prisma { […] } Commenti per il package (si puo` aggiungere un file di nome package.html) 15 Un esempio Estrazione dei commenti /** 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; 16 ■ ■ ■ ■ ■ Commenti per le variabili ■ 17 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 3