Promotionsvorhaben

GRABE - Eine objektorientierte Sprache zur Spezifikation von Symbolen in interaktiven grafischen Editoren

Name
Albrecht Meissner
Status
Abgeschlossen
Abschluss der Promotion
Erstbetreuer*in
Prof. Dr. Manfred Rosendahl
Gutachter*in 2
Prof. Dr. Jürgen Ebert
GRABE stellt zum einen eine Sprache zur Verfügung, mit der Symbole und grafische Beziehungen zwischen diesen komfortabel beschrieben werden können. Zum anderen besteht GRABE aus einem Laufzeitsystem, das den Aufbau und die Manipulation von Strukturen aus Symbolen und grafischen Beziehungen erlaubt. Die GRABE--Sprache orientiert sich mit ihrer Syntax und den angebotenen Konzepten weitgehend an der Sprache C++ und ist damit einfach zu erlernen. Bekannte Vorgehens- und Denkweisen können leicht auf GRABE adaptiert werden. Mit (Mehrfach-)Vererbung beispielsweise lassen sich in GRABE -- wie in C++ -- Redundanzen in den Beschreibungen vermeiden. Dies gilt besonders für den Bereich der Serviceoperationen, die wie C++--Methoden angegeben werden. Einfache Anpaßbarkeit an veränderte Anforderungen wird damit gewährleistet. Innerhalb der mit GRABE beschriebenen Operationen wird keine Basisfunktionalität z.B. für die Arbeit mit grafischen Primitiven vorgegeben. Stattdessen können applikationsabhängig beliebige C++--Bibliotheken zur Bereitstellung einer Basisfunktionalität verwendet wreden. Die Definition von dreidimensionalen Formen ist daher bei Verwendung einer entsprechenden Bibliothek problemlos möglich. Vorhandene Funktionalität kann also maximal genutzt werden. Nicht vorhandene Funktionalität kann innerhalb der Formen realisiert werden, so daß die aufsetzende Applikation davon unberührt bleibt. Für die Kapselung der Formen werden zudem die aus C++ bekannten Mechanismen zur Zugriffsbeschränkung angeboten. Über diese aus C++ bekannten Konzepte hinaus bietet GRABE spezielle Konstrukte zur Beschreibung von grafischen Beziehungen an: Kontaktstellen und Layoutoperationen. Kontaktstellen ermöglichen Symbolen den Datenaustausch mit anderen Symbolen zur Realisierung von grafischen Beziehungen. Layoutoperationen beschreiben den Datenfluß innerhalb der Symbole, der den Datenaustausch verwirklicht. Diese Layoutoperationen sind Teil der Symbole, so daß grafische Beziehungen aufgespalten und den beteiligten Symbolen zugeordnet werden. Diese Kapselung hat gegenüber einer expliziten Verwendung von grafischen Beziehungen eine Reihe von Vorteilen. Die Instanziierung von grafischen Beziehungen wird stark vereinfacht und beschränkt sich auf das Verbinden von Kontaktstellen. Umfang und Typ der Daten, die über Kontaktstellen ausgetauscht werden, legt der Formenentwickler fest. Die Art der grafischen Beziehung ist daher nicht vorgegeben, sondern kann individuell angepaßt werden. Mit standardisierten Kontaktstellen für häufig auftretende Beziehungen kann der Formenentwickler eine hohe Wiederverwendbarkeit und gute Kombinationsfähigkeit der Formen gewährleisten. Eine Bereitstellung von Formenbibliotheken wird so ermöglicht. Die Durchsetzung der Grafik mit applikationsspezifischen Invarianten durch die Beschränkung auf konkrete Formkombinationen wird vermieden. Die Nachvollziehbarkeit der Wirkung von grafischen Beziehungen ist gut, da sie sich durch den Datenfluß über die beteiligten Kontaktstellen beschreiben lassen, wobei durch das Layoutverfahren die Aktualität der Werte sichergestellt wird. Innerhalb der Formen ermöglichen die operationalen Beschreibungen der Layoutoperationen zum einen eine gute Planbarkeit und Vorhersagbarkeit des Verhaltens einer Form unabhängig vom Kontext, in dem sie eingesetzt wird. Zum anderen paßt sich diese Art der Beschreibung gut in die Vorgehensweise ein, die bei der Definition der Serviceoperationen und in C++ allgemein angewendet wird. Innerhalb der Beschreibungen von Formen stehen nicht nur Konstrukte für Kontaktstellen, Service- und Layoutoperationen bereit, sondern darüber hinaus auch die Operationen des Laufzeitsystems, die das Erzeugen und Löschen von Symbolen und grafischen Beziehungen ermöglichen. Dadurch lassen sich zusammengesetzte Symbole mit spezifischen Serviceoperationen einfach realisieren, die eine 1:1--Zuordnung von Grafik und applikationsspezifischen Strukturen erlauben. GRABE--Beschreibungen werden mit Hilfe eines Compilers in C++--Klassen übersetzt. Die Funktionalität zum Aufbau der Grafikstrukturen wird dabei automatisch erzeugt. Der Verwender der Formen ist so in der Lage, Symbole und grafische Beziehungen wie C++--Objekte zu instanziieren, ohne sich um deren interne Repräsentation zu kümmern. Verwaltet werden die Grafikstrukturen vom GRABE--Laufzeitsystem, das neben der Strukturierungsmöglichkeit in Dokumente und dem Retrieval der Strukturen auch die Auswertung der grafischen Beziehungen, d.h. die Layoutberechnung ermöglicht. Das auf der Basis einer topologischen Sortierung arbeitende Berechnungsverfahren ist effizient und vermeidet sowohl überflüssige Berechnungen als auch zusätzliche Interaktionen mit dem Benutzer des Editors. Da Formen, grafische Beziehungen und Dokumente sowie die Funktionalität des Laufzeitsystems als Klassen bzw. Methoden angeboten werden, lassen sie sich einfach in eine Präsentationskomponente integrieren. Die gilt nicht nur für Applikationen, die dem Seeheim--Modell folgen, sondern auch für Systeme mit eventorientierten Architekturen. Die Trennung von Grafik und applikationsspezifischen Strukturen wird dadurch besonders unterstützt und die leichte Erweiterbarkeit um Anordnungsbeziehungen bzw. Verfahren zur Berechnung von globalen Layouts gewährleistet. Als weitere Ausbaustufe ist ein grafisch interaktives Entwicklungssystem für Formen denkbar, das soweit wie möglich die textuellen Beschreibungen mit GRABE ersetzt. Die Erwartungen an ein solches System sollten jedoch nicht zu hoch gestellt werden, da sich ohne Beschränkung der Mächtigkeit nur wenig Anteile wie die konkrete Visualisierung durch grafische Primitive, grafisch interaktiv eingeben lassen. Serviceoperationen, die i.a. den Hauptanteil einer Formbeschreibung ausmachen (siehe z.B. die Beschreibung der KOGGE--Basisform im Abschnitt G.2.1), sind beispielsweise davon ausgeschlossen, da sie sich nit adäquat grafisch definieren lassen. Beschränkt man dagegen die Mächtigkeit auf von System vorgesehene Fälle, so lassen sich zumindest typische Serviceoperationen wie ``Picken'' und ``Highlight'' ohne textuelle Anteile beschreiben. Die in dieser Arbeit beschriebenen Ideen und Konzepte sind über den hier beschriebenen Kontext von strukturierten Grafiken hinaus auch für andere Anwendungen verwendbar. Gut einsetzen läßt sich GRABE--Ansatz immer da, wo Eigenschaften von Objekten durch Attribute modelliert werden,Beziehungen zwischen den Objekten bzw. deren Attributen ausgedrückt und berücksichtigt werden müssen, die typischerweise gerichtet sind und wodiese Strukturen häufig manipuliert werden müssen. Die universelle Verwendbarkeit von GRABE wird durch den Verzicht auf grafikspezifische Attribute und Operationen in der GRABE--Basisform und der GRABE--Dokumentklasse deutlich. Begriffe wie ``Form'' oder Layoutoperationen sind daher eigentlich nicht treffend und müßten allgemeiner ``Objekt'', und ``Attributauswertungsvorschrift'' genannt werden.