Sonntag, 6. Juni 2010

The 3rd dimension

Heute hab ich endlich mal wieder etwas gemacht, dessen Auswirkungen in der echten Welt nicht von der Hand zu weisen sind: Ich habe die Kette meines Fahrrads repariert. Die alte war gerissen und so habe ich mir eine neue gekauft und ein Werkzeug, mit dem ich sie zusammenbauen konnte. Ich muss sagen, da bin ich ziemlich stolz drauf, da ich das vorher noch nie gemacht habe.

In der unsichtbaren Welt der Software kann man vereinzelt auch Bereiche finden, die eine gewisse "Auswirkung" haben. Zum einen ist da z.B. Automatisierungssoftware zu nennen, die durch die Art und den Ort ihres Einsatzes einen recht direkten Einfluss auf die echte Welt hat. Eine andere Art von Programmen sind meiner Meinung nach Applikationen, die 3D Darstellungen verwenden, um die Anwendungsdomänen, in denen sie eingestzt werden, darzustellen. Hier gibt es natürlich keine "echte" Auswirkung. Die 3-dimensionale Darstellung wird nur genutzt, um dem Mensch das Verständnis zu vereinfachen. Das funktioniert, da er sich in einer 3-dimensionalen Welt zurechtfinden muss und weil deshalb seine Sinne auf eine solche Umgebung angepasst und spezialisiert sind.

Ich habe mal gehört oder gelesen, dass abstrakte Sachverhalte zumeist auf das Ziehen von Schlüssen (die Fähigkeit zur Orientierung) im 3-dimensionalen Raum zurück geführt werden. Ich weiss nicht, ob das stimmt, aber es klingt plausibel. In irgendeiner Form muss abstraktes Denken etwas mit der sinnlichen Wahrnehmung zu tun haben. Dahingestellt....

Ich habe bisher schon einige Programme gesehen, die sich des Mittels der 3D-Darstellung bedienen. Und meiner Meinung nach kann für all diese Programme ein gemeinsames Modell gefunden werden, das für eine Implementierung herangezogen werden kann. Ein Wort noch zu den Annahmen, die ich treffe. Da wir uns derzeit in einer Zeit befinden, in der die Metapher des "Fensters" für ein Programm vorherrscht, gehe ich davon aus, das eines oder mehrere davon vorhanden sind, um das Programm zu präsentieren.

Nachfolgend ist die Struktur dargestellt, die ich einem jeden 3D-Programm, Spiel, Konstruktionsprogramm, wissenschaftlichem Visualisierungstool, zugrunde legen würde.


Zu den einzelnen Bausteinen (Kästchen):
  • Den Kern bilden immer die Bausteine, welche die "Domain Logic" beinhalten. Dieser Teil des Programmes kodiert die Logik, die im Rahmen der Anwendungsdomäne durch den Einsatz des Programmes austomatisiert oder zugänglich gemacht werden soll. Der "Domain Logic" liegt ein Modell zugrunde, das es erlaubt die Logik auszuführen. Dieses Modell könnte ein Modell eines Teils der Realität sein.
  • Der Zugang zur "Domain Logic" wird durch die "Domain UI" hergestellt. Hierbei handelt es sich um diejenigen "Fenster" oder "UI Elemente", die es erlauben, mit der "Domain Logic" zu interagieren.
  • Die Logik für die 3D-Darstellung der Konzepte der Anwendungsdomäne wird im Baustein "Visualization" gekapselt. Hierbei handelt es sich hauptsächlich um die Verwaltung eines Modells, das für die 3D-Darstellung der Konzepte und für die 3D-Interaktion optimiert ist. Ein wichtiger Aspekt hier ist auch der, dass durch eine Interaktion mit dem 3D-Modell wieder auf Objekte im "Domain Model" (also dem der "Domain Logic" zugrundeliegenden Modell) geschlossen werden kann.
  • Die eigentliche Darstellung wird vom Baustein "Visualization UI" übernommen. Hier passiert die 3D-Interaktion mit dem 3D-Modell. Die Eingaben werden an den Baustein "Visualization" weitergeleitet, sodass dort entsprechende Berechnungen erfolgen können. Bei der Interaktion kann es sich z.B. um Navigation oder Selektion handeln. Dieser könnte dann der Aufruf einer Funktion in der "Domain Logic" folgen.
  • "Visualization UI" und "Domain UI" sind eingebettet mit Hilfe einer eher technisch motivierten Komponente - dem "Main UI Frame". Dieser Baustein hält die beiden anderen zusammen.
Nachdem die Bedeutung der Kästchen erklärt ist, sollen nun noch ein paar Worte zu den Pfeilen folgen. Ich unterscheide prinzipiell zwischen Schnittstellen ("Interfaces") und Rollen ("Roles"). Schnittstellen erlauben den Aufruf von Funktionen der einzelnen Bausteine. Hier meine ich jedoch nicht einfache Zugriffsfunktionen, sondern solche, die komplexere Vorgänge auslösen. Mit Rollen meine ich Ergebnisse, Werte, die von einer Komponente zur Verfügung gestellt werden. Ich sage hier mit Absicht nicht Variablen oder Properties, da diese bereits mit implementierungstechnischen Bedeutungen belegt sind.

Die Richtung der Pfleile gibt an, von welchem Baustein für welchen anderen Baustein Schnittstellen oder Rollen angeboten werden. Der Baustein, von dem der Pfeil ausgeht, bietet an. Und der Baustein, auf den der Pfeil zeigt, konsumiert. Weiter müchte ich an dieser Stelle nicht ins Detail gehen, da dies Überlegungen voraussetzen, dass man sich über einen konkreten Anwendungsfall Gedanken macht. Vielleicht schreib ich ja mal irgendwann noch nen Text, in dem ich das tue....

Keine Kommentare: