Wie Sie vielleicht bereits erfahren haben, kann jedem Zustand (State) ein Layout-Diagramm zugeordnet werden. Der grundlegende Gedanke dabei ist, dass zu jedem Zustand, in dem sich die GUI befinden kann, ein Layout-Diagramm das Aussehen der GUI in diesem Zustand beschreibt. Jetzt kann es aber passieren, dass nicht nur ein Zustand aktiv ist, sondern mehrere. Dies wird durch die Einführung der komplexen Zustände möglich. Ein einfacher Zustand, in dem sich die GUI gerade befindet, kann unter Umständen einen Vaterzustand besitzen, der dadurch ebenfalls aktiv ist und dieser kann wiederum einen Vaterzustand besitzen. Auf diese Weise kann es eine Kette von aktiven Vaterzuständen geben, deren Layouts anzuzeigen sind.
Eine weitere Möglichkeit für mehrere aktive Zustände stellt die Modellierung von parallelem Verhalten dar. Ein Zustand, der mehrere Compartments enthält, besitzt bei seiner Aktivierung in jedem seiner Compartments einen aktiven Zustand.
Durch diese beiden Konzepte ist es also möglich, dass es eine ganze Reihe von aktiven Zuständen gibt, deren Layouts gemeinsam anzuzeigen sind. Diese Layouts bilden in einer Komposition die resultierende Ansicht der GUI.
Die Komposition wird dabei in folgender Art und Weise erstellt. Sie können sich das so vorstellen, als wenn Sie mehrere Seiten Papier zur Verfügung haben. Jede Seite repräsentiert ein Layout. Das Papier ist dabei aus ganz speziellem Material gefertigt, so dass es an den Stellen transparent ist, an denen sich keine GUI-Elemente des Layouts befinden. Nun werden diese Seiten bzw. Layouts übereinandergestapelt. Dabei werden Layouts von Vaterzuständen in jedem Fall hinter denen ihrer Kindzustände einsortiert. Eine Reihenfolge zwischen Kindzuständen in unterschiedlichen Compartments ist nicht definiert, sie gelten als gleichberechtigt. Die finale Ansicht der GUI ergibt sich nun, wenn man von oben auf den Stapel der Seiten blickt (siehe Abb. 5.6).
In der Komposition der Layouts bleiben GUI-Elemente eines bestimmten Layouts also immer zusammen bzw. auf einer Seite. GUI-Elemente eines Layouts werden also nicht mit GUI-Elementen anderer Layouts verwoben, sondern werden stets separat gehalten. GUI-Elemente aus dem Layout eines Vaterzustands befinden sich aber alle geschlossen hinter denen, die sich in einem Layout eines zugehörigen Kindzustands befinden.
Dies ist aber noch nicht die ganze Wahrheit. Denn das Prinzip der Komposition wird noch durch ein Konzept erweitert. Es ist nämlich noch zusätzlich möglich, Layouts von Vaterzuständen zu verändern. Oder um präziser zu sein, GUI-Elemente aus diesen Layouts zu modifizieren. Das bedeutet, dass jeder Zustand, der sich auf dem Pfad von der obersten Ebene bis hinunter zum aktivierten einfachen Zustand befindet, jeweils Änderungen an allen GUI-Elementen vornehmen kann, die sich in Layouts von Zuständen befinden, die vor ihm auf dem Pfad liegen.
Die Komposition besteht nicht nur aus dem Übereinanderstapeln von Layouts in einer bestimmten Reihenfolge, sondern durch das schrittweise Übereinanderlegen von Layouts, können sich GUI-Elemente, die sich in darunterliegenden Layouts befinden ebenfalls schrittweise verändern, bis sie mit dem letzten Layout schließlich ihre finale Gestalt erhalten, die dann angezeigt wird (vgl. Abb. 5.7). Dabei sollten Sie beachten, dass nicht notwendigerweise jedes Layout Änderungen an GUI-Elementen vornehmen muss. Desweiteren kann ein Layout keine GUI-Elemente aus Layouts verändern, die parallel aktiven Zuständen gehören. Das bedeutet, dass nicht unbedingt alle Layouts, die sich in der finalen Komposition hinter einem Layout befinden, durch dieses verändert werden können. Ausschließlich Layouts, die aus Vaterzuständen des betroffenen Zustands stammen, lassen sich modifizieren.
Mit dem Hintergrund eines Layouts (Background) bezeichnet man die Komposition der Layouts, die aus den zugehörigen Vaterzuständen stammen. GUI-Elemente, die sich in diesen Layouts befinden, bezeichnet man als geerbte GUI-Elemente.
Eine Sache, die noch etwas genauerer Betrachtung verdient, ist die Modifizierung von GUI-Elementen und in welchem Umfang diese vorgenommen werden kann. Dafür ist es hilfreich, nochmal eine etwas andere Sicht auf den bereits beschriebenen Kompositionsvorgang zu gewinnen. Diese operationale Sicht vermittelt dazu noch einen etwas besseren Einblick in die Umsetzung der Komposition.
Sie können sich ein Layout-Diagramm auch als eine Liste von Änderungen vorstellen, wobei die Erzeugung eines GUI-Elements eine ganz spezielle Änderung ist. Die anderen Änderungen beziehen sich auf geerbte GUI-Elemente bzw. deren Eigenschaften. Denn jede Eigenschaft eines geerbten GUI-Elements lässt sich verändern. Unter den Eigenschaften eines Rechtecks befinden sich zum Beispiel dessen Füll- oder Randfarbe. Auch die Position und Größe eines GUI-Elements zählen zu dessen Eigenschaften und lassen sich somit manipulieren.
Die Komposition mehrerer Layouts kann man nun auch als schrittweises Anwenden der Änderungen sehen. Dabei wird zuerst, wie bereits beschrieben, eine Reihenfolge der Layouts bestimmt, und dann werden in dieser Reihenfolge alle Änderungen angewendet. Man beginnt also sozusagen mit einer leeren Ansicht und wendet dann die Änderungen des ersten Layouts an. Diese können, da es sich um das erste Layout handelt, ausschließlich aus Erzeugungen von GUI-Elementen bestehen. Bei den darauf folgenden Layouts können dann auch Änderungen dabei sein, die sich auf GUI-Elemente beziehen, die durch ein vorheriges Layout erzeugt wurden und somit Änderungen geerbter GUI-Elemente darstellen.
Die Tatsache, dass Zustände parallel aktiv sein können, kann dabei allerdings zu Konflikten führen. Wenn zum Beispiel zwei Zustände, die sich in unterschiedlichen Compartments ein und desselben Zustands befinden, Änderungen an dem selben Attribut eines im Vaterzustand definierten GUI-Elements vornehmen, so ist die Reihenfolge dieser Änderungen nicht definiert, da die Reihenfolge der zugehörigen Layouts nicht definiert ist. Dies sollten Sie unbedingt vermeiden, da in diesem Falle nicht eindeutig definiert ist, welche Modifikation Anwendung findet.
D. Hannwacker - A. Gebel - M. Dürksen 