Galileo Computing < openbook >
Galileo Computing - Programming the Net
Galileo Computing - Programming the Net


Java ist auch eine Insel (3. Aufl.) von Christian Ullenboom
Programmieren für die Java 2-Plattform in der Version 1.4
Buch: Java ist auch eine Insel
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 dokumentieren downtop

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 erstellen downtop

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 wird downtop

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

KommentarBeschreibung
Tabelle 25.3 Die wichtigsten Dokumentationskommentare im Überblick
@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.

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

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 .. und .., 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

..

und

..

sollten jedoch nicht verwendet werden. JavaDoc verwendet sie zur Gliederung der Ausgabe und weist ihnen Formatvorlagen zu.


Galileo Computing

25.4.3 Eine Dokumentation erstellen downtop

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

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<sup><font size="-2">TM</font></sup> Platform 1.2 Final\
 API Specification'
HEADER = '<b>Java Platform 1.2</b><br><font size="-1">Final</font>'
BOTTOM = '<font size="-1"><a href="http://java.sun.com/cgi-bin/\
 bugreport.cgi">Submit a bug or feature</a><br><br>Java is a\
 trademark or registered trademark of Sun Microsystems, Inc. in the\
 US and other countries.<br>Copyright 1993-1998 Sun Microsystems,\
 Inc. 901 San Antonio Road,<br>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.






1Die 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 © Galileo Press GmbH 2003
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] [Buchkatalog] [Neue Bücher] [Vorschau]

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