gif gif gif gif Index Literaturverzeichnis Mail
Nächstes: Verwendung mit einem Plugin Nach oben: Datensprache als Teil einer Komponente Vorheriges: Beispiel: Vollständig native Datensprache

Beispiel: Objektorientierte Datensprache

 

Das gleiche Datenfragment kann unter Nutzung des ,,objektorientierten`` Formates der nativen Datensprache als Objektgraphik  geschrieben werden, wie in Abbildung 9.14 dargestellt.

set c [new polygon $w \
1.33039 0.57027 1.36029 0.59123 1.34591 0.50223 1.34591 0.44262 \
1.33314 0.41707 1.32797 0.37687 1.30972 0.35746 1.27992 0.35320 \
1.25650 0.33617 1.24296 0.32417 1.21179 0.32979 1.19902 0.34469 \
1.17347 0.34469 1.14416 0.36309 1.12876 0.34895 1.14792 0.34043 \
1.14154 0.31488 1.11386 0.31488 1.10109 0.29998 1.07054 0.29423 \
1.03341 0.29185 1.02019 0.32766 1.02019 0.34895 1.02861 0.38514 \
1.02861 0.41158 1.00742 0.39152 0.98251 0.38164 0.98251 0.40430 \
0.96484 0.39152 0.94359 0.41876 0.93879 0.48524 0.88614 0.51518 \
0.88614 0.60021 0.88852 0.64209 0.91374 0.65977 0.89988 0.68344 \
0.99688 0.72716 0.96694 0.81694 1.07471 0.82592 1.25673 0.82354 \
1.30943 0.73852 1.21301 0.62593 1.33039 0.57027 \
-fill gold -width 1 -tags {itemshape country germany} ]
$w bind germany <Button-1> {showName "$text_country_name_germany"}
$w bind germany <Shift-Button-3> {exec wish actsel$t_suff}

set d [new oval $w \
0.97 0.54 0.98 0.55 \
-fill blue -width 1 -tags {itemshape pointdata mess1} ]
$w bind mess1 <Button-1> {showName "Meßpunkt 1"}
$w bind mess1 <Shift-Button-3> {exec browedit$t_suff}

$w scale all 0 0 400 400
##EOF:

 
 

Abbildung 9.14: Datenbeispiel: actmap  Datensatz, basierend auf der eingeführten Objektgraphik, mit objektorientierter Datensprache 

Dabei ist insbesondere zu beachten, daß die beiden Objekte als Instanzen der jeweiligen Klasse entstehen und hier in den Variablen c und d gespeichert werden. Für umfangreichere Datensätze sollten längere Namen verwendet werden.

Daten von diesem Typ werden in Verwendung mit dem Prototyp  als ,,GIS Object Source`` ( GOS , .gos)  bezeichnet.

Dies ist lediglich ein umgesetztes Beispiel für eine objektorientierte Form derartiger Daten. Die Implementierung der zugehörigen Klassen zu solchen Daten kann auf verschiedene Weise vorgenommen werden.

In der folgenden Implementierung wurden Funktionen verwendet, die ausschließlich auf Tcl/Tk basieren ( STOOOP ),  um die größtmögliche Flexibilität beim Einsatz von Interpretern und Werkzeugen zu gewährleisten.

Die zugehörige nötige Klasse polygon  mit einigen Methoden für die Handhabung der Objekte zeigt der Quellentext, der in Abbildung 9.15 angegeben ist.

class polygon {
  proc polygon {this canvas args} {
    set polygonpoints $args
    set polygon::($this,polygonpoints) $polygonpoints
    set polygon::($this,canvas) $canvas
    set tmppoly "$canvas create polygon $polygonpoints"
    set polygon::($this,id) [eval $tmppoly]
  }
  proc ~polygon {this} {
    $polygon::($this,canvas) delete $polygon::($this,id)
  }
  proc move {this x y} {
    $polygon::($this,canvas) move $polygon::($this,id) $x $y
  }
  proc fill {this fill} {
    $polygon::($this,canvas) itemconfigure $polygon::($this,id) \
                             -fill $fill
  }
}

 
 

Abbildung 9.15: Anwendungsbeispiel: (ladbare) actmap  Klasse mit Methoden 

Diese und ähnliche Klassen sind jederzeit in gleicher Weise ladbar oder nachladbar, wie alle anderen Funktionen und Daten in dieser Implementierung.

Abgebildet ist hier lediglich ein Teil einer Klasse polygon mit einem nachgebildeten Destruktor und zwei Methoden move und fill. In dieser Art von Klasse wird das Objekt direkt in das (durch ein Argument) übergebene Canvas  erzeugt.

Obwohl hier nur ein kleiner Teil einer realen Klasse abgebildet ist, ist dieser Teil mit seinen Methoden bereits autark und funktionsfähig.

Diese Klassen mit spezifischen Methoden können vom Anwender nach Belieben durch eigene Klassen ersetzt oder ergänzt werden. Für verschiedene Zwecke sind so nicht nur verschiedene Sammlungen von Klassen, sondern auch verschiedene Implementierungen denkbar.

Damit kann aus einem Datensatz oder manuell bzw. über ein Skript aus der Shell z.B. folgendermaßen auf ein Objekt zugegriffen werden (Abbildung 9.16):

polygon::move $c -150 -50
update; after 100
polygon::fill $c red

  
Abbildung 9.16: Anwendungsbeispiel: actmap  Benutzerzugriff auf Objekt in objektorientierter Datensprache 

Der Zugriff über Methoden auf das Objekt, hier das Polygonobjekt in c, erfolgt über die betreffende Variable, in der das Objekt abgelegt ist.

Eine Verbindung zu bestimmten Vordefinitionen oder Anbindungen ist in beiden Fällen möglich, nativ und objektorientiert.

Entsprechende Daten wurden in Zusammenhang mit dem entwickelten Prototyp  in den meisten Fällen in separaten Dateien abgelegt.

Die beiden Datentypen wurden ,,Bind Daten`` ( BND )  und ,,Settings Daten`` ( SET )  benannt.

Abbildung 9.17 zeigt einen kleinen Ausschnitt aus dem zugehörigen Klassendiagramm der graphischen Primitive der entwickelten objektorientierten Datensprache.

  figure5042
Abbildung 9.17: Klassendiagramm zu graphischen Primitiven in OO-Daten der entwickelten Datensprache

Das Klassendiagramm (Abbildung 9.17) zeigt einige als Generalisierungshierarchien modellierte taxonomische Zusammenhänge.

Linie, Polygon, ... sind konkrete Formen des abstrakten Sammelbegriffs Basiselemente. Das Auslassungszeichen ,,...`` deutet an, daß noch weitere Varianten existieren, die nicht explizit aufgeführt sind.
Die Superklasse Basiselemente (kursiv) ist abstrakt. Es kann keine direkten Instanzen von der Superklasse Basiselemente geben. Jedes zugehörige Objekt muß einer der Unterklassen angehören.

Die Handhabung der unterschiedlichen Kategorien von Daten zeigt Abbildung 9.18.

  figure5067
Abbildung 9.18: Handhabung unterschiedlicher Kategorien von Daten

Über die Kernkomponente actmap hat der Anwender Zugriff auf Daten in nativen Formaten, wie sie in dieser Dissertation beschrieben werden (z.B. native, teilweise native, objektorientierte Daten basierend auf Quellentext).

Beispielsweise über Filter oder durch das Klonen von Funktionen können autarke Daten hergestellt werden.

In gleicher Weise können Daten für Klienten, z.B. die Nutzung innerhalb Plugins aufbereitet werden.

Neben der prinzipiellen Möglichkeit der Integration von Verfahren zur Nutzung konventioneller Daten, stehen flexible Erweiterungsmöglichkeiten für zukünftige Entwicklungen zur Verfügung.

Wie diese konkret aussehen, entscheiden die Entwicklungen der nächsten Jahre.


gif gif gif gif Index Literaturverzeichnis Mail
Nächstes: Verwendung mit einem Plugin Nach oben: Datensprache als Teil einer Komponente Vorheriges: Beispiel: Vollständig native Datensprache


Claus-Peter Rückemann / ruckema@uni-muenster.de / Tel. --
Sun Jan 20 19:17:16 MET 2002