Projektpraktikum Sensor- und Ad Hoc-Netzwerke
Wichtige Informationen zur Programmierung
Ziel des Praktikums ist es, Algorithmen auf Graphen zu implementieren.
Die Programmbibliothek yFiles stellt dafür
notwendige Grundfunktionen zur Verfügung, z.B. eine
Implementierung der Graph Datenstruktur Graph2D.
Sofern es möglich ist, sollten Datenstrukturen immer der
yFiles-Bibliothek entnommen werden. Weitere Bibliotheken, welche
je nach Thema Anwendung finden, sind z.B. or (lineare Programmierung)
und mtj (lineare Algebra). Alle Implementierungen werden in der
Programmiersprache JAVA durchgeführt.
Verzeichnisorganisation und CVS
Legen Sie ein Verzeichnis an, in welchem Sie alles, was zum Praktikum gehört, ablegen. Dieses Verzeichnis wird im Folgenden das Praktikumsverzeichnis genannt. In diesem Verzeichnis wird der Verzeichnisbaum angelegt, der unter der Kontrolle des CVS steht. Das geht wie folgt:
Sie müssen CVS mitteilen, wo sich das Archiv, das Sie benutzen,
befindet. Fügen Sie dazu in der Datei ~/.bashrc.<username> die Zeile
export CVSROOT=/net/algo/cvs ein. (<username> bezeichnet
Ihren maximal 8-stelligen Usernamen.) Öffnen Sie eine neue Shell
und arbeiten Sie in dieser weiter.
Wechseln Sie jetzt in das Praktikumsverzeichnis und
führen dort das Kommando cvs checkout lehre/ws05/pp aus.
Wenn alles fehlerfrei ablief, wurden im Praktikumsverzeichnis einige Unterverzeichnisse
und eine Datei lehre/ws05/pp/README angelegt,
in der die Verzeichnisstruktur erklärt wird. Das Verzeichnis
lehre/ws05/pp/ wird im Folgenden Quellverzeichnis genannt.
Erzeugen Sie im Quellverzeichnis ein Unterverzeichnis mit dem Namen <username>,
in dem Sie alle Ihre .java Quelldateien ablegen. Stellen Sie diese
unter die Kontrolle des CVS. Wichtige Kommandos sind dabei:
cvs update -dbringt das lokale Verzeichnis auf den aktuellen Stand (die Option-dsorgt dafür, dass auch neue Verzeichnisse eingebunden werden)cvs add Beispiel.javameldet die DateiBeispiel.javabeim CVS ancvs commitcheckt die lokal geänderten Dateien ins CVS ein
Hilfe gibt es mit dem Kommando cvs --help bzw.
cvs --help-commands. Ein sehr ausführliches Tutorial ist die
CVS Dokumentation.
GraphEditor YEd
Der GraphEditor YEd ist eine Anwendung zum Anzeigen und Editieren von Graphen. Gestartet wird der GraphEditor mittels folgender Eingabe in der Shell:
/net/lin_local/java/j2sdk1.4.2/bin/java -classpath /net/algo/software/yfiles/yfiles-2.3.0.3-complete/demo/yed/yed.jar:. yed.Launcher
Um dies zu vereinfachen, fügen Sie folgende Zeilen in die Datei ~/.bashrc.<username> ein:
export CLASSPATH="/net/algo/software/yfiles/yfiles-2.3.0.3-complete/demo/yed/yed.jar":.:$CLASSPATH
alias yed="/net/lin_local/java/j2sdk1.4.2/bin/java yed.Launcher&"
Öffnen Sie eine neue Shell und starten Sie YEd nun mit yed.
Generell sollten sie alle Programme mit dem Klassenpfad
/net/algo/software/yfiles/yfiles-2.3.0.3-complete/y.jar:.
kompilieren. Fügen Sie also am besten der Datei ~/.bashrc.<username> eine weitere Zeile hinzu:
export CLASSPATH="/net/algo/software/yfiles/yfiles-2.3.0.3-complete/y.jar":$CLASSPATH
Außerdem ist es vorteilhaft, das Quellverzeichnis in den Klassenpfad mit aufzunehmen, damit YEd die von Ihnen
erzeugten Klassen immer findet.
Falls Sie die Bibliotheken or oder mtj benötigen, nehmen Sie die entsprechenden Dateien in den Klassenpfad mit auf.
/net/algo/software/or/or124.jar
/net/algo/software/mtj/mtj.jar
YEd kennt sogenannte Module. Module sind über den Menüeintrag Tools (Werkzeuge) erreichbar. Ihre Klassen sollen von einem Modul aus aufgerufen werden.
Modul Programmierung
Die Klasse
y.module.YModule ist die abstrakte Basisklasse für
YEd Module. Um ein eigenes Modul zu schreiben, müssen Sie Folgendes tun:
- Eine Klasse im Unterverzeichnis
<username>erzeugen, welche vony.module.YModuleableitet. (Geben Sie<username>als package Namen dieser Klasse an.) - Einen Konstruktor in dieser Klasse definieren, welcher keine Argumente entgegennimmt.
- Die Methode
mainrun()überschreiben.
package <username>;
import java.io.*;
import y.base.*;
import y.module.YModule;
import y.view.Graph2D;
public class HelloWorldModule extends YModule {
public HelloWorldModule() {
super("","","");
}
protected void mainrun() {
Graph2D G=getGraph2D();
System.out.println("Hello World");
}
}
Jedes Modul besitzt eine Referenz auf den Graphen, der gerade im YEd dargstellt wird.
Auf diesen Graphen kann über
getGraph2D() zugegriffen werden.
Graphen
Die grundlegensten Eigenschaften von Graphen sind in der Klasse
y.base.Graph definiert.
Knoten im Graphen werden mit der Methode
createNode()
erzeugt, Kanten mit der Methode
createEdge(Node u,Node v).
Knoten werden mit der Methode
removeNode(Node v) aus einem Graphen entfernt, Kanten mit der Methode
removeEdge(Edge e).
Module Deklarieren
Damit YEd auf neue Module zugreifen kann, müssen diese deklariert werden.
Module, die unter Tools (Werkzeuge) in YEd ansprechbar sein sollen, werden
in der Datei tools.pkg im Verzeichnis ~/.yed
deklariert (dies wird nach dem ersten Aufruf von YEd automatisch erzeugt).
Diese Datei sieht beispielsweise folgendermaßen aus:
<PACKAGE name="Tools">
<PACKAGE name="pp">
<MODULE name="Create unit disk graph" class="<username>.CreateUDGModule"></MODULE>
<MODULE name="Compute coordinates" class="<username>.CompCoordsModule"></MODULE>
<MODULE name="Routing algorithm" class="<username>.RoutingModule"></MODULE>
<MODULE name="Test suite" class="<username>.TestSuiteModule"></MODULE>
</PACKAGE>
</PACKAGE>
Programme Dokumentieren
Alle Klassen, die Sie schreiben, müssen dokumentiert werden.
Dies soll zum Einen die Verwendbarkeit der Programme gewährleisten
(Wie werden Methoden aufgerufen? Was berechnen die Methoden? Wie
hängen die einzelnen Klassen zusammen?), zum Anderen soll der
Programmcode verständlich und nachvollziehbar gemacht werden.
Das zweite Ziel wird durch Kommentare im Quellcode
(z.B. Zeilen, die mit // beginnen) erreicht.
Zum ersten Punkt wird das Tool javadoc empfohlen. Wie dieses verwendet
wird, wie Kommentare geschrieben werden, und vieles mehr steht auf der
Javadoc Tool Home Page.

