next up previous contents index
Next: Beispielanwendungen Up: Einleitung Previous: Anwendungen mit beliebigen Graphen

Die Wertewelt des Graphenlabors

  Für die Attributierung von Graphen muß das Graphenlabor  Wertebereiche und die daraus resultierenden  Werte bereitstellen. In Abbildung sind die Zusammenhänge zwischen den relevanten Graphenlaborklassen dargestellt.[*]
  
Abbildung: Zusammenhang zwischen Graphelementen und Werten
\begin{figure}
\begin{center}
 
\includegraphics [scale=.8]{intro/domsys.eps}
 \end{center}\end{figure}

Die  Typen und  Attribute werden im Typsystem ( G_typeSystem) definiert. Dabei muß jedem Attribut ein Wertebereich ( G_domain) zugeordnet werden, der den Wert dieses Attributes beschreibt. Über die Attributierungsschemata (AttributeSchema) werden den Typen beliebig viele  Attribute zugewiesen.

Auf der anderen Seite stehen die Graphen ( G_graph), die bei ihrer Initialisierung mit einem Typsystem verbunden werden. Sie enthalten beliebig vielen Knoten ( G_vertex) und Kanten ( G_edge). Beim Erzeugen eines neuen Graphelementes muß ihm ein Typ aus dem Typsystem zugewiesen werden und es werden Werte ( G_valueRef) angelegt, die dem Attributierungsschema des Typs entsprechen.


Die Wertebereiche ( G_domain) werden im  Wertebereichssystem verwaltet, welches im Programm global verfügbar ist. Sie sind entweder  elementare Wertebereiche ( Basiswertebereiche), oder sie werden mit  Wertebereichskonstruktoren erzeugt ( komplexe Wertebereiche). Diese Zusammenhänge sind in Abbildung dargestellt. Dieses Diagramm stellt nicht die interne Implementation dar. Es soll nur die Zusammenhänge zwischen den Wertebereichen und ihren Operationen verdeutlichen. Die gestrichelt gezeichneten Klassen symbolisieren Klassen, die nur intern benutzt werden. Als Schnittstelle zu Anwendungen dient nur die Klasse  G_domain. Wenn eine Operation aufgerufen wird, die in der Unterklasse nicht definiert ist, dann erzeugt sie eine Fehlermeldung.

Als elementare Wertebereiche sind BOOL, INT, STRING und DOUBLE vordefiniert. Sie sind über Klassenvariablen der Klasse  G_domain erreichbar. Diese Wertebereiche bilden die Basis für die konstruierten Wertebereiche. Mit der Operation  newList() kann ein Listenwertebereich erzeugt werden, der über einem vorhandenen Wertebereich definiert ist. Die Operationen  newTuple() und  newRecord() erzeugen neue Tupel- bzw. Recordwertebereiche. Dabei muß eine Folge von Wertebereichen bzw. eine Zuordnung von Selektorbezeichnern zu Wertebereichen angegeben werden. Aufzählungswertebereiche werden mit  newEnum() erzeugt und benötigen eine Liste der Aufzählungskonstanten. Diese Konstruktoroperationen sind als Klassenmethoden der Klasse  G_domain implementiert.

  
Abbildung: Objektmodell der Wertebereiche
\begin{figure}
\centering
 
\includegraphics {intro/erdomain.eps}\end{figure}


Die Welt der Werte im Graphenlabor ist analog zu den Wertebereichen realisiert. In Abbildung sind die Zusammenhänge unter den Werten dargestellt, wobei interne Klassen wieder gestrichelt sind. Auf einen Attributwert eines Knotens oder einer Kante kann man über die Operationen  getVAttr() und  getEAttr() der Klasse  G_graph (siehe Abb.) zugreifen. Dabei erhält man eine Instanz der Klasse  G_valueRef. Diese enthält neben einem Zeiger auf den Speicherbereich, an dem der Wert abgelegt ist, auch die Beschreibung des zugrundeliegenden Wertebereiches. Der angegebene Speicherbereich kann nur mit Kenntnis des Wertebereichs interpretiert werden.

Die Klasse  G_valueRef ist wiederum eine abstrakte Oberklasse. Werte von elementaren Wertebereichen können mit den updateXXX()-Operationen gesetzt und mit den getXXX()-Operationen abgefragt werden. Bei konstruierten Wertebereichen werden über entsprechende Operationen einzelne Komponenten aus den komplexen Werten ausgewählt. Dabei werden wiederum Instanzen der Klasse  G_valueRef erzeugt, die auf Komponenten in den komplexen Werten verweisen.

  
Abbildung: Objektmodell der Werte
\begin{figure}
\centering
 
\includegraphics {intro/ervalue.eps}\end{figure}


next up previous contents index
Next: Beispielanwendungen Up: Einleitung Previous: Anwendungen mit beliebigen Graphen
Friedbert Widmann
7/20/2003