Werkzeugtipps zur Arbeit in der Implementierungsphase des Softwarepraktikums 2001

javadoc

Seine Klassen sollte man immer ausführlich kommentieren, damit andere und auch man selbst später nachvollziehen können, was Methoden und Felder zu bedeuten haben. Mit dem Kommando javadoc läßt sich aus speziellen Kommentaren automatisch eine HTML-Dokumentation generieren. Diese Kommentare fangen jeweils mit /** an und stehen jeweils vor der zu dokumentierenden Klasse/Methode, etc. Sie dürfen HTML-Code enthalten sowie eine Reihe vordefinierter Tags die mit @ anfangen. Hier ein kurzes Beispiel:

/**
  * A string buffer implements a mutable sequence of characters. 
  * A string buffer is like a {@link String}, but can be modified. At any 
  * point in time it contains some particular sequence of characters, but 
  * the length and content of the sequence can be changed through certain 
  * method calls.
  * <p>
  * String buffers are used by the compiler to implement the binary 
  * string concatenation operator <code>+</code>. For example, the code:
  * <p><blockquote><pre>
  *     x = "a" + 4 + "c"
  * </pre></blockquote><p>
  * is compiled to the equivalent of: 
  * <p><blockquote><pre>
  *     x = new StringBuffer().append("a").append(4).append("c")
  *                           .toString()
  * </pre></blockquote>
  *
  * @author  <a href="http://www.inf.fu-berlin.de/~dahm/">Markus Dahm</a>
  * @version $Id: swp-HOWTO.html,v 1.8 2000/05/23 00:20:49 busch Exp $
  * @see     java.lang.String
  */
 public class MyStringBuffer implements java.io.Serializable {
   /** The value is used for character storage.
    */
   protected char value[];
 
   /**
    * Constructs a string buffer with no characters in it and an 
    * initial capacity specified by the <code>length</code> argument. 
    *
    * @param      length   the initial capacity.
    * @exception  NegativeArraySizeException  if the <code>length</code>
    *               argument is less than <code>0</code>.
    */
   public MyStringBuffer(int length) { }
 
   /**
    * Returns the length (character count) of this string buffer.
    *
    * @return  the length of the sequence of characters currently 
    *          represented by this string buffer.
    */
   public int length() { return count;  }
 }

Erläuterung der Tags:

@authorHier gibt man die Autoren der Klasse an, z.B. mit einem Link auf dessen Homepage
@exception
oder @throws
Welche Exceptions kann diese Methode auslösen
@linkVerweis auf eine andere Klasse oder Methode im Fließtext
@paramBeschreibung eines formalen Parameters
@returnBeschreibung des Rückgabewerts
@seeVerweis auf eine andere Klasse oder Methode am Ende
@versionVersion der Klasse, wer CVS benutzt sollte hier einfach $Id$ eintragen, das wird dann von CVS automatisch transformiert

Die Dokumentation wird am einfachsten wie folgt erzeugt, wobei man mit -d optional ein Verzeichnis angeben kann, in das die Dateien geschrieben werden sollen.

	% javadoc -author -version -d docs swp.gui swp.mail
Das Ergebnis sieht dann in etwa so aus:

Class MyStringBuffer

java.lang.Object
  |
  +--MyStringBuffer

public class MyStringBuffer
extends java.lang.Object
implements java.io.Serializable

A string buffer implements a mutable sequence of characters. A string buffer is like a String, but can be modified. At any point in time it contains some particular sequence of characters, but the length and content of the sequence can be changed through certain method calls.

String buffers are used by the compiler to implement the binary string concatenation operator +. For example, the code:

     x = "a" + 4 + "c"
 

is compiled to the equivalent of:

     x = new StringBuffer().append("a").append(4).append("c")
                           .toString()
 

See Also:
String, Serialized Form

Field Detail

value

protected char[] value
The value is used for character storage.
Constructor Detail

MyStringBuffer

public MyStringBuffer(int length)
Constructs a string buffer with no characters in it and an initial capacity specified by the length argument.
Parameters:
length - the initial capacity.
Throws:
NegativeArraySizeException - if the length argument is less than 0.
Method Detail

length

public int length()
Returns the length (character count) of this string buffer.
Returns:
the length of the sequence of characters currently represented by this string buffer.

Concurrent Versions System

CVS (Concurrent Versions System) ist ein Versionsverwaltungssystem, dass die gemeinsame, auch räumlich verteilte Arbeit an einem Projekt unterstützt. CVS ist freie Software und findet in den meisten Open-Source-Projekten Verwendung. Es ist Bestandteil jeder aktuellen Unix/Linux-Distribution.

Aber nicht vergessen: CVS ist nur ein technisches Hilfsmittel, es ersetzt nicht die Kommunikation zwischen den Entwicklern!

Arbeiten mit CVS

Auf den Sun-Rechnern befindet sich die aktuellste Installation von cvs unter "/import/gnu/bin/cvs".

Befehle

Angenommen, das Projekt existiert bereits im Repository. Das Repository liegt im Verzeichnis <cvsroot> und das Projekt heißt swp.

Konflikte?

Erscheint beim Update einer Datei ein C vor dem Dateinamen, liegt ein Konflikt vor. Jemand hat nach meinem Auschecken eine neue Version der Datei eingecheckt. In den meisten Fällen kann cvs diese Konflikte auflösen, wobei allerdings auch Voricht geboten ist: cvs kann Konflikte auflösen, wenn die Änderungen an verschiedenen Stellen in einer Datei waren, cvs berücksichtigt nicht die Sematik der Änderungen!

Falls cvs die Konflikte nicht auflösen kann, wird eine Warnung ausgegeben. Die problematische Region ist in der Datei gekennzeichnet ("<<<<<<") und wird der anderen Version gegenübergestellt. Der Konflikt muss nun vor dem commit manuell und mit Verstand aus der Welt geschafft werden.

Remote arbeiten

Das Arbeitsverzeichnis kann sich auch in einem anderen Dateisystem befinden, etwa zu Hause auf einem Linux-Rechner, der temporär über ppp im Internet ist. Dazu muß man noch die Umgebungsvariable CVS_RSH definieren, mit
setenv CVS_RSH ssh (csh).
Beim initialen Auschecken wird CVS-Root (hinter "-d") nun so angegeben: <benutzername@rechner.domain:pfadZumRepository>.
Danach kann im Arbeitsverzeichnis wie gewohnt mit den CVS-Befehlen auf das Repository an der Uni zugegriffen werden.

Style guide

In den Tutorien solltet Ihr Euch noch einigen, wie Ihr mit CVS arbeitet, insbesondere wie häufig und in welchem Zustand eingecheckt werden soll. Hier ein paar Vorschläge:

Mehr Information

Hier nicht erwähnt ist, wie man ein Repository anlegt, Branches, die Vergabe von Tags, das Auschecken alter Versionen und administrative Möglichkeiten, die CVS bietet. RTFM:
http://www.gnu.org/manual/cvs-1.9

Weiterhin sind diverse graphische Tools noch nicht erwähnt, mit Hilfe derer mit CVS gearbeitet werden kann, wie z.B. cervisia (KDE), cvsweb (Über Webseiten durchs Repository browsen) und viele andere mehr.
CVS-Zugriff von Windows aus ermöglicht wincvs.
(Alle derzeit nicht an der Uni installiert.)


(X)Emacs als Java-Entwicklungsumgebung

XEmacs ist ein leistungsfähiger Texteditor, der auch Unterstützung für das Programmieren, u.a. in Java, bietet. Aufzurufen ist er hier in der Uni mit /import/xemacs/bin/xemacs.

Einführung in die grundlengenden Arbeitstechniken

Das ist bereits eingebaut; man drücke einfach Ctrl-h t (d.h. erst Ctrl-h, danach t) und landet im eingebauten Tutorial. Eine Kommandoübersicht zum Ausdrucken findet sich hier unter emacs-refcard.ps im PostScript-Format.

Programmierhilfen

Das Startup-file .emacs

Beim Starten wertet der XEmacs das file ~/.emacs aus. Hierin werden auch die ausgewählten Optionen gespeichert. Man kann dort nützliche Dinge eintragen. Eine gute Quelle für solches Tuning ist das .emacs von Markus: ~dahm/.emacs.

JDE

Dies ist das Java Development Environment für (X)Emacs. Es geht noch etwas über die bereits im Standardpaket vorhandenen Möglichkeiten hinaus.

Installation

Erstmal muß man im .emacs dem Editor mitteilen, daß man auch dieses Paket nutzen will, das nicht in der Standardinstallation enthalten ist. Deswegen muß man den Pfad, in dem er nach Dateien sucht, erweitern und dann das Paket laden:
msetq load-path
        (nconc
                '( "/import/public/opt/jde-2.1.5" )
        load-path))

(require 'jde)

Features

Jikes im Emacs

Dafür muß man zusehen, daß der JIKESPATH richtig gesetzt ist, denn jikes weiß im Gegensatz zu javac nicht, wo die Klassenbibliothek liegt. Also:
setenv JIKESPATH /import/java2/jre/lib/rt.jar:/home/elfe/materlik/swp
(Dieses natürlich sinnvoll verändern), bevor man xemacs aufruft. Aus dem emacs heraus möchte man jetzt auf jeden Fall mit der Option "+E" kompilieren, dies stellt nämlich emacs-kompatiblen Output ein, so daß die Hinspringerei mit der mittleren Maustaste funktioniert.

Quellen, Links, ...


Arbeiten mit Teraterm und X-Win32 unter Windows


Wenn man unter Windows eine Verbindung zu den Unix-Servern aufbauen will, so ist das Programm "TeraTermPro" zu verwenden. Telnet sollte nicht benutzt werden, da dies ein Sicherheitslücke darstellt.

Das Einloggen funktioniert wie folgt:

Jetzt hat man die Möglichkeit, über ein Terminalfenster mit dem Rechner zu kommunizieren und z.B. Befehle wie pine, javac, java, zip, chmod, ls,... aufzurufen. Dies geht auch von zu Hause.
Will man ein Programm ausführen, welches ein eigenes Fenster öffnet, so muss man das Fenster auf seinen Rechner umleiten. Dazu dort ist das Programm X-Win32 erforderlich.

Um nun die Ausgabe auf den entsprechenden Rechner zu setzten, verhält man sich (bei csh und zsh) wie folgt:

Arbeiten mit Ultraedit


Ultraedit ist ein sehr leistungsfähiger Editor unter Windows. Er beherrscht sowohl Syntaxhighlighting als auch die Möglichkeit DOS-Programme (wie z.B. javac) aufzurufen. Die Ausgabe wir dann in ein Textfile umgeleitet und angezeigt (Praktisch für die Fehlerausgabe des Compilers).
 

Verfügbare Werkzeuge, die wir hier nicht vorstellen

Auf den NT-Rechnern sind verfügbar (erreichbar über das Startmenü):