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.
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.
Die Handhabung der unterschiedlichen Kategorien von Daten zeigt Abbildung 9.18.
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.