Galileo Computing < openbook >
Galileo Computing - Professionelle Buecher. Auch fuer Einsteiger.
Galileo Computing - Professionelle Buecher. Auch fuer Einsteiger.


Java ist auch eine Insel von Christian Ullenboom
Buch: Java ist auch eine Insel (Galileo Computing)
gp Kapitel 25 Dienstprogramme für die Java-Umgebung
gp 25.1 Die Werkzeuge im Überblick
gp 25.2 Der Compiler javac
gp 25.2.1 Der Java-Interpreter java
gp 25.2.2 Der Unterschied zwischen java.exe und javaw.exe
gp 25.3 Das Archivformat Jar
gp 25.3.1 Das Dienstprogramm Jar benutzen
gp 25.3.2 Das Manifest
gp 25.3.3 Jar-Archive für Applets und Applikationen
gp 25.4 Mit JavaDoc und Doclets dokumentieren
gp 25.4.1 Mit JavaDoc Dokumentationen erstellen
gp 25.4.2 Wie JavaDoc benutzt wird
gp 25.4.3 Eine Dokumentation erstellen
gp 25.4.4 JavaDoc und Doclets
gp 25.5 Konvertierung von Java-Bytecode in ein Windows-Exe mit JET
gp 25.6 Manteln von Java-Klassen in ein Windows-Exe mit JexePack
gp 25.7 Decompiler
gp 25.7.1 Jad, ein schneller Decompiler
gp 25.7.2 SourceAgain
gp 25.7.3 Decompilieren erschweren
gp 25.8 Obfuscate Programm RetroGuard
gp 25.9 Sourcecode Beautifier
gp 25.10 Ant
gp 25.10.1 Bezug und Installation von Ant
gp 25.10.2 Properties
gp 25.10.3 Externe und vordefinierte Properties
gp 25.10.4 Weitere Leistungen


Galileo Computing

25.4 Mit JavaDoc und Doclets dokumentierendowntop

Dokumentation von Softwaresystemen ist ein wichtiger, aber oft vernachlässigter Teil der Softwareentwicklung. Im Entwicklungsprozess müssen die Entwickler Zeit in Beschreibungen der einzelnen Komponenten investieren, besonders dann, wenn weitere Entwickler diese Komponenten wieder verwerten. Diese Wiederverwertung wird besonders bei der objektorientierten Programmierung angestrebt. Deshalb müssen die Schnittstellen sorgfältig beschrieben werden. Wichtig bei der Beschreibung sind die Art und die Anzahl der Parameter, die Wirkung der Funktionen und das Laufzeitverhalten. Da das Erstellen einer externen Dokumentation - also eine Beschreibung außerhalb der Quellcodedatei - fehlerträchtig und deshalb nicht gerade motivierend für die Beschreibung ist, werden spezielle Anweisungen in den Java-Quelltext eingeführt. Ein spezielles Programm generiert aus den Formatierungsanweisungen eine Textdatei mit den gewünschten Informationen.1


Galileo Computing

25.4.1 Mit JavaDoc Dokumentationen erstellendowntop

JavaDoc geht durch den Quelltext und parst die Deklarationen und zieht die Dokumentation heraus. Daraus generiert das Tool eine Beschreibung, die in der Regel als HTML-Seite zu uns kommt. Die Dokumentation beschreibt die Klassen (auch innere), die Vererbung, die Methoden und Attribute, die Konstruktoren und Schnittstellen.

Aus den Beschreibungen im Java-Quelltext werden folgende Informationen zusammengetragen:

gp Kopf
gp Diagramm der Klassenhierarchie
gp Klassenbeschreibung
gp Index der Public-Variablen
gp Index der Public-Methoden
gp Index der Konstruktoren
gp Beschreibung der Public-Variablen
gp Beschreibung der Public-Konstruktoren
gp Beschreibung der Public-Methoden

Galileo Computing

25.4.2 Wie JavaDoc benutzt wirddowntop

In einer besonders ausgezeichneten Kommentarumgebung werden die beschreibenden Anweisungen, Dokumentationskommentare (»Doc Comments«), eingesetzt. Die Kommentarumgebung ähnelt dem Blockkommentar.


Beispiel Ein Dokumentationskommentar
/**
 * Socken sind spezielle Kleidungsstücke.
 */
public class Socke extends Kleidung
{
}

Da ein Dokumentationskommentar /** mit /* beginnt, ist es für den Compiler ein normaler Blockkommentar. Die Kommentare werden oft optisch aufgewertet, indem am Anfang ein Sternchen steht. Dieses wird von JavaDoc ignoriert.


Hinweis Die Dokumentationskommentare sind so aufgebaut, dass der erste Satz in der Auflistung der Methoden und Attribute erscheint und der Rest in der Detailansicht.
/**
 *   Das ist ein kurzer Satz.
 *   Das ist die ausführliche Beschreibung.
 *   Die ausführliche Beschreibung erscheint
 *   später im Abschnitt "Method Detail".
 *   Der kurze Satz erscheint im Abschnitt "Method Summary".
 */
public void foo() { }

Dokumentationskommentare


Kommentar Beschreibung
@see Klassenname Verweis auf eine andere Klasse
@see Klassenname oder Methodenname Verweis auf eine andere Methode
@see Ausgeschriebener Klassenname Verweis auf eine voll qualifizierte Klasse
@see Ausgeschriebener Klassenname oder Methodenname Verweis auf eine voll qualifizierte Methode
@version Versionstext Version
@author Autor Schöpfer
@return Rückgabetext Rückgabewert
@param Parametername oder Parametertext Beschreibung der Parameter
@exception Exception-Klassenname oder Exceptiontext Ausnahmen, die ausgelöst werden können
@throws Exception-Klassenname oder
Exceptiontext
Synonym zu oben
{@link Verweis } Einen eingebauten Verweis im Text. Parameter sind wie bei @see.

Tabelle 25.3 Die wichtigsten Dokumentationskommentare im Überblick


Beispiele Eine externe Zusatzquelle angeben:
@see <a href="spec.html#section">Java Spec.

Verweis auf eine Funktion, die mit der beschriebenen Funktion verwandt ist:

@see String#equals(Object) equals

Dokumentiere eine Variable. Gib einen Verweis auf eine Methode an:

/**
 * The X-coordinate of the component.
 *
 * @see #getLocation()
 */
 int x = 1263732;

Eine veraltete Methode, die auf eine Alternative zeigt:

/**
 * @deprecated  As of JDK 1.1,
 * replaced by {@link #setBounds(int,int,int,int)}
 */

HTML-Tags in Dokumentationskommentaren

In den Kommentaren können HTML-Tags verwendet werden, beispielsweise <b>..</b> und <i>..</i>, um Textattribute zu setzen. Sie werden direkt in die Dokumentation übernommen, müssen also korrekt geschachtelt sein, damit die Ausgabe nicht falsch dargestellt wird. Die Überschriften-Tags <h1>..</h1> und <h2>..</h2> sollten jedoch nicht verwendet werden. JavaDoc verwendet sie zur Gliederung der Ausgabe und weist ihnen Formatvorlagen zu.


Galileo Computing

25.4.3 Eine Dokumentation erstellendowntop

Um eine Dokumentation zu erzeugen, wird dem Konsolen-Programm javadoc als Parameter ein Dateiname der zu kommentierenden Klasse übergeben; aus compilierten Dateien können natürlich keine Beschreibungsdateien erstellt werden.


Beispiel Erstelle aus der Socken- und Kleidung-Klasse eine Dokumentation

Listing 25.1 Kleidung.java

/**
 *  Kleidung bildet die Oberklasse für alle Kleidungs-Objekte.
 */
import java.io.*;
public abstract class Kleidung implements Serializable
{
  /**
   *  Jede Kleidung hat eine Farbe.
   */
  protected String farbe;
  /**
   *  Erzeugt neues Kleidungs-Objekt.
   */
  protected Kleidung()
  {
  }
  /**
   *  Erzeugt neues Kleidungs-Objekt,
   *  welches mit einer Farbe initialisiert wird.
   */
  protected Kleidung( String farbe )
  {
    this.farbe = farbe;
  }
  /**
   *  Jede Kleidung hat einen Namen.
   *  Wird von Unterklassen überschrieben.
   */
   abstract String getName();
}

Listing 25.2 Socke.java

/**
 *  Socken sind spezielle Kleidungsstücke.
 */
import java.io.*;
public class Socke extends Kleidung implements Serializable
{
  /**
   *  Erzeugt ein neues Socken-Objekt mit der Farbe Schwarz.
   */
   Socke()
   {
     super( "schwarz" );
   }
   /**
    *  Überschrieben von der Oberklasse.
    */
    public String getName()
    {
      return "Socke";
    }
}

Wir starten javadoc im Verzeichnis, in dem auch die Klassen liegen, und erhalten eine Reihe von HTML-Dokumenten.


Beispiel Möchten wir Dokumentationen für das gesamte Verzeichnis erstellen, so geben wir alle Dateien mit der Endung .java an:
$ javadoc *.java

Abbildung
Hier klicken, um das Bild zu Vergrößern

In Eclipse lässt sich eine Dokumentation mit JavaDoc sehr einfach erstellen. Im Menü File, Export ist der Eintrag Javadoc zu wählen und nach ein paar Einstellungen ist die Dokumentation generiert.

Generierte Dateien

Für jede öffentliche Klasse erstellt JavaDoc eine HMTL-Datei. Sind Klassen nicht öffentlich, muss ein Schalter angegeben werden. Die HTML-Dateien werden zusätzlich mit Querverweisen zu den anderen dokumentierten Klassen versehen. Daneben erstellt JavaDoc weitere Dateien:

gp index-all.html
Die Übersicht aller Klassen, Schnittstellen, Ausnahmen, Methoden und Felder in einem Index
gp overview-tree.html
Zeigt in einer Baumstruktur die Klassen an, damit die Vererbung deutlich sichtbar ist.
gp allclasses-frame.html
Anzeige aller dokumentierten Klassen in allen Unterpaketen
gp deprecated-list.html
Liste der veralteten Methoden und Klassen
gp serialized-form.html
Listet alle Klassen auf, die Serializable implementieren. Jedes Attribut erscheint mit einer Beschreibung in einem Absatz.
gp help-doc.html
Eine Kurzbeschreibung von JavaDoc
gp index.html
JavaDoc erzeugt eine Ansicht mit Frames. Das ist die Hauptdatei, die die rechte und linke Seite referenziert. Die linke Seite ist die Datei allclasses-frame.html. Rechts im Frame wird bei fehlender Paketbeschreibung die erste Klasse angezeigt.
gp stylesheet.css
Formatvorlage für HTML-Dateien, in der sich Farben und Zeichensätze einstellen lassen, die dann alle HTML-Dateien nutzen.
gp packages.html
Eine veraltete Datei. Sie verweist auf die neuen Dateien.

Schalter für das Programm javadoc

Über die umfangreichen Parameter informiert eine HTML-Datei, die dem Java-SDK beigelegt ist.


Beispiel Für die Java-API-Dokumentation haben die Entwickler eine ganze Reihe von Schaltern eingesetzt. Umgebungsvariablen machen den Aufruf deutlicher.

WINDOWTITLE = 'Java Platform 1.2 Final API Specification'
DOCTITLE = 'Java<font size="-2">TM</font> Platform 1.2 Final\
 API Specification'
HEADER = '<b>Java Platform 1.2</b><font size="-1">Final</font>'
BOTTOM = '<font size="-1"><a href=">http://java.sun.com/cgi-bin/\
 bugreport.cgi">Submit a bug or featureJava is a\
 trademark or registered trademark of Sun Microsystems, Inc. in the\
 US and other countries.Copyright 1993-1998 Sun Microsystems,\
 Inc. 901 San Antonio Road,Palo Alto, California, 94303, U.S.A.\
 All Rights Reserved.</font>'
GROUPCORE = '"Core Packages" "java.*:com.sun.java.*:org.omg.*"
GROUPEXT  = '"Extension Packages" "javax.*"'
javadoc -sourcepath /jdk/src/share/classes \
        -d /jdk/build/api                  \
        -use                               \
        -splitIndex                        \
        -windowtitle $(WINDOWTITLE)        \
        -doctitle $(DOCTITLE)              \
        -header $(HEADER)                  \
        -bottom $(BOTTOM)                  \
        -group $(GROUPCORE)                \
        -group $(GROUPEXT)                 \
        -overview overview-core.html       \
        -J-Xmx180m                         \
        java.lang java.lang.reflect        \
        java.util java.io java.net         \
        java.applet                        \

Galileo Computing

25.4.4 JavaDoc und Docletstoptop

Die Ausgabe von JavaDoc kann den eigenen Bedürfnissen angepasst werden, indem Doclets eingesetzt werden. Ein Doclet ist ein Java-Programm, das auf der Doclet-API aufbaut und die Ausgabedatei schreibt. Das Programm liest dabei wie das bekannte JavaDoc-Tool die Quelldateien ein und erzeugt daraus ein beliebiges Ausgabeformat. Dieses Format kann selbst gewählt und implementiert werden. Wer also neben dem von JavaSoft beigefügten Standard-Doclet für HTML-Dateien Framemaker-Dateien (MIF) oder RTF-Dateien erzeugen möchte, muss nur ein eigenes Doclet programmieren. Daneben dient ein Doclet aber nicht nur der Schnittstellendokumentation. Ein Doclet kann auch dokumentieren, ob es zu jeder Methode auch eine Dokumentation gibt oder ob jeder Parameter und jeder Rückgabewert beschrieben ist.






1 Die Idee ist nicht neu. In den Achtzigerjahren verwendete Donald E. Knuth das WEB-System zur Dokumentation von TeX. Das Programm wurde mit den Hilfsprogrammen weave und tangle in ein Pascal-Programm und eine TeX-Datei umgewandelt.





Copyright (c) Galileo Press GmbH 2004
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de