All Packages  Class Hierarchy  This Package  Previous  Next  Index

Class tesc2.GraphOptimizer

java.lang.Object
   |
   +----tesc2.GraphOptimizer

public class GraphOptimizer
extends Object

Der GraphOptimizer stellt Algorithmen zur Verfuegung, die das Layout eines Statecharts übernehmen. Die Variable LIST_OF_ALGORITHMS beinhaltet die Namen der implementierten Algorithmen. Über die Größe dieses Arrays ermittelt man die Anzahl der verwendbaren Algorithmen. Über die Methode start wird der Layoutprozeß gestartet. Dabei wird eine Kopie des übergebenen Statecharts erzeugt.

Erklärung der Algorithmen:
Das Layout erfolgt rekursiv über den Aufbau der abstrakten Syntax. Die Größe von Basic-States wird entsprechend ihres Namens durchgeführt. Bei AND-States wird zuerst das Layout der Unterzustände bestimmt und diese dann so angeordnet, daß der Raum möglichst optimal ausgenutzt wird. Bei OR-States wird das Layout der Unterzustände bestimmt und diese dann nach einem bestimmten Verfahren im Zustand angeordnet. Diese Verfahren unterscheiden sich für die verschiedenen Algorithmen, der Rest ist gleich.

SugiyamaBCM: Die Knoten (Unterzustände) werden so in Ebenen angeordnet, daß in einer Ebene keine Transitionen verlaufen. Transitionen verlaufen nur von einer Ebene zur nächsten, wobei für Transitionen, die eigentlich über mehrere Ebenen verlaufen, Dummy-Knoten in den Zwischenebenen eingefügt werden. Dann werden die Knoten in den Ebenen so permutiert, daß möglichst wenige Kantenüberschneidungen vorkommen (heuristisch). Ausgehend von dieser Darstellung, die die Größe der Unterzustände nicht berücksichtigt, werden die Unterzustände dann endgültig plaziert.

CircleLayoutAlgorithm: Die Knoten werden in einem Kreis angeordnet. Zuerst werden für jeden Knoten ein umgebender Kreis berechnet, dann diese Kreise um einen Transitionskreis so angeordnet, daß sich je zwei berühren und alle den Transitionskreis berühren. Die Transitionen von einem State zu einem anderen verlaufen dann vom Startstate zu einem Punkt auf dem Transitionskreis, zu einem zweiten Punkt auf dem Transitionskreis und von da zum Endstate. Dadurch ist gewährleistet, daß Transitionen keine States schneiden.
Bei diesem Algorithmus entstehen große Statecharts, er empfiehlt sich also nur für kleinere Beispiele.

Vorbedingungen:
Das beim Konstruktor übergebene Statechart muß folgende Korrektheitsbedingungen erfüllen:
-keine Interlevel-Transitionen
-keine Schleifen im State-Baum
-bis auf die Instanzvariablen für Koordinaten (und Listen usw.) dürfen keine null-Pointer vorkommen

Nachbedingungen: Es wird ein Clone des Statecharts mit Koordinaten zurückgegeben.

STATUS Layout wird wie oben beschrieben durchgeführt.
Im Verzeichnis tesc2/Test findet sich ein Programm TestFrame, das in diesem Verzeichnis mit 'make frame' gestartet werden kann. Es wird dann ein Zufallsstatechart erzeugt und 'behelfsmäßig angezeigt.
TODO Wir haben fertig!
BEKANNTE FEHLER keine
TEMPORÄRE FEATURES keine
Created: Fri Nov 27 11:26:25 1998

Version:
$Id: GraphOptimizer.java,v 1.12 1999/02/10 10:00:46 swtech19 Exp $
Author:
Software Technologie 19, Klaus Höppner, Achim Abeling

Variable Index

 o LIST_OF_ALGORITHMS
Die Einträge des Arrays sind Namen für die verwendbaren Algorithmen.

Constructor Index

 o GraphOptimizer()
Default-Konstruktor
 o GraphOptimizer(Statechart, FontMetrics)
Erzeugt Optimierer für Statechart _sc mit FontMetrics _fm

Method Index

 o setAlgorithm(int)
Setzt den aktuellen Algorithmus
 o setFontMetrics(FontMetrics)
Setzt die aktuelle FontMetrics
 o setStatechart(Statechart)
Setzt das aktuelle Statechart
 o start()
Optimiert aktuelles Statechart mit aktuellem Algorithmus
 o start(int)
Optimiert das aktuelle Statechart mit Algorithmus _algorithm

Variables

 o LIST_OF_ALGORITHMS
 public static final String LIST_OF_ALGORITHMS[]
Die Einträge des Arrays sind Namen für die verwendbaren Algorithmen. Die Anzahl der Algorithmen erhält man über die Länge des Array.

Constructors

 o GraphOptimizer
 public GraphOptimizer()
Default-Konstruktor

 o GraphOptimizer
 public GraphOptimizer(Statechart _sc,
                       FontMetrics _fm)
Erzeugt Optimierer für Statechart _sc mit FontMetrics _fm

Methods

 o start
 public Statechart start(int _algorithm) throws AlgorithmException
Optimiert das aktuelle Statechart mit Algorithmus _algorithm

Throws: AlgorithmException
Falls ein Fehler auftreten sollte (was wissen wir auch noch nicht)
 o start
 public Statechart start() throws AlgorithmException
Optimiert aktuelles Statechart mit aktuellem Algorithmus

Throws: AlgorithmException
Falls ein Fehler auftreten sollte (was wissen wir auch noch nicht)
 o setStatechart
 public void setStatechart(Statechart _sc)
Setzt das aktuelle Statechart

 o setFontMetrics
 public void setFontMetrics(FontMetrics _fm)
Setzt die aktuelle FontMetrics

 o setAlgorithm
 public void setAlgorithm(int _algorithm)
Setzt den aktuellen Algorithmus


All Packages  Class Hierarchy  This Package  Previous  Next  Index