LOGO JAVA

Ingegneria del Software: gruppo 9

Progetto Doclet -  JavaToXmiuml

DOCLET

UML ROTATION

Sommario

Le Basi

Un Semplice Esempio

Tag di Javadoc: Tag standard e personalizzati

Opzioni sulla linea di comando

Doclet Api

Bibliografia


Le Basi

I Doclet sono programmi scritti nel linguaggio di programmazione JAVA, che usano i doclet API, per specificare il contenuto e l'output dello strumento Javadoc. Per default, Javadoc usa un doclet "standard" fornito da SUN per generare la documentazione in formato HTML.
Tuttavia, si possono realizzare proprie doclet per personalizzare l'output di Javadoc come si vuole.

I passi base da seguire nella creazione di una doclet sono:
 

  1. Scrivere il programma JAVA che costituisce il doclet. Il programma deve importare com.sun.javadoc.* in modo da utilizzare le doclet API. Il punto d'entrata del tuo programma è una classe con il metodo public static boolean start e che prende RootDoc come parametro.
  2. Compilare il doclet con un compilatore JAVA
  3. Eseguire Javadoc usando l'opzione -doclet <TuaDoclet> per produrre l'output specificato nella tua doclet.
i file della classe dei doclet API sono nel file lib/tools.jar nel software JDK. Quando si compila una doclet e dopo la si usa, il filas tools.jar deve essere nel class path. Si può usare l'opzione -classpath per ottenere questo effetto, sia con Javac e Javadoc.

Il Package com.sun.javadoc consiste delle interfacce che definiscono i doclet API, e il file lib/tools.jar e il file del JDK che contiene queste interfacce oltre ai Package privati  con le classi che implementano le interfacce. Il tools.jar contiene anche le classi che implementano il doclet standard.

Torna al sommario

Un semplice esempio

Ecco ora un piccolo esempio di doclet, che consiste di una corta classe.
 

import com.sun.javadoc.*;
public class ListClass {
    public static boolean start(RootDoc root) {
        ClassDoc[] classes = root.classes();
        for (int i = 0; i < classes.length; ++i) {
           System.out.println(classes[i]);
        }
        return true;
    }
}

Questa doclet prende le classi su cui Javadoc sta operando e stampa il suo nome sull' output standard.

La prima cosa da notare su una doclet è che essa importa il Package com.sun.javadoc in modo da usare i doclet API. Come TUTTI i doclet ha il suo punto di ingresso nel metodopublic static boolean start.
Il metodo start prende RootDoc come parametro. Questo parametro riporta informazioni circa ogni opzione specificata nella linea di comando con cui è stato lanciato Javadoc, e anche circa le classi e i package su cui lavora Javadoc.

RootDoc definisce un metodo classes che ritorna un array di ClassDoc in cui ogni elemento rappresenta una classe che Javadoc ha scansionato. Il for cicla per stamapare i nomi di ogni classe nell'array.

Per lanciare questa doclet, prima la si deve compilare. Si può compilare con il compilatore JDK? javac, con una riga tipo questa:

javac -classpath C:\jdk1.2\lib\tools.jar ListClass.java

a questo punto poniamo di voler lanciare il nostro doclet sul file MiaClasse.java, userò il comando:

% javadoc -doclet ListClass -classpath C:\jdk1.2\lib\tools.jar MiaClasse.java

L'output che avremo sarà quindi la stringa "MaiClasse". Si noti come questo comando richieda tools.jar nel classpath.

Torna al sommario

Tag di javadoc: tag standard e personalizzati.

Il linguaggio Java supporta speciali commenti di documentazione, che cominciano con /** e finiscono con */. Questi commenti non sono trattati in modo speciale dal compilatore, ma sono utilizzati dal comando Javadoc che li puo' estrarre dal file sorgente e intraprendere opportune operazioni.

I commenti di documentazione sono associati alla dichiarazione della classe, variabile o metodo che essi precedono.

All'interno di questi commenti e' poi possibile specificare tag speciali, che cominciano tutti con il carattere @. Il doclet standard di java (ovvero javadoc invocato senza l'opzione -doclet), che genera un file di documentazione in formato HTML, riconosce un certo numero di tag all'interno di un commento di documentazione. Ad esempio:

@see classname
Se specificato nel sorgente prima di una classe, metodo o attributo, questo tag aggiunge al file HTML una entry "See Also:" che contiene un hyperlink alla classe specificata.

@return description
Aggiunge una sezione "Returns:" contenente la descrizione specificata.E' semanticamente corretto utilizzarlo prima di una definizione di un metodo.

Questi (e altri) sono i tag riconosciuti dal doclet standard: tuttavia ogni doclet puo' riconoscere tag personalizzati. Supponiamo per esempio di voler specificare in un file sorgente java, tramite un numero, l'importanza di un metodo(es. 3 = metodo obbligatorio, 2 = importante, 1 = ausiliario). Possiamo allo scopo definire un tag @importance. Successivamente il nostro doclet per reperire l'informazione sull'importanza dovra':

Torna al sommario

Opzioni sulla linea di comando

Javadoc, invocato da riga di comando, accetta varie opzioni. Ecco le piu' importanti (valide sia per l'output standard sia per doclet personalizzate):
Torna al sommario

Doclet API

Prima di tutte è necessario precisare che le Doclet API non forniscono una struttura dati di tipo gerarchico per le classi specificate. Non ci sono quindi metodi che restituiscono le classi root, le classi di primo livello,..., le classi foglia, ma c'e' un unico metodo che restituisce tutte le classi passate a Javadoc, in maniera piatta. Qualora dovesse servire, l'albero delle classi o il grafo delle classi e delle interfaccie e' comunque ricostruibile poiche' per ogni classe e' possibile ottenere la sua superclasse.

Fino a questo momento si e' utilizzato impropriamente il termine classe: in realta' le Doclet API utilizzano soltanto interfaccie (eccezion fatta per la classe astratta Doclet). In effetti non c'e' alcun motivo in una doclet di creare una nuova istanza, tramite new, di una classe, di un metodo o di un attributo: sono le API che tramite metodi appositi (vedi per esempio RootDoc.classes[]) forniscono le istanze opportune delle interfaccie.
Utilizzando soltanto interfaccie, le Doclet API possono sfruttare l'ereditarieta' multipla.

Ecco il diagramma delle interfaccie:

Nel seguito, per le interfaccie che riteniamo piu' importanti, riportiamo i metodi piu' significativi. La semantica si puo' facilmente evincere dal nome, dal valore di ritorno e dalla classe di appartenenza dei metodi stessi:ad esempio, ClassDoc.constructors() ritorna tutti i costruttori della classe specificata.

Per maggiori dettagli, si veda la documentazione ufficiale della SUN (scritta utilizzando Javadoc standard richiamato sul package com.sun.javadoc!) all'indirizzo www.sun.com.

  1. ClassDoc
  2. ConstructorDoc
  3. Doc
  4. ExecutableMemberDoc
  5. FieldDoc
  6. MethodDoc
  7. Parameter
  8. ProgramElementDoc
  9. RootDoc
  10. Tag
  11. Type
Torna al sommario

Bibliografia - Maggiori informazioni

Libri
 
Titolo Autore Casa Editrice Data pubbl.
Java in a nutshell David Flanagan O' Really Associates 96

On-line
 
Titolo Autore Sito Breve descrizione
Home Sun Sun http://www.sun.com Sito principale della Sun
Home Java Sun http://java.sun.com Sito principale di Java
Home documentazione JDK 1.2 Sun http://java.sun.com/products/jdk/1.2/docs/index.html Sito Ufficile di documentazione del JDK 1.2
Home documentazione Javadoc Sun http://java.sun.com/products/jdk/javadoc/ Sito Ufficiale di documentazione di Javadoc
Java Discussion Forums - Javadoc Autori Vari http://forum.java.sun.com/forum?folderBy
@220.cLfiaANdlCH^0@.ee76880!skip=24
Forum di discussione del JDC, occorre essere iscritti, ma l'iscrizione è FREE
Javadoc FAQ Autori Vari http://java.sun.com/products/jdk/javadoc/faq.html
Sun Developer Connection Sun http://www.sun.com/developers/italian/ Servizi per sviluppatori della Sun

 

Torna al sommario

Pagina Realizzata dal Gruppo 9 / Corso di Ingegneria del Software / Dipartimento di informatica / Università di Bologna