next up previous contents
Next: Das Kommando-Modell Up: Grundlagen der Implementierung Previous: Grundlagen der Implementierung

Das XFantasy-UIT

Das XFantasy-UIT [Gö92] ist eine Softwarebibliothek, die einen Programmierer bei der Implementierung interaktiver graphischer Benutzerschnittstellen unterstützt. Die Bibliothek ist in Form einer Klassenhierarchie in der objektorientierten Programmiersprache C++ [Str91] realisiert. Funktional läßt sich das XFantasy-UIT in folgende vier Komponenten gliedern, deren Beziehungen zueinander in Abbildung 7.1(a) (aus [AG93]) dargestellt werden:

 
Abbildung 7.1:   Architektur des XFantasy-UITs

Das XFantasy-UIT ist aufbauend auf dem X Window-System [SG86] implementiert. Der Zugriff auf das Window-System wird dabei, was die Ausgabefunktionalität betrifft, durch die Graphikklassen, und was die Schnittstelle zu den Eingabegeräten betrifft, durch die Eventerkennung gekapselt. Die User-Interface-Klassen sowie die Eventbehandlung sind, wie auch Abbildung 7.1 zeigt, damit unabhänig vom zugrundeliegenden Window-System. Während die UI-Klassen eine Menge von Standard-UI-Komponenten zur Verfügung stellen, bieten die Klassen der Eventbehandlung Mechanismen für die Definition und Steuerung des Dialogablaufs.

Graphikbibliothek

Durch die Graphikbibliothek bietet das XFantasy-UIT einem Programmierer eine Schnittstelle zu den diskreten Medientypen Graphik und Text. An graphischen Ausgabeobjekten werden dabei alle üblichen, auch in anderen Graphikbibliotheken, wie GKS [ANS85a] oder PHIGS [ANS85b], realisierten 2D-Objekte zur Verfügung gestellt. 3D-Graphik wird dagegen nicht unterstützt. Die Bibliothek ist in Form einer C++-Klassenhierarchie implementiert und durch die objektorientierten Konzepte der Vererbung und Komposition einfach erweiterbar. Abbildung 7.2 zeigt die Hierarchie der Graphikklassen. Die Blätter der Hierarchie bilden die elementaren Graphikklassen. Die Klassen enthalten zahlreiche Methoden, über die sich geometrische Attribute, wie Position und Größe, und visuelle Attribute, wie Farbe oder Textfont, der Objekte manipulieren lassen.

 
Abbildung 7.2:   Graphikklassen des XFantasy-UITs

Von besonderer Bedeutung ist die Klasse FComposite. Ein FComposite-Objekt ist ein graphisches Objekt, das die Zusammenfassung beliebiger graphischer Objekte zu einem komplexen Graphikobjekt ermöglicht.

Für das Layout-Management beinhaltet die Graphikbibliothek ein objektorientiertes Constraint-System [Lel88], mit dem deklarativ uni- und bidirektionale Abhängigkeiten zwischen den geometrischen Attributen der Graphikobjekte definiert und überwacht werden können. Constraints lassen sich dabei in Form von linearen Gleichungen oder Maximum/Minimum-Beziehungen definieren.

Eventerkennung

Zentrale Komponente der Eventerkennung ist der Dispatcher. Er sammelt alle durch das Window-System gelieferten Events, wie Maus- und Tastatur-Events, und liefert sie an interessierte Objekte der Eventbehandlung weiter. Die Eventerkennung basiert damit auf dem Prinzip der Invertierten Programmierung. Die Device-Schnittstelle beinhaltet zusätzlich ein Timer-Device-Objekt und ein Application-Device-Objekt. Das Timer-Device-Objekt erkennt temporale Events, wie das Erreichen eines Zeitpunktes und das Verstreichen einer Zeitspanne. Über das Application-Device-Objekt ist eine eventbasierte Kopplung der Applikation und der Benutzerschnittstelle möglich, wodurch eine gegenseitige Unabhängigkeit gewährleistet wird. Die Komponenten der Eventerkennung und deren Beziehungen untereinander werden in Abbildung 7.3 gezeigt.

 
Abbildung 7.3:   Komponenten der Eventerkennung

Nicht direkt in die Eventerkennung integriert sondern auf der Ebene der Eventbehandlung realisiert sind die sogenannten Variablenobjekte, die einen bool-, float- bzw. int-Wert kapseln. Wird dieser Wert geändert, wird ebenfalls ein Event generiert und an den Dispatcher gesendet, der die weitere Verteilung übernimmt.

 

Eventbehandlung

Die Eventbehandlung des XFantasy-UITs unterstützt die Erkennung und Verarbeitung von komplexen Events. Sie basiert auf dem vom Interaktionsmodell [Hü90] abgeleiteten ECO-Modell [Tie91]. Ein komplexes Event wird dabei in Form einer strukturierten Zusammenfassung von Basis-Events, anderen komplexen Events, Bedingungen und Aktionen gebildet. Basis-Events und komplexe Events werden prinzipiell gleichbehandelt, so daß die Definition von Eventhierarchien und damit eine Eventbehandlung auf unterschiedlichen Abstraktionsstufen ermöglicht wird. Die Eventverteilung und -verarbeitung erfolgt dezentral durch die Objekte der Eventbehandlung. Diese erkennen Events und leiten sie in Form von sogenannten FEventInfo-Objekten an interessierte Objekte weiter.

Die Bildung komplexer Events erfolgt durch die sogenannten Operatorobjekte, die vier logische Verknüpfungstypen repräsentieren: Sequence (Klasse FSequence), Or (Klasse FOr), And (Klasse FAnd) und Repeat (Klasse FRepeat). Operatorobjekten können als Komponenten Eventobjekte (Klasse FEvent), Aktionsobjekte (Klasse FAction), Bedingungsobjekte (Klasse FCond) und andere Operatorobjekte zugeordnet werden, so daß eine Objekthierarchie entsteht. Eventobjekte kapseln die Events. Über Bedingungsobjekte können Eventinformationen überprüft werden. Aktionsobjekte dienen unter anderem zur Realisierung eines direkten graphischen Feedbacks. Abbildung 7.4 demonstriert die Modellierung eines MoveGuards (direkt-manipulatives Verschieben einer Box): Nach dem Drücken eines Mausknopfes über der Box wird diese invers dargestellt. Nun kann sie verschoben werden, bis der Mausknopf losgelassen wird. Anschließend wird die Invertierung rückgängig gemacht und überprüft, ob die erreichte Position gültig ist. Falls dies nicht der Fall ist, wird eine Fehlermeldung ausgegeben.

 
Abbildung 7.4:   Objekthierarchie eines komplexen Events

 

User-Interface Klassen

User-Interface Klassen werden im XFantasy-UIT aufbauend auf den Graphikklassen implementiert. Abbildung 7.5 zeigt, daß sie im allgemeinen entweder von der Klasse FComposite oder von der Klasse FWindow abgeleitet sind. Durch das objektorientierte Konzept der Vererbung sind damit alle Prinzipien und Funktionen der Graphikobjekte auch auf User-Interface Objekte anwendbar. Mittels der Vererbung bzw. der Komposition können jederzeit weitere User-Interface Klassen definiert werden.

 
Abbildung 7.5:   User-Interface Klassen des XFantasy-UITs

User-Interface Objekte, auch UI-Komponenten genannt, stellen entweder Interaktionsformen dar, über die ein Benutzer mit dem Programm interagieren, d.h. Eingaben vornehmen kann, oder sie dienen einem einfacheren Layout-Management (siehe auch Kapitel 3.2.3.1). Folgende Interaktionsformen, deren Erscheinungsbild und Funktionalität in Kapitel 3.2.3.1 beschrieben wurde, werden durch das XFantasy-UIT standardmäßig angeboten:

Als Klassen zum Layout-Management dienen Viewports und Tabellen. Viewports sind prinzipiell unendlich große Flächen, die beliebige graphische Objekte aufnehmen können. Sichtbar ist im allgemeinen immer nur ein kleiner rechteckiger Ausschnitt der Fläche. Der sichtbare Bereich kann aber mit Hilfe von Scrollbars verändert werden. Tabellen stellen Gitter dar, deren Zellen beliebige graphische Objekte zugeordnet werden können. Die Tabellen sorgen intern für eine korrekte Anordnung der Zellen. Zeilen- bzw. Spalten-Objekte stellen vereinfachte Tabellenformen dar.

Den UI-Komponenten liegt häufig eine komplexe Behandlung von Benutzereingaben zugrunde. Diese ist vollständig mit Hilfe der Mechanismen der Eventerkennung und -behandlung des XFantasy-UITs realisiert und wird -- wie das Erscheinungsbild der Objekte auch -- durch die Objekte gekapselt.


next up previous contents
Next: Das Kommando-Modell Up: Grundlagen der Implementierung Previous: Grundlagen der Implementierung

Dietrich Boles
Thu Nov 14 14:58:01 MET 1996