Linux - Friheden til at programmere i Java: Version 0.7.20040516 - 2020-12-31
forrige Kapitel 2. Udviklingsmiljø næste

2.7. Dokumentation

Dokumentation er et vigtigt aspekt af ethvert softwareudviklingsprojekt. I dette afsnit fokuserer vi på et værktøj, der kan hjælpe dig med at udarbejde API-dokumentation.

API-dokumentation består af en API-specifikation samt en vejledning i at bruge API'en. API-specifikationen skal ses som en kontrakt mellem den som bruger API'en (klienten) og den som implementerer API'en (leverandøren). Hvis leverandøren f.eks. lover at metoden double sqr(int number) returnerer kvadratroden af number når tallet ikke er negativt så ved klienten at uanset, hvordan metoden er implementeret så vil den altid returnere kvadratroden med så stor præcision, som returtypen tillader. Hvis returværdien viser sig at være forkert i nogle tilfælde så har leverandøren brudt kontrakten og metoden er implementeret forkert. Hvis klienten kalder metoden med et negativt tal så er der også tale om kontraktbrud. Kontraktbrud kan enten resultere i en exception eller også er resultatet ikke veldefineret.

2.7.1. Javadoc

Javadoc er en dokumentationsværktøj, der genererer API-dokumentation ud fra

Denne sektion er ment som en hjælp til at få dig i gang med at bruge Javadoc så der er flere aspekter, som vi vil springe over. Når du har fået blod på tanden så kan du læse JDK's Tool documentation eller besøge nedenstående hjemmesider.

2.7.1.1. Javadoc-kommentarer

Javadoc-kommentarerne er på formen

/** et-eller-andet */

og kan knytte sig til klasser, interfaces, konstruktører, metoder og klassevariable. Alt afhængigt af hvad de knytter sig til så kan/skal man også angive en række beskrivende Javadoc-tags som er på formen.

@tagnavn et-eller-andet

Følgende eksempel illustrerer brugen af Javadoc-kommentarer og Javadoc-tags.

package dk.sslug;

/**
 * Denne klasse repræsenterer en simpel stak, der
 * lagrer heltal.
 *
 * @author Jonas Kongslund (jonas@kongslund.dk)
 * @version 1.1
 */
public class IntStack
{
  /** Antal elementer i stakken */
  protected int count;

  /**
   * Indeholder stakkens elementer. Elementerne er placeret
   * i <code>elements[0...count-1]

.

protected int[] elements;

/**
 * Standardkonstruktør for denne klasse.
 */
public IntStack()
{
  /* Øvelse: implementer metoden sådan at
     elements og count initialiseres til
     nogle fornuftige værdier */
}
/**
 * Fjerner og returnerer det øverste tal på stakken.
 *
 * @return int Det øverste tal på stakken
 * @exception java.util.EmptyStackException
 *            hvis stakken er tom
 */
public int pop() throws java.util.EmptyStackException
{
  /* Øvelse: implementer metoden */
  return -1;
}
/**
 * Placerer det angivne tal øverst på stakken.
 *
 * @param element Tallet der skal lægges på stakken
 */
public void push(int element)
{
  /* Øvelse: implementer metoden så stakken
     udvides såfremt den er fyldt */
}
/**
 * Placerer det angivne tal øverst på stakken.
 *
 * @param element Tallet der skal lægges på stakken
 * @deprecated Siden version 1.1; Metoden er
 *   erstattet af <code>push(int)</code>.
 * @see #push(int)
 */
public void skub(int element)
{
  push(element);
}

}</code>

Bemærk at vi i eksemplet bruger HTML-tags til at fremhæve blandt andet metodenavne. Dette er både tilladt og anbefalelsesværdigt pga. øget læsevenlighed i API-dokumentationen.

Det er desuden anbefalelsesværdigt at lade den første sætning i hver kommentar være beskrivende nok til at man hurtigt får en idé om, hvad eksempelvis en metode gør. Javadoc-værktøjet forventer faktisk dette da den bruger den første sætning til at generere oversigtslister med.

Prøv at kalde Javadoc-værktøjet med følgende argumenter

[jonas@zeta eksempler/dev-env]$javadoc -author -version dk.sslug

Værktøjet genererer som standard HTML-filer. Åbnindex.htmlmed en browser for at se resultatet.

{linuxbog:note.gifBemærk} Hvis du har brugt Javadoc på eksempler/dev-env/ -kataloget så følger der også pakkedokumentation med i købet, selvom den ikke er medtaget i eksemplet foroven. Hvordan du laver pakkedokumentation beskrives senere i denne sektion.

I eksemplet er der knyttet Javadoc-kommentarer til metoder og klassevariable samt klassen selv. I de fleste af kommentarerne anvendes der Javadoc-tags.

2.7.1.2. Pakkekommentarer

En pakkekommentar laves ved at oprette en HTML-fil kaldetpackage.html, der placeres i pakkens katalog. Hvis pakken f.eks. hedder dk.sslug så placeres filen idk/sslug. Javadoc-værktøjet sørger automatisk for at medtage filen.

Forneden har vi et eksempel på en pakkekommentar.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>dk.sslug</title>
  </head>
  <body>
    Tilbyder containerklasser, som kan lagre forskellige typer
    data. Indtil videre er der kun én klasse, IntStack, men
    dette bliver der ændret på i næste version.

    @see dk.sslug.IntStack
    @since 1.0
  </body>
</html>

Javadoc-værktøjet bruger kun det der står mellem <body> og </body>, så titlen kan være hvad som helst.

Ligesom med Javadoc-kommentarer er det muligt at anvende Javadoc-tags i pakkekommentarer. Blandt dem der er nævnt tidligere kan du anvende

Bemærk at pakkekommentarer må ikke indeholde /** … */ og en linje må ikke starte med * .

2.7.1.3. Linke til andre API-dokumenter

I eksemplet foroven kan pop() -metoden smide en java.util.EmptyStackException , men denne har vi ikke selv lavet og derfor linker API-dokumentationen ikke til den. Dette kunne dog godt være ønskværdigt såfremt man ikke lige kan huske hvad EmptyStackException dækker over (hvilket i dette tilfælde dog nok er ret usandsynligt).

Javadoc-værktøjet er så smart at det kan linke din API-dokumentation til klasser og interfaces, der er indeholdt i andre API-dokumenter. Det eneste man skal gøre er at fortælle Javadoc, hvor den eksterne dokumentation befinder sig.

Her er et eksempel, der forudsætter at JDK's API-dokumentation er indeholdt i$JAVA_HOME/docs/api.

[jonas@zeta eksempler/dev-env]$javadoc -link $JAVA_HOME/docs/api dk.sslug

Du kan også angive en URL.

[jonas@zeta eksempler/dev-env]$javadoc -link \
http://java.sun.com/products/jdk/1.3/docs/api/ dk.sslug

I begge tilfælde bliver der kun lavet links til dokumentationen for en ekstern klasse eller interface såfremt følgende er opfyldt

I eksemplet er det tilfælde tre som gør sig gældende.


forrige hjem næste
Profilering op Versionsstyring