Als Fallstudie haben wir einen Fernsehapparat gewählt. An diesem lassen sich nicht nur alle wesentlichen Modellierungskonzepte darstellen, sondern man kann auch mit viel Spaß an der Sache zu einem schönen Ergebnis kommen. Ein wesentlicher Punkt ist dabei aber auch, dass es sich bei einem Fernseher um einen Alltagsgegenstand handelt, dessen Funktionsweise und Bedienung den meisten geläufig seien sollte. Auch wenn sich deren konkrete Umsetzung von Gerätetyp zu Gerätetyp unterscheidet, so besitzt dennoch fast jeder bereits eine recht gute Vorstellung über das zu bedienende Gerät.
Hier nun die Auflistung der Anforderungen an die Bedienoberfläche unseres Fernsehers:
Für jeden Zustand des Fernsehers, der sich durch sein Aussehen oder Verhalten von anderen unterscheidet, muss ein entsprechender Zustand (State) im Statechart definiert werden. Viele dieser Zustände stellen jedoch Spezialisierungen anderer übergeordneter Zustände dar, deswegen liegt es nahe, im Top-Down-Verfahren zuerst die Oberzustände zu definieren, und diese mit Unterzuständen weiter zu verfeinern.
Auf oberster Ebene beginnen wir mit dem Zustand FERNSEHER. Dieser Zustand wird alle weiteren Zustände umfassen und als Layout alle GUI-Elemente enthalten, die allen Zuständen gemein sind. Dazu gehören einige, da der Fernseher in seinem grundsätzlichen Äusseren erhalten bleibt. Auf die Modellierung einer gewaltsamen Zerstörung des Gerätes als Benutzerinteraktion wird also in diesem Modell verzichtet.
Der Zustand FERNSEHER umfasst die zwei grundlegenden Zustände AN und AUS, die jeweils den ein- und ausgeschalteten Zustand des Fernsehers modellieren. Zwischen diesen Zuständen wird mit dem im Zustand FERNSEHER definierten GUI-Element für den Hauptschalter hin- und hergeschaltet werden können. Für den Hauptschalter wird dazu ein Button-Element gewählt, das beim Drücken durch den Benutzer das POWER-Signal auslöst (siehe Abb. 5.1).
Um nun die Bedienung des Fernsehers im eingeschalteten Zustand zu beschreiben, wird der Zustand AN weiter verfeinert. Neben dem Hauptschalter wurden drei weitere Bedienmöglichkeiten gefordert: Die Programmauswahl, die Lautstärkeregelung und die Mute-Funktion. Diese sind in ihrer Wirkungsweise voneinander unabhängig, sind also orthogonale Bedienkonzepte. Daher lassen sie sich hevorragend als parallele Abläufe des AN-Zustands modellieren (Abbildung 5.2).
Die einfachste Bedienmöglichkeit ist sicherlich das Stummschalten des Tons. Hier reicht eine Kombination aus zwei Zuständen aus, um das Verhalten dieser Funktion zu beschreiben. Die fünf Stufen der Lautstärkeregelung werden durch entsprechend viele Zustände in einer parallelen Region (Compartment) umgesetzt. Diese werden mit ihren jeweils benachbarten Stufen mit Transitionen zu einer doppelt verketteten Liste aufgebaut. Ähnlich werden auch die drei angebotenen Programme modelliert. Allerdings werden nicht nur die benachbarten Programme miteinander in beide Richtungen verbunden, sondern zusätzlich auch das erste und das letzte Programm, um das geforderte zyklische Umschalten zu ermöglichen.
Zusätzlich werden diese Programme in einem umfassenden Zustand gekapselt. Das Layout dieses zusätzlichen Zustands PROGRAMME wird das GUI-Element enthalten, das das Programmkürzel anzeigt. Zwar könnte man dies auch direkt in den Programmzuständen realisieren, indem jeder der in seinem Layout ein eigenständiges Text-Element definiert. Geschickter ist es jedoch, sich das Konzept zunutze zu machen, nach dem ein Layout als Liste von Änderungen aufzufassen ist. Es ist besser, ein GUI-Element einmal im Vaterzustand zu definieren und dann in unterschiedlichen Kindzuständen in einer bestimmten Eigenschaft zu verändern. So können nachträgliche Änderungen an anderen Eigenschaften des Originalelements zentral an einer Stelle vorgenommen werden, und haben automatisch die gewünschte Auswirkung auf alle erbenden Layouts.
Wenn also die Zustände für die Programme nur den Text des Elements ihrem Programm entsprechend abändern, so kann man bequem im übergeordneten Zustand die Farbe und die Schriftart des Text-Elements einstellen, ohne dies separat in jedem einzelnen Programm-Zustand erledigen zu müssen.
Es wäre natürlich auch möglich gewesen, das Text-Element in dem bereits vorhanden Vaterzustand AN zu erstellen. Allerdings sollten GUI-Elemente in den Zuständen definiert werden, in denen es semantisch sinnvoll ist. Das ist nicht nur besserer Stil, sondern ist auch entscheidend für das intuitive Verständnis eines GUI-Modells und für möglicherweise spätere Erweiterungen desselbigen.
Nachdem nun alle Zustände des Fernsehers modelliert worden sind, kann mit dem Erstellen der Layouts begonnen werden. Im Layout des Zustands FERNSEHER wird die Oberfläche des Fernsehers mit seinen Bedienelementen erstellt (vgl. Abb. 5.3). Für die Repräsentation der Bedienelemente eignen sich am besten Image-Buttons, für die separate Bilddateien für den normalen, den gedrückten und den deaktivieren Zustand festgelegt werden können.
Da die spätere Betätigung der Bedienelemente Zustandsübergänge bewirken sollen, erhalten die Buttons für die Interaktionsmöglichkeit des Drückens entsprechende Signale (vgl. Abb. 5.4). Natürlich soll die Bedienung des Fernsehers erst nach dem Einschalten möglich sein, daher werden alle Schalter anfangs deaktiviert (vgl. Abb. 5.5).
Dazu kommt die Bildschirmfläche, auf der später das Bild des Fernsehprogramms erscheint. Als zusätzlicher Effekt wird über die Bildschirmfläche noch ein stark transparentes Bild gelegt, das die Lichtreflektionen auf dem Bildschirm darstellt und so dem Fernseher ein realistischeres Aussehen verleiht. Dies wird möglich, da GuiBuilder auch Alpha-Transparenz in vollem Umfang unterstützt. Alle diese GUI-Elemente werden im obersten Zustand der Statechart-Hierarchie erstellt, da sie allen weiteren Zuständen gemeinsam zur Verfügung stehen sollen (vgl. Abb. 5.6).
Für alle weiteren Unterzustände ist damit für jede Eigenschaft der hier erstellten GUI-Elemente auch ein Standard festgelegt. Da beispielsweise das Aussehen der definierten GUI-Elemente im Zustand FERNSEHER dem des ausgeschalteten Fernsehgeräts entspricht, muss im direkten Unterzustand AUS nichts weiter getan werden. Im AN-Zustand werden dagegen die Bedienelemente aktiviert werden müssen. Außerdem wird als Basis für die Tonwiedergabe im Layout des AN-Zustands ein Sound-Element ohne konkrete Datei definiert, das von den Programmzuständen zur Ausgabe ihres jeweiligen Tons modifiziert werden wird. Im PROGRAMME-Zustand wird zudem noch - wie bereits erläutert - das Text-Element für die Programmkürzel erstellt (siehe Abb. 5.7).
Weitere GUI-Elemente brauchen nicht erstellt werden. Alle weiteren charakteristischen Merkmale der Benutzungsschnittstelle werden über Änderungen an geerbten GUI-Elementen modelliert.
Im AN-Zustand werden alle Bedienelemente aktiviert und können somit, wenn sich der Fernseher in diesem Zustand befindet, zur Steuerung des Fernsehers vom Benutzer betätigt werden. Die Buttons lösen bei Betätigung Signale aus, die Zustandsübergänge in den parallelen Regionen (Compartments) des AN-Zustands bewirken, welche durch das Betreten des AN-Zustands natürlich ebenfalls aktiv werden (vgl. Abb. 5.8).
Im Teil der Programmsteuerung wird im Layout des jeweiligen Senders die Bilddatei des entsprechenden Programms in das dafür vorgesehene, vom Zustand FERNSEHER geerbte Bildelement geladen (siehe Abb. 5.9). Außerdem werden die Sound-Datei des Senders in das vom AN-Zustand geerbten Sound-Element geladen und wie bereits oben erwähnt der Text des Programmkürzels verändert.
Die Lautstärkeregelung passt nun die Lautstärke des Sound-Elements vom AN-Zustand an. In jedem der Zustände wird die Lautstärke der Stufe entsprechend eingestellt. Es wird im Übrigen dasselbe GUI-Element (Sound-Element) manipuliert, das von den Programmzuständen verändert wird. Da jedoch auf unterschiedliche Eigenschaften ein und desselben GUI-Elements separat Einfluss genommen werden kann, stellt dies kein Problem dar. Die Orthogonalität der Bedienkonzepte spiegelt sich also in der Veränderung voneinander unabhängiger Eigenschaften des GUI-Elements wider.
Im Zustand TON AUS wird das geerbte Sound-Element stummgeschaltet. Zur Kennzeichnung der Stummschaltung wird der Mute-Knopf zudem rötlich eingefärbt (siehe Abb. 5.10). Im Zustand TON AN muss dagegen nichts verändert werden. Der Grund dafür ist, dass beim Verlassen des Zustands TON AUS alle darin vorgenommenen Änderungen unwirksam werden, und damit natürlich auch das Stummschalten des Tons.
Hier wird wieder ein Vorteil unserer Konzeptionierung deutlich. Durch das Definieren des Sound-Elements im übergeordneten Zustand werden auch gleichzeitig die Standardeigenschaften festgelegt, und nur die Zustände, die explizit einige Eigenschaften in veränderter Form benötigen, müssen diese auch setzen. Durch dieses Vorgehen müssen Eigenschaften eines GUI-Elements nicht unnötig manipuliert werden.
Als letzte zu erfüllende Anforderung an den Fernseher wird die Deaktivierung der Lauter/Leiser-Knöpfe umgesetzt, wenn das jeweilige Limit erreicht wurde. Auch dies kann in einfacher Weise bewerkstelligt werden, indem im Layout des entsprechenden SEHR LAUT- bzw. SEHR LEISE-Zustands der korrespondierende Knopf deaktiviert wird (siehe Abb. 5.11). Eine explizite Reaktivierung der Knöpfe ist aus den bereits erwähnten Gründen nicht notwendig.
Alle an die GUI gestellten Anforderungen wurden in klarer und einfacher Weise erfüllt. Das Modell ist übersichtlich und leicht um neue Funktionalitäten erweiterbar. Nachträgliche Änderungen an bereits existierenden GUI-Elementen können zudem an zentraler Stelle vorgenommen werden. Das vorgestellte Modellierungskonzept hat sich in diesem Praxistest bewährt. Es bietet nicht nur vielfältige Möglichkeiten an, sondern erlaubt auch eine klar strukturierte Modellierung von Benutzungsschnittstellen. Das simulierte Ergebnis unserer Fallstudie finden Sie in Abbildung 5.12.
D. Hannwacker - A. Gebel - M. Dürksen 