28.06.2013 Aufrufe

Visuelle Spezifikation, Modellierung und Animation im Systementwurf

Visuelle Spezifikation, Modellierung und Animation im Systementwurf

Visuelle Spezifikation, Modellierung und Animation im Systementwurf

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>Visuelle</strong> <strong>Spezifikation</strong>, <strong>Modellierung</strong> <strong>und</strong><br />

<strong>An<strong>im</strong>ation</strong> <strong>im</strong> <strong>Systementwurf</strong><br />

Christian Geiger, Wolfgang Müller<br />

C-LAB<br />

Fürstenallee 11<br />

33098 Paderborn<br />

chris@c-lab.de,wolfgang@c-lab.de<br />

Zusammenfassung<br />

Wir betrachten Ansätze visueller Notationen <strong>im</strong> <strong>Systementwurf</strong>. Neben einer kurzen<br />

Vorstellung einiger UML-Sprachen zur Verhaltensbeschreibung betrachten wir insbesondere<br />

die Verwendung visueller Programmiersprachen <strong>im</strong> <strong>Systementwurf</strong>. Hierbei<br />

fokussieren wir auf die ursprünglich am Xerox PARC entwickelte vollständig visuelle<br />

Programmiersprache Pictorial Janus, die an unserem Institut weiterentwickelt wird.<br />

Durch die inhärente <strong>An<strong>im</strong>ation</strong> der Ausführung des visuellen Programmes <strong>und</strong> die<br />

Möglichkeit, die Formgebung der visuellen Objekte unabhängig von ihrer Semantik zu<br />

wählen, stehen mächtige Mittel zur endbenutzerorientierten <strong>Spezifikation</strong> <strong>und</strong> Illustration<br />

von Systemprototypen zur Verfügung. Der letzte Teil dieses Beitrags beschreibt die<br />

zusätzliche endbenutzerorientierte 3D-Visualisierung <strong>und</strong> den Ansatz einer vollständig<br />

dreid<strong>im</strong>ensionalen visuellen Programmiersprache.<br />

1 Einleitung<br />

In jüngster Zeit werden <strong>im</strong>mer mehr Sprachen, Methoden <strong>und</strong> Werkzeuge mit dem Attribut<br />

visuell versehen. Betrachtet man die einzelnen Ansätze näher, so stellt man fest, daß sich<br />

von dieser Bezeichnung nicht <strong>im</strong>mer genau auf den Inhalt schließen läßt. So stellt Visual<br />

Basic überwiegend eine Sprache zur Implementierung von graphischen Benutzungsoberflächen<br />

dar. Während Visual C++ eine fensterbasierte Benutzungsoberfläche mit Visualisierungskomponenten<br />

zur Entwicklung von C++-Programmen bezeichnet, realisiert VisualAge<br />

<strong>im</strong> Prinzip eine Kombination beider Funktionalitäten. Das eigentliche Programm wird<br />

in diesen Entwicklungsumgebungen meist als Text eingegeben <strong>und</strong> manipuliert. Anders<br />

verhält es sich bei visuellen Programmiersprachen. Hier bilden graphische Konstrukte (Token)<br />

Bestandteile zur Eingabe bzw. Manipulation eines Programms. <strong>Visuelle</strong> <strong>Modellierung</strong><br />

<strong>im</strong> Kontext des <strong>Systementwurf</strong>es bezeichnet i.W. die Verwendung graphischer Diagramme<br />

in der <strong>Spezifikation</strong>sphase. <strong>Visuelle</strong> Darstellungen umfassen dabei alle Arten zwei- <strong>und</strong><br />

dreid<strong>im</strong>ensionaler Darstellungen, was die Verwendung von Text nicht ausschließt.<br />

Betrachtet man den heutigen Entwurf komplexer Systeme so fällt auf, daß eine Vielzahl von<br />

domänen- <strong>und</strong> anwendungsspezifischen graphischen Notationen Anwendung findet. Im objektorientierten<br />

Softwareentwurf kam es zur Entwicklung von unzähligen Darstellungsformen.<br />

Die populärsten Vertreter sind hier sicherlich Booch, Coad, Jacobson, Martin/Odell,<br />

Shlaer/Mellor <strong>und</strong> Rumbaugh. Die Situation änderte sich jedoch vor kurzem gr<strong>und</strong>legend,


da sich drei der führenden Experten auf diesem Gebiet (Booch, Jacobson <strong>und</strong> Rumbaugh)<br />

auf die Zusammenlegung ihrer Sprachen zu einer gemeinsamen Notation einigten <strong>und</strong> diese<br />

Unified Modeling Language (UML) nannten [Fow97].<br />

Im Hardwareentwurf finden vorwiegend tabellen- <strong>und</strong> diagrammorientierte Notationen Anwendung.<br />

Hier läßt sich z.Zt. kein Standardisierungsstreben für graphische Notationen ausmachen.<br />

Es ist zu erwarten, daß auch hier die UML-Standardisierung starken Einfluß nehmen<br />

wird.<br />

Betrachtet man die verschiedenen Beschreibungsformen so stellt man fest, daß sie meist<br />

die allerersten Phasen des <strong>Systementwurf</strong>s, die funktionale <strong>Spezifikation</strong> <strong>und</strong> vorherige<br />

Aktionen, nicht opt<strong>im</strong>al unterstützen. Des weiteren fördern diese Darstellungen nicht unbedingt<br />

die Rückkopplung zum Endbenutzer bzw. K<strong>und</strong>en, da dieser Personenkreis selten<br />

dazu neigt, Funktionalität aus abstrakten Diagrammen ablesen zu können. Da intensive<br />

Rückkopplungen zum K<strong>und</strong>en zur frühen Behebung von Entwurfsfehlen absolut notwendig<br />

sind, werden Pflichtenhefte in wesentlichen Teilen durch textuelle Ausführungen beschrieben<br />

<strong>und</strong> oft versucht, mittels Prototypen graphischer Benutzungsoberflächen, K<strong>und</strong>en die<br />

Funktionalität eines Programmen näher zu bringen.<br />

Wir streben in unseren Arbeiten eine frühzeitige Rückkopplung des Entwicklers mit dem<br />

Benutzer durch an<strong>im</strong>ierte Endbenutzerrepräsentationen an. Durch eine Verschmelzung der<br />

<strong>Spezifikation</strong>ssprache mit der <strong>An<strong>im</strong>ation</strong>sdarstellung erreichen wir eine Reduzierung der<br />

zeitintensiven <strong>und</strong> fehlerträchtigen Transformationen zwischen Programm <strong>und</strong> Endbenutzerrepräsentation.<br />

Wir verwenden hierbei die am Xerox PARC entwickelte vollständig visuelle<br />

Programmiersprache Pictorial Janus als Basis <strong>und</strong> fokussieren die Anwendung auf<br />

die frühen Phasen des <strong>Systementwurf</strong>s.<br />

Der nachfolgende Beitrag ist wie folgt gegliedert. Wir gehen zunächst kurz auf visuelle<br />

Sprachen <strong>im</strong> <strong>Systementwurf</strong> ein <strong>und</strong> stellen dort unterschiedliche Vertreter dieser Klasse<br />

vor. Danach skizzieren wir den Idealfall des k<strong>und</strong>enorientierten <strong>Systementwurf</strong>s <strong>und</strong> diskutieren<br />

die Vorteile eines von Pictorial Janus ausgehenden Entwurfs bevor wir eine Strategie<br />

zur Umsetzung von PJ-<strong>Spezifikation</strong>en in <strong>im</strong>perative Programme vorstellen. Obwohl<br />

hier die Integration einer k<strong>und</strong>enorientierten 3D-<strong>An<strong>im</strong>ation</strong> durch Verwendung einer dedizierten<br />

<strong>An<strong>im</strong>ation</strong>sbibliothek vereinfacht wird, stellt deren Realisierung auch hier einen<br />

noch <strong>im</strong>mer nicht zu unterschätzenden Aufwand dar. Abschließend skizzieren wir kurz<br />

den hieraus entstandenen Ansatz einer dreid<strong>im</strong>ensionalen visuellen Programmiersprache<br />

mit inhärenter <strong>An<strong>im</strong>ation</strong>: SAM (Solid Agents in Motion) .<br />

2 <strong>Visuelle</strong> Sprachen <strong>im</strong> <strong>Systementwurf</strong><br />

Lange Zeit reduzierte man die Vorteile visueller Sprachen auf den Satz “Ein Bild sagt mehr<br />

als 1000 Worte”. Neuere Arbeiten nehmen hier einen realistischeren Standpunkt ein, da<br />

diese Aussage für den individuellen Betrachter meist nicht die gleichen “1000 Worte” sind<br />

[Pet95]. Im allgemeinen kann man feststellen, daß in den meisten Fällen präzise Erläuterungen<br />

durch Text eindeutiger repräsentiert werden, während sich visuelle Mittel besser zur<br />

Strukturierung <strong>und</strong> Darstellung komplexere Zusammenhänge nutzen lassen [Mue96]. <strong>Visuelle</strong><br />

Sprachen eignen sich besonders gut für den Entwurf komplexer paralleler Systeme,<br />

bei denen nebenläufig arbeitende Einheiten miteinander kommunizieren, was der mehrd<strong>im</strong>ensionalen<br />

Darstellung entgegen kommt.


<strong>Visuelle</strong> Darstellungen werden <strong>im</strong> <strong>Systementwurf</strong> zur Dokumentation, <strong>Spezifikation</strong>/Programmierung<br />

<strong>und</strong> Analyse eingesetzt. In der <strong>Spezifikation</strong> finden visuelle Mittel<br />

meist nur in der ersten Skizzierung ihre Anwendung. Die erste funktionale <strong>Spezifikation</strong><br />

(bzw. Pflichten- oder Lastenheft) ist heutzutage i. W. textorientiert. Graphiken werden<br />

hier oft nur zur näheren Erläuterung des Textes eingesetzt. In den weiteren Entwurfsphasen<br />

dienen graphische Darstellungen insbesondere zur Strukturierung des hierarchischen Entwurfs<br />

in Form von Struktur- oder Blockdiagramme sowie zur Datenspezifikation <strong>und</strong> für<br />

Verhaltensbeschreibungen. <strong>Visuelle</strong> Notationen <strong>im</strong> <strong>Systementwurf</strong> sind meist Mischformen<br />

aus diagramm-, icon- <strong>und</strong> tabellenorientierter Darstellung [Shu88] wobei die diagrammbasierten<br />

Elemente oft überwiegen.<br />

Ein Diagramm wird allgemeinen durch einen (un)gerichteten Graphen dargestellt. Knoten<br />

<strong>und</strong> Kanten werden mehr oder weniger ausführlichere Beschriftungen bzw. Programmfragmente<br />

hinzugefügt. Fortgeschrittene Darstellungsformen basieren auf Hypergraphen<br />

oder Harels Higraphs (Hierarchical Graphs)[Har88], die auf dem Prinzip von<br />

Venn-Diagrammen 1 beruhen. In Higraphs können Knoten zu Superknoten zusammengefaßt<br />

werden, was graphisch durch das Enthaltensein der Knoten <strong>im</strong> Superknoten dargestellt<br />

wird. Wird eine Kante vom/zum Superknoten gezogen so verbindet diese Kante alle <strong>im</strong> Superknoten<br />

enthaltene Knoten. Diese Art der Darstellung erlaubt strukturiertere <strong>und</strong> manchmal<br />

sehr effiziente Darstellungen wie die 2 Variationen der 3-Clique in Abb. 1 zeigen.<br />

Eine der berühmtesten Anwendung von Higraphs sind Statecharts, die besonders bei der<br />

<strong>Spezifikation</strong> <strong>und</strong> <strong>Modellierung</strong> paralleler Systeme <strong>und</strong> <strong>im</strong> Hardwareentwurf Anwendung<br />

finden.<br />

A<br />

B C<br />

A B C<br />

Abbildung 1: 2 verschiedene Darstellungen einer 3-Clique<br />

Im folgenden stellen wir einige der heutzutage populärsten Diagrammdarstellungen zur<br />

Verhaltensbeschreibung vor. Da alle in der UML (Unified Modeling Language) enthalten<br />

sind, verwenden wir zur Darstellung die UML-Notationen <strong>und</strong> Bezeichnungen. Anschließend<br />

gehen wir auf die weniger verbreitete visuelle Programmiersprache Pictorial Janus<br />

ein.<br />

2.1 Unified Modelling Language<br />

Die Unified Modeling Language (UML) Version 1.1 ist die Vereinigung verschiedener diagrammorientierter<br />

Darstellungen, die <strong>im</strong> Zuge von der populärsten objektorientierten Entwurfsmethoden<br />

entwickelt wurden [Fow97]. UML wurde vor kurzem von der Object Management<br />

Group (OMG) adaptiert <strong>und</strong> hat große Chancen, sich zu einem weit akzeptierten<br />

Standard <strong>im</strong> Hard- <strong>und</strong> Softwarebereich zu entwickeln.<br />

1 Venn-Diagramme sind aus der Mengenlehre bekannt. Sie wurden 1790 von Venn eingeführt <strong>und</strong> gehen auf<br />

die von Euler verwendeten Euler-Kreise zurück.


UML definiert Entwicklungs-, Fallstudien-, Paket-, Klassen-, Aktivitäts-, Sequenz-,<br />

Kollaborations- <strong>und</strong> Zustandsdiagramme. Wir werden uns <strong>im</strong> folgenden auf die kurze Skizzierung<br />

der letzten vier zur Verhaltensbeschreibung eingesetzten Formen beschränken.<br />

Aktion1<br />

Aktion2<br />

[Bedingung2]<br />

[Bedingung1]<br />

Aktion3<br />

Objekt1:Klasse1<br />

neu()<br />

aktiviere<br />

return<br />

Objekt2:Klasse2<br />

kill<br />

OK<br />

Objekt3:Klasse3<br />

check<br />

g<br />

C<br />

h<br />

i<br />

E<br />

A B<br />

f<br />

D<br />

Abbildung 2: UML Aktivitäts- , Sequenz- <strong>und</strong> Zustandsdiagramme<br />

Aktivitätsdiagramme sind die UML-Variante von klassischen Kontrollflußdiagrammen. Sie<br />

beschreiben die <strong>im</strong>perative Sichtweise eines Algorithmus. Knoten stellen Variablenzuweisungen,<br />

Prozeduraufrufe oder allgemeine Aktionen dar. Meist wird das Aufspannen <strong>und</strong><br />

Zusammenführen von parallelen Kontrollflüssen (Fork/Join) unterstützt. Abb. 2 zeigt ein<br />

Aktivitätsdiagramm. Start <strong>und</strong> Ende werden durch einen schwarzen Punkt mit <strong>und</strong> ohne<br />

Kreis gebildet. Fallunterscheidungen werden durch mehrere ausgehende Kanten dargestellt,<br />

die mit den entsprechenden Bedingungen für die Alternativen markiert sind.<br />

Sequenzdiagramme stellen den zeitlichen Ablauf zwischen kommunizierenden parallelen<br />

Objekten dar. Der Berechnungsablauf jedes Objektes wird durch eine von oben nach unten<br />

führende Zeitlinie skizziert. Ein Pfeil ausgehend von der Zeitlinie eines Objektes bezeichnet<br />

den Aufruf einer Methode eines anderen Objektes oder das Senden einer Nachricht<br />

zu diesem Objekt. Abb. 2 zeigt ein einfaches UML-Sequenzdiagramm mit 3 Objekten.<br />

Ausgefüllte Pfeile bezeichnen Methodenaufrufe während asynchrone Nachrichten durch<br />

halbierte Pfeile <strong>und</strong> Terminierung durch X dargestellt werden.<br />

Kollaborationsdiagramme sind i.W. eine Mischform aus Sequenz- <strong>und</strong> Aktivitätsdiagrammen<br />

<strong>und</strong> sollen aus diesem Gr<strong>und</strong> nicht näher vorgestellt werden.<br />

Letztendlich sei hier noch auf die heutzutage sehr populären Zustandsdiagramme eingegangen.<br />

Zustandsdiagramme sind gerichtete (manchmal hierarchische) Graphen. Die Knoten<br />

definieren Zustände <strong>und</strong> Kanten Zustandsübergänge. Die Kanten werden normalerweise<br />

mit einem Ausdruck der Form ”E(B)/A” beschriftet. Dies beschreibt, daß der Übergang<br />

ausgeführt wird, falls ein Ereignis E eintritt <strong>und</strong> die Bedingung B erfüllt ist. Be<strong>im</strong> Übergang<br />

wird dann die spezifizierte Aktion A ausgeführt. Dieses Verhalten ist unter dem Namen<br />

Mealy-Automat bekannt. Werden Aktionen Zuständen zugeordnet so bezeichnet man<br />

das Model als Moore-Automat. UML unterstützt beide Varianten in Verbindung mit hierarchischen<br />

statechart-basierten Zustandsdiagrammen. Statecharts erweitern die klassischen<br />

Zustandsdiagrammen um Hierarchie (Higraphs), Nebenläufigkeit <strong>und</strong> einen Broadcast-<br />

Mechanismus. Abb. 2 zeigt ein sehr einfaches UML Zustandsdiagramm. Der Einfachheit<br />

halber enthalten hier die Kantenbeschriftungen nur Ereignisse. Das Bild zeigt eine hierarchischen<br />

Zustand E mit zwei parallelen Automaten jeweils mit den Zuständen (A,B) <strong>und</strong><br />

(D). Die durch schwarze Punkte gekennzeichneten Initialzustände B <strong>und</strong> D werden bei i<br />

eingenommen. g bezeichnet den Übergang von allen in E enthalten Unterzuständen zu C.


2.2 Pictorial Janus<br />

Pictorial Janus (PJ) wurde 1989 von Kahn <strong>und</strong> Saraswat am Xerox PARC [KS90] <strong>im</strong><br />

Kontext von Studien zur Handskizzenerkennung als vollständig visuelle Programmiersprache<br />

entwickelt. PJ ist eine deklarative, parallele, regelbasierte, diagrammorientierte 2D-<br />

Programmiersprache. Zeichnungen, die wohldefinierten topologisch- syntaktischen Regeln<br />

entsprechen stellen korrekte PJ-Programme dar. Ein PJ-Programm besteht aus einem Netzwerk<br />

kommunizierender Agenten, die auf dem Gr<strong>und</strong>prinzip des Pattern Matching durch<br />

Regelauswahl Berechnungen ausführen. Die geschlossene Kontur ist das Gr<strong>und</strong>pr<strong>im</strong>itiv<br />

von PJ. PJ-Basisobjekte sind aus geschlossenen Konturen zusammengesetzt. Abb. 3(a) gibt<br />

eine Überblick über die Menge der Basisobjekte.<br />

7<br />

Konstante<br />

+<br />

Funktion<br />

Listenelement<br />

><br />

Relation<br />

1<br />

0 0<br />

0<br />

1<br />

Link Kanal<br />

0<br />

Agent Regel<br />

1<br />

Abbildung 3: (a) PJ Basisobjekte (b) Verschiedene Repräsentationen<br />

PJ ist topologisch vollständig. Dies bedeutet, daß ein PJ-Programm bei Verzerrung <strong>und</strong><br />

Rotation der Einzelobjekte seine Bedeutung beibehält, d.h. man kann Konturen beliebig<br />

verformen, ohne daß sich das Programm verändert. Dies hat den Vorteil, daß man den<br />

Basisobjekten die Form ihrer Verwendung geben kann. Diese Eigenschaft kann ideal zur<br />

Illustration eines Programms eingesetzt werden. Abb. 3 (b) zeigt vier verschiedene Darstellungen<br />

eines Listenobjekts. Im folgenden stellen wir die einzelnen PJ-Objekte kurz vor.<br />

Ein Port ist eine geschlossene Kontur ohne Inhalt Externe/Interne Ports berühren andere<br />

Konturen von Außen bzw. Innen. Ein interner Port dient als Verknüpfungspunkt (Repräsentant)<br />

für die Kontur, in der er enthalten ist. Eine leere Liste besteht aus einer Kontur<br />

mit einem internen Port. Kopf bzw. Listenobjekt einer nicht-leeren Liste besitzen externe<br />

Ports, mit denen weitere Listenobjekte oder Konstanten verb<strong>und</strong>en sind. Eine Konstante<br />

entspricht in der Darstellung einem Listenobjekt, dessen Kontur eine Zeichenkette oder eine<br />

Zahl umschließt. Das Kombinieren von Listenobjekten erfolgt durch Links. Ein Link<br />

wird durch eine ungerichtete Linie dargestellt <strong>und</strong> verbindet i.d.R. interne mit externen<br />

Ports. Funktionen sind geschlossene Konturen mit einem Bezeichner <strong>und</strong> einem internen<br />

<strong>und</strong> n externen Ports. Relationen besitzen zwei externe Ports <strong>und</strong> enthalten ein Relationssymbol.<br />

Ein Agent wird durch eine geschlossene Kontur repräsentiert mit einer beliebige<br />

Anzahl externer Ports <strong>und</strong> keinem internen Port. Kanäle (channels) verbinden zwei externe<br />

Agentenports in der Richtung, in die eine Nachricht gesendet wird. Innerhalb der Agentenkontur<br />

befinden sich Regeln, die das Verhalten des Agenten definieren oder alternativ dazu<br />

ein Aufrufpfeil, der auf einen anderen Agenten zeigt, dessen Regeln be<strong>im</strong> Aufruf instantiiert<br />

werden. Eine Regel entspricht in der Darstellung dem umschließenden Agenten. Alle<br />

Elemente, die mit den externen Ports der Regel verknüpft sind, definieren die Vorbedingungen.<br />

Die Elemente innerhalb definieren das zu erzeugende Verhalten.<br />

Abb. 4 zeigt ein Pictorial Janus Programm mit einem Agenten, der die Funktionalität einer<br />

binären logischen UND-Operation nachbildet. Die vier einzelnen Regeln spezifizieren<br />

1


die funktionalen Abhängigkeiten der vier möglichen Eingangsbelegungen zum Wert am<br />

Ausgang.<br />

1<br />

0<br />

0<br />

0<br />

0<br />

0<br />

&<br />

Abbildung 4: Logisches UND<br />

Das Programm wird in PJ nicht nur als statische Zeichnung beschrieben. Die Ausführung<br />

eines Programms ist als <strong>An<strong>im</strong>ation</strong> definiert. PJ ist eine der sehr wenigen visuellen<br />

Sprachen in der die genaue Ursache <strong>und</strong> Wirkung jedes Einzelschritts der Berechnung<br />

vollständig durch eine kontinuierliche <strong>An<strong>im</strong>ation</strong> visualisiert wird <strong>und</strong> die Darstellung zu<br />

jedem Zeitpunkt ein gültiges Programm ist. Das Berechnungsmodell basiert auf dem Pattern<br />

Matching Prinzip. Im einzelnen heißt das in Verbindung mit der <strong>An<strong>im</strong>ation</strong>, daß<br />

1. die Regeln mit den aktuellen Daten am Eingang verglichen werden <strong>und</strong> ggf. eine<br />

Regel, deren Bedingung erfüllt ist, selektiert wird,<br />

2. die selektierte Regel inklusive der Inhalte auf die Größe des Agenten skaliert solange<br />

vergrößert wird bis die Vorbedingung die aktuellen Daten überdeckt,<br />

3. Regel <strong>und</strong> überdeckte Daten sich in Luft auflösen <strong>und</strong> die in der Regel definierten<br />

Aktionen übrig bleiben <strong>und</strong> schließlich<br />

4. die so neu erzeugten Objekte auf ihre Normalgröße vergrößert werden.<br />

Abb. 5 zeigt die <strong>An<strong>im</strong>ation</strong> des PJ Programms von Abb. 4.<br />

3 K<strong>und</strong>enorientierter <strong>Systementwurf</strong><br />

Die Einzelaktivitäten <strong>im</strong> <strong>Systementwurf</strong> werden grob in <strong>Spezifikation</strong>, Implementierung<br />

<strong>und</strong> Analyse unterteilt. Je nach Eigenschaften des zu <strong>im</strong>plementierenden Systems lassen<br />

sich diesen Aktivitäten verschiedene Unteraktivitäten zuordnen wie z.B. Partitionierung in<br />

Hardware- <strong>und</strong> Softwarekomponenten. Die frühen Phasen des <strong>Systementwurf</strong>s sind durch<br />

die Anforderungsanalyse <strong>und</strong> -spezifikation best<strong>im</strong>mt. Hier bedarf es eines intensiven Informationsaustauschs<br />

des K<strong>und</strong>en mit dem/den Systementwickler/n, um zunächst einmal<br />

0<br />

1<br />

1<br />

1<br />

0<br />

1


1<br />

4<br />

1<br />

1<br />

1<br />

1<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

1<br />

0<br />

1<br />

0<br />

0<br />

0<br />

0<br />

0 0<br />

0<br />

0<br />

0<br />

&<br />

0<br />

1<br />

1<br />

1<br />

0<br />

&<br />

1<br />

1<br />

1<br />

1<br />

0<br />

1<br />

2<br />

5<br />

1<br />

1<br />

1<br />

1<br />

0<br />

0<br />

0<br />

1<br />

0<br />

0<br />

1<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

1<br />

1<br />

1<br />

0<br />

1<br />

0<br />

1<br />

&<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

0<br />

1<br />

1<br />

0<br />

1<br />

0<br />

0<br />

&<br />

0<br />

1<br />

1<br />

1<br />

&<br />

1<br />

1<br />

0<br />

1<br />

1<br />

1<br />

0<br />

0<br />

1<br />

1<br />

0<br />

1<br />

0<br />

0<br />

0<br />

0<br />

0<br />

1<br />

1<br />

1<br />

0<br />

1<br />

0<br />

1<br />

Abbildung 5: PJ <strong>An<strong>im</strong>ation</strong><br />

&<br />

1<br />

1<br />

0<br />

1<br />

0<br />

1 0<br />

1 0<br />

1<br />

1<br />

0<br />

0<br />

1<br />

0<br />

0<br />

1<br />

0<br />

0<br />

0<br />

0<br />

0<br />

&<br />

0<br />

1<br />

1<br />

1<br />

0<br />

0 0<br />

zu einer Vertragsgr<strong>und</strong>lage zu gelangen, die normalerweise durch die Anforderungsspezifikation<br />

- auch Pflichten- oder Lastenheft genannt - <strong>im</strong>plementiert wird. Ausgehend von der<br />

Anforderungsspezifikation versucht der Entwickler, das geforderte System zu <strong>im</strong>plementieren.<br />

Die Praxis zeigt aber, daß es sinnvoll ist, den Endk<strong>und</strong>en in den weiteren Entwicklungsprozeß<br />

von Zeit zu Zeit mit einzubeziehen, um die Abweichungen des Endproduktes<br />

bzgl. der Vorstellungen des K<strong>und</strong>en zu min<strong>im</strong>ieren. Die Abweichungen können ihre Ursache<br />

in der unterschiedlichen Interpretation von einzelnen Punkten der Anforderungen, in<br />

widersprüchlichen Anforderungen, in technisch nicht zu realisierenden Anforderungen o.ä.<br />

haben. Repenning stellte deshalb in [RS95] den kollaborativen Entwurf, der den K<strong>und</strong>en in<br />

allen Phasen miteinbezieht, vor. Abb. 6 zeigt die leicht modifizierte Form seines iterativen<br />

Model der Interaktion zwischen K<strong>und</strong>e <strong>und</strong> Entwickler.<br />

K<strong>und</strong>e Entwickler<br />

Anforderung<br />

Beobachten<br />

Verhandeln<br />

0<br />

&<br />

3<br />

6<br />

Beobachten<br />

Implementieren<br />

Analysieren<br />

Abbildung 6: Kollaborativer <strong>Systementwurf</strong><br />

Das Model basiert auf dem Prinzip der gegenseitigen Beobachtung. Zunächst versucht der<br />

Entwickler, die Anforderungen des K<strong>und</strong>en zu verstehen. In einer nachfolgenden gemeinsamen<br />

Verhandlung werden diese dann auf die zu realisierenden Anforderungen reduziert,<br />

die anschließend vom Entwickler zu <strong>im</strong>plementieren sind. Im Idealfall beobachtet der Kun-<br />

&<br />

1<br />

1<br />

1<br />

0<br />

1<br />

1<br />

0<br />

0


de die Implementierungs- <strong>und</strong> Analysephase <strong>und</strong> versucht seine Anforderungen zu verfeinern.<br />

Die große Schwierigkeit in der Umsetzung dieses Models besteht allerdings darin,<br />

daß der K<strong>und</strong>e sich mit der Implementierungs- <strong>und</strong> Analysephase auseinandersetzen muß<br />

<strong>und</strong> hier das Problem hat, die Implementierung - respektive das Programm - in seiner Funktionalität<br />

zu verstehen. Der Entwickler ist hier häufig mit dem Problem konfrontiert, dem<br />

K<strong>und</strong>en die Funktionalität des Programms erklären zu müssen. Dies geschieht oft mithilfe<br />

von graphischen Benutzungsoberfächen, die Teilfunktionalität s<strong>im</strong>ulieren. Wenn dies<br />

nicht ausreicht, muß auf die aufwendigere Technik des an<strong>im</strong>ierten Programmcodes zurückgegriffen<br />

werden, wobei Schlüsselereignisse (in der Regel Ausgabeoperationen) <strong>im</strong> Code<br />

<strong>An<strong>im</strong>ation</strong>ssequenzen an der Oberflächen auslösen. Hierbei muß i.W. eine Bibliothek von<br />

<strong>An<strong>im</strong>ation</strong>ssequenzen inklusive der graphischen Objekte entwickelt <strong>und</strong> zum eigentlichen<br />

Programm hinzugeb<strong>und</strong>en werden [Bro88]. Da dieser Ansatz in der Regel zu aufwendig ist<br />

<strong>und</strong> es oft das Erlernen einer zusätzlichen Sprache bedarf, wird häufig hier auf die Rückkopplung<br />

mit dem Benutzer verzichtet.<br />

Unser Ansatz basiert auf der Verwendung einer visuellen Programmiersprache zur Unterstützung<br />

des kollaborativen Entwurfs in den frühen Entwicklungsphasen. Wir verwenden<br />

hier als erste Basis PJ, da bei diesem Ansatz die Programmiersprache, Sprache zur Darstellung<br />

der endbenutzerorientierten Sicht des Programms <strong>und</strong> Sprache zur Definition der<br />

funktionalen <strong>An<strong>im</strong>ation</strong> in einer Sprache vereint sind. So muß der Entwickler nicht häufige<br />

(fehlerbehaftete) Übersetzungen zwischen mehreren Programmiersprachen durchführen.<br />

Das folgenden Kapitel geht genauer darauf ein, wie PJ in die ersten Phases des heute noch<br />

vorwiegend textbasierten Entwicklungsprozeß integriert werden kann.<br />

4 Integrativer <strong>Visuelle</strong>r/Textueller Entwurf<br />

Programmiertechnisch gesehen muß <strong>im</strong> <strong>Systementwurf</strong> eine grobe Anforderungsspezifikation,<br />

die vorwiegend beschreibt, was gemacht werden soll, schrittweise in eine Implementierung<br />

in eine Programmiersprache überführt, die ausführt, wie etwas realisiert ist.<br />

Letzteres ist typischerweise eine Implementierung in einer <strong>im</strong>perativen Programmiersprache<br />

wie C/C++ oder Java. Wir beschränken uns bei der Anforderungsspezifikation auf die<br />

<strong>Spezifikation</strong> der reinen Funktionalität eines zu entwickelnden Systems.<br />

Pictorial Janus 2D<br />

Pictorial Janus 2D + 3D<br />

Entwurf Illustration<br />

Text/Pictorial Janus 2D + 3D<br />

Text 3D<br />

Abbildung 7: Von der visuellen <strong>Spezifikation</strong> zur an<strong>im</strong>ierten textuellen Implementierung<br />

Als Beispiel verwenden wir ein System aus dem Bereich rechnerintegrierter Produktion:<br />

ein Farbsortierspeicher zur Lackierung von Autokarossen (siehe Abb. 8). Zur Vermeidung<br />

ständiger Farbwechsel an der Lackierlinie einer Lackierstraße werden die Rohkarossen in


Warteschlangen vorsortiert, um Blöcke gleicher Farbe zu bilden. Da der Farbsortiervorgang<br />

<strong>im</strong> Kontext des Gesamtsystems erfolgt, also auch die Termintreue der Aufträge ein<br />

Opt<strong>im</strong>ierungskriterium darstellt, kann die den Sortiervorgang steuernde Ein- bzw. Auslagerung<br />

der Karossen nicht eine vollständige Vorsortierung der Karosse in Blöcke max<strong>im</strong>aler<br />

Größe als Opt<strong>im</strong>ierungsziel Steuerstrategie besitzen. Theoretisch betrachtet fällt die Ein<strong>und</strong><br />

Auslagerung in die Klasse der NP-vollständigen Probleme. In der Praxis wird die Ein<strong>und</strong><br />

Auslagerung mit sehr einfachen Heuristiken, meist unter Verwendung von Prioritätsregeln,<br />

gelöst. Eine Beschreibung des Systems <strong>und</strong> einer effizienten Heuristik findet man<br />

in [S. 96]<br />

Abbildung 8: Farbsortierspeicher einer Lackierlinie<br />

Das (ausführbare) PJ Programm bildet den Ausgangspunkt unseres Entwurfsprozesses. Die<br />

in der Anforderungsspezifikation enthaltenen parallelen Systemeinheiten dürften in den<br />

meisten Fällen 1:1 auf ein Netzwerk kommunizierender PJ Agenten übertragen werden<br />

können. Ähnliches gilt für die in den Anforderungen enthaltenen Ein/Ausgabefunktionen.<br />

Jede Funktion wird in eine Regel des entsprechenden Agenten überführt.<br />

Abbildung 9: Funktionale PJ Beschreibung<br />

Eine erste Implementierung einer Lackierlinie in PJ kann <strong>im</strong> Prinzip durch eine direkte Umsetzung<br />

der Skizze von Abb. 8 erfolgen. Die Funktionalität der Ein- <strong>und</strong> Auslagerung inklusive<br />

der zugehörigen Strategien werden zunächst durch ein einfaches Ein/Ausgabeverhalten


nachgebildet. Abb. 9 zeigt eine erste funktionale Beschreibung einer Lackierlinie. Von links<br />

nach rechts sortiert der erste Agent die Rohkarossen nach Farben nach einer äußerst einfachen<br />

Strategie mit zwei Farben, bei der rote Lackieranforderungen in die obere Warteschlange<br />

<strong>und</strong> grüne in die untere Schlange sortiert werden. Die Auslagerung der roten<br />

Karossen erfolgt in Dreierblöcken <strong>und</strong> die der grüneninZweierblöcken.<br />

Der nächste Schritt gilt der Anpassung der individuellen Konturen der PJ-Objekte hinsichtlich<br />

einer endbenutzerverständlichen Darstellung. Dies gilt vorwiegend den Darstellung der<br />

Agenten <strong>und</strong> Datenelementen (Listenobjekten). An dieser Stelle <strong>im</strong> Prozeß kann die erste<br />

ausführbare durch PJ realisierte <strong>Spezifikation</strong> hinsichtlich der Ein/Ausgabefunktionalität<br />

der einzelnen Funktionseinheiten mit dem K<strong>und</strong>en durch <strong>An<strong>im</strong>ation</strong> evaluiert werden. Im<br />

Einzelfall ist es an dieser Stelle sinnvoll, der 2D-<strong>An<strong>im</strong>ation</strong> eine 3D-<strong>An<strong>im</strong>ation</strong> hinzuzufügen.<br />

Hier unterstützt die funktionale Darstellung die Integration einer zusätzlichen<br />

Sichtweise. Nach unseren Erfahrungen ist es sinnvoll, die von den Regeln erzeugten Nachrichten<br />

zur Triggerung der 3D-<strong>An<strong>im</strong>ation</strong> zu verwenden. Dies erlaubt eine halbautomatische<br />

Anbindung der 3D-<strong>An<strong>im</strong>ation</strong>, da hier eine 1:1 Zuordnung zwischen 2D- <strong>und</strong> 3D-<br />

Objekten stattfinden kann [Ch.96].<br />

Abbildung 10: Verschiedene benutzergerechte Repräsentationen<br />

In den nächsten Phasen wird die visuelle PJ Beschreibung schrittweise in eine <strong>im</strong>peratives<br />

textuelles Programm übertragen. Zunächst bedarf es der Identifizierung der Schnittstellen<br />

jedes PJ Agenten. Dies umfaßt i.W. die Festlegung einer genauen Signatur für jeden<br />

Agenten, da PJ als nichttypisierte Sprache in ein typisiertes Programm transformiert<br />

werden muß. Hiernach sind die Regeln der einzelnen PJ-Agenten in Programmsegmente<br />

zu übertragen. Das jeweilige Segment kann jetzt als Template zur weiteren Verfeinerung<br />

der abstrakten Ein/Ausgabefunktion dienen. Das bedeutet, daß <strong>im</strong> weiteren die abstrakte<br />

Ein/Ausgabefunktion durch einen detaillierten Algorithmus ersetzt wird.<br />

Das Beispiel in Abb. 11 zeigt deutlich, daß der Übergang zu einer textuellen algorithmischen<br />

Beschreibung in diesem Anwendungsbereich manchmal sinnvoller ist. Der linke graphische<br />

Agent definiert in diesem Beispiel noch eine wesentlich einfachere Strategie als die


g<br />

r<br />

Storage<br />

0<br />

3<br />

=<br />

1<br />

1<br />

0<br />

+<br />

-<br />

1<br />

0<br />

0<br />

bd<br />

+<br />

1<br />

1<br />

+<br />

1<br />

<br />

0<br />

> 0<br />

< 15<br />

1<br />

-<br />

0<br />

1<br />

bl<br />

color<br />

bodies<br />

blocks<br />

queue<br />

communication<br />

.<br />

.<br />

.<br />

case {Stored} < {AverageFill} andthen {Not {Stored} == {Jobnumber}}<br />

then<br />

{PrintVS "RandController − start up"}<br />

Reply = wait(1)<br />

else<br />

case {FillIn} < {MinFillIn} andthen {Not {Stored} == {Jobnumber}}<br />

then<br />

{PrintVS "RandController − fillIn toosmall"}<br />

Reply = wait(1)<br />

else<br />

<br />

{Elines getEline(ENr Eline)}<br />

{Eline filled(ElineFill)}<br />

case ElineFill<br />

then Reply = wait(1)<br />

else Reply = doDisl(Feeder Eline)<br />

end<br />

end<br />

end<br />

Abbildung 11: Komplexe visuelle <strong>und</strong> textuelle Strategie<br />

die der rechte Agent in textueller Form beschreibt.<br />

Als letzter Schritt werden die Rahmen der einzelnen Regeln inklusive der Vorbedingung in<br />

proprietären Programmcode umgesetzt. Auch hier kann für die wesentlichen Teile eine 1:1<br />

Umsetzung vorgenommen werden. Legt man eine Umsetzung in die Programmiersprache<br />

C/C++ zugr<strong>und</strong>e, so kann ein Regelsatz in eine SWITCH-Anweisung <strong>und</strong> jede Regel in eine<br />

CASE-Anweisung übertragen werden. Schließlich besteht die Möglichkeit, den Bedingungen<br />

zur Regelauswahl noch komplexere Entscheidungskriterien in Form komplexerer<br />

Algorithmen beizufügen. Durch diese Umsetzung bleibt die Struktur des ursprünglichen<br />

Programms weitgehend erhalten. Somit kann eine vorher entwickelte 3D-<strong>An<strong>im</strong>ation</strong> zur<br />

K<strong>und</strong>enpräsentation relativ mühelos in die fertige Implementierung eingeb<strong>und</strong>en werden.<br />

Dies erlaubt es einem K<strong>und</strong>en, die endgültige Implementierung gegen die erste PJ <strong>Spezifikation</strong><br />

bzgl. ihrer Funktionalität zu validieren.<br />

An dieser Stelle ist es wichtig zu erwähnen, daß es sich hier <strong>im</strong> Kern um eine manuelle Umsetzung<br />

handelt, die aber in den meisten Teilen strukturiert <strong>und</strong> damit auch halbautomatisch<br />

vollzogen werden kann.<br />

4.1 Implementierung<br />

Unsere Untersuchungen haben gezeigt, daß das Mittel der <strong>An<strong>im</strong>ation</strong> von Berechnungsschritten<br />

nur sinnvoll <strong>und</strong> effizient in Verbindung mit einer hochgradig interaktiven <strong>An<strong>im</strong>ation</strong>sumgebung<br />

eingesetzt werden kann. Zu diesem Zweck wurde am C-LAB die PJ-<br />

<strong>Spezifikation</strong>s- <strong>und</strong> <strong>An<strong>im</strong>ation</strong>sumgebung JIM (Janus In Motion) entwickelt [M. 96]. Hier<br />

hat sich gezeigt, daß sich <strong>An<strong>im</strong>ation</strong> nur richtig einsetzen läßt, wenn in der <strong>An<strong>im</strong>ation</strong><br />

Funktionalität wie Rückwärtslauf, schneller Vorlauf, Wiederholung in Verbindung mit klassischer<br />

Debbuggingfunktionalität wie Breakpoints, schrittweise Ausführung, interaktive<br />

Programmanipulation usw. gekoppelt ist <strong>und</strong> so in jeder Phase in das (visuelle) Programm<br />

korrigierend eingegriffen werden kann.<br />

Da JIM durch die Beschränkung auf eine 2D visuelle Programmiersprache l<strong>im</strong>itiert war,<br />

koppelten wir JIM für eine intuitivere konkrete Repräsentation mit einer interaktiven<br />

Echtzeit-3D-<strong>An<strong>im</strong>ation</strong>, die auf einer speziell entwickelten Bibliothek für interaktive 3D-<br />

<strong>An<strong>im</strong>ation</strong>en basiert [Gei98]. Dennoch stellt auch hier die Erstellung einer zusätzlichen


3D-<strong>An<strong>im</strong>ation</strong> selbst mit speziellen Werkzeugen <strong>im</strong>mer noch einen <strong>im</strong> Entwurfsprozeß<br />

nicht unerheblichen Aufwand dar.<br />

5 Eine 3D-visuelle Programmiersprache<br />

Unsere jüngsten Ergebnisse zeigen, daß das die Funktionalität eines zu entwerfenden Systems<br />

<strong>und</strong> seine 3D-Illustration nicht unbedingt durch zwei getrennte Mittel beschrieben<br />

<strong>und</strong> somit ständig bei der Implementierung ein Paradigmenwechsel vollzogen werden muß.<br />

Das Ergebnis ist die erste uns bekannte visuelle Programmiersprache, die 3D-Graphik <strong>und</strong><br />

<strong>An<strong>im</strong>ation</strong> als Sprachkonzepte verwendet. Eine 3D-visuelle Programmiersprache verwendet<br />

3D-Graphik <strong>und</strong> <strong>An<strong>im</strong>ation</strong> als Sprachkonstrukte bzw. für die Programmausführung<br />

<strong>und</strong> unterscheidet sich so von Programmiersprachen oder seit langem bekannte (teilweise<br />

visuelle) Notationen zur Erzeugung von 3D-<strong>An<strong>im</strong>ation</strong>en.<br />

5.1 Sprachkonzepte<br />

SAM (Solid Agents in Motion) basiert auf den Gr<strong>und</strong>konzepten des Berechnungsmodels<br />

von Pictorial Janus, das hinsichtlich praktischer Anwendungsbereiche gr<strong>und</strong>legend modifiziert<br />

wurde. Ein SAM-Programm läßt sich als Menge parallel agierender <strong>und</strong> zustandsbehafteter<br />

Objekte (oder Agenten) beschreiben, die durch Nachrichten kommunizieren. Das<br />

Verhalten der SAM-Agenten wird durch einfache Produktionsregeln beschrieben, die lokale<br />

Aktionen ausführen. Eine lokale Aktion ändert die unmittelbare Umgebung des Agenten<br />

<strong>und</strong> hat keinen direkten Einfluß auf andere Agenten (bis auf zwei besondere lokale Aktionen<br />

zum Erzeugen <strong>und</strong> Zerstören von Agenten)<br />

Die Kommunikation in SAM erfolgt (analog zu PJ) über benannte Ports. Jeder Agent besitzt<br />

Ausgangsports, von denen Nachrichten zu anderen Agenten versendet werden <strong>und</strong><br />

Eingangsports, die ankommende Nachrichten speichern. Nachrichten können an einen einzelnen<br />

Agenten, an Agenten mit best<strong>im</strong>mten Ports (groupcast) oder alle Agenten geschickt<br />

werden (broadcast).<br />

Eine SAM-Regel ist eine Produktionsregel <strong>und</strong> besteht aus Vorbedingungen <strong>und</strong> einer Konklusion.<br />

Bedingungen in Regeln bestehen aus Statusabfragen, Typüberprüfungen an Eingangsports<br />

<strong>und</strong> arithmetischen Ausdrücke. Eine Statusbedingung besagt, daß der Agent<br />

sich in einem best<strong>im</strong>mten Zustand befinden muß. Befindet sich der Agent in dem gefordertem<br />

Zustand, so gilt die Bedingung als erfüllt. Wird keine Statusbedingung angegeben, ist<br />

der Zustand des Agenten nicht relevant.<br />

Typ-Bedingungen sind an die jeweils benannten Ports geb<strong>und</strong>en. Sie geben an, welche<br />

Nachrichten sich an diesem Port befinden müssen, damit die Regel ausgeführt werden darf.<br />

Neben vordefinierten Typen (wie String, Int, Koordinate) können auch beliebige Typ verwendet<br />

oder die Typüberprüfung abgeschaltet werden. Sind alle Vorbedingungen einer Regel<br />

erfüllt, werden die Konklusionen ausgewertet. Der Konklusionsteil einer Regel ist eine<br />

Liste von Aktionen, die sequentiell ausgeführt werden. Aktionen können dabei lokale Aktionen<br />

sein oder das Senden von Nachrichten an andere Agenten bzw. an sich selbst. Zur<br />

Zeit sind als lokale Aktionen Statusänderungen, einfache 3D-<strong>An<strong>im</strong>ation</strong>en (Skalierung,<br />

Translation, Farbinterpolation, Translation) <strong>und</strong> das Erzeugen <strong>und</strong> Löschen von Agenten<br />

möglich. SAM wurde jedoch so entwickelt, daß das Hinzufügen neuer Datentypen <strong>und</strong>


Aktionen möglichst einfach erfolgen kann. So sind neue Aktionen wie das Abspielen von<br />

So<strong>und</strong>dateien, MPEG-Filmen oder das Starten externer Prozesse mit geringem Aufwand<br />

realisierbar.<br />

5.2 <strong>Visuelle</strong> Repräsentation<br />

Ein SAM-Agent wird durch eine transparente Kugel dargestellt, deren Farbe den Zustand<br />

des Agenten visualisiert. Die Ports sind kleine Kegel auf der Oberfläche des Agenten, die<br />

zum Kugelmittelpunkt zeigen (bei Eingangsports) bzw. von ihm weg (bei Ausgangsport).<br />

Die Farbe der Ports erlaubt eine Identifizierung z.B. in den Regeln des Agenten. Die Regeln<br />

eines Agenten befinden sich <strong>im</strong> Inneren des Agenten. Die Visualisierung der Agentenregeln<br />

erfolgt nur z.T. analog zu PJ. Eine Regel beschreibt den Agenten <strong>und</strong> die notwendigen<br />

Daten der Vorbedingungen als Nachrichten an den zugehörigen Ports. Vergleichsoperationen<br />

<strong>und</strong> Rechenoperationen werden nicht visuell repräsentiert, sondern interaktiv textuell<br />

dargestellt. Bewegt sich der Mauszeiger über eine Regel, wird der entsprechende Text eingeblendet.<br />

Der Aktionsteil einer Regel wird als Sequenz aufeinander folgender Aktionen<br />

repräsentiert. Die Aktionenliste wird durch eine Kette von Zylindern verschiedener Farben<br />

dargestellt, welche die jeweilige Aktion repräsentieren.<br />

Abbildung 12: Agent, Regel, Aktionsliste <strong>und</strong> Andocken einer Nachricht in SAM<br />

5.3 <strong>Visuelle</strong> Ausführung<br />

Die visuelle Regelausführung besteht aus zwei Abschnitten: dem Regeltest <strong>und</strong> der<br />

Ausführung der Konklusion. Wird eine Regel ausgeführt, vergrößertsiesich(wieinPJ)<br />

bis sie die Größe des Agenten <strong>und</strong> bis sich ihre Prämissen mit den aktuellen Nachrichten<br />

des Agenten überdecken. Anschließend erfolgt eine Abarbeitung der Aktionen. Die Darstellung<br />

dieser sequentiellen Abarbeitung erfolgt durch einen scheibenförmigen Scanner,<br />

der die aktuell bearbeitete Aktion überstreicht. Jede lokale Aktion wird ausgeführt <strong>und</strong><br />

verändert den Agenten ggf. (z.B. bei lokalen <strong>An<strong>im</strong>ation</strong>en). Im Falle einer Sendoperation<br />

werden erst alle zu versendenden Nachrichten bereits am Ausgangsport gesammelt <strong>und</strong> danach<br />

erst versendet. Die jeweiligen Aktionen (Vergrößern der Regel, Scannen der Konklusionen,<br />

Zustandswechsel, Erzeugen <strong>und</strong> Versenden der Nachrichten) erfolgt durch einfache<br />

3D-<strong>An<strong>im</strong>ation</strong>en (entsprechend: Skalierung, Translation, Farbinterpolation). Während der<br />

visuellen Programmausführung läßt sich zwischen der gegeben abstrakten Repräsentation<br />

<strong>und</strong> einer anwendungsspezifischen konkreten Sicht umschalten.


5.4 Beispiel<br />

Ein Beispiel eines sehr einfachen SAM-Programmes ist eine Applikation, die aus drei<br />

Agenten besteht. Der erste Agent sendet als initiale Aktion eine Nachricht an den zweiten<br />

Agenten sendet <strong>und</strong> den Zyklus wiederholt. Befindet sich der zweite Agent <strong>im</strong> Status<br />

bereit, schickt er eine weitere Nachricht an einen dritten Agenten <strong>und</strong> wechselt in den<br />

Status warten. Erhält der dritte Agent eine Nachricht, führt er eine Reihe von Aktionen<br />

aus (Translation, Nachricht erzeugen, Rotation, Translation). Anschließend sendet er eine<br />

Nachricht an Agent 2, der in Status bereit wechselt <strong>und</strong> dem Agent 1 eine Antwort<br />

sendet. Eine konkrete Darstellung modelliert die Marsmission, in der die Erde (Agent 1)<br />

eine Anforderung für eine Aufnahme an die Raumsonde Pathfinder sendet. Diese leitet den<br />

Befehl an das Fahrzeug Sojourner weiter, das sich zum Felsen Yogi bewegt (Translation) ,<br />

ein Photo schießt (Nachricht generieren), wendet (Rotation) <strong>und</strong> zu seinem Ausgangspunkt<br />

zurückkehrt (Translation). Die Nachricht wird an Pathfinder gesendet, der diese an die Erde<br />

funkt <strong>und</strong> auf eine neue Anforderung wartet (Status bereit). Abb. 13 zeigt die abstrakte <strong>und</strong><br />

konkrete Sicht der <strong>An<strong>im</strong>ation</strong>.<br />

Abbildung 13: Abstrakte <strong>und</strong> konkrete Sicht eines SAM-Programmes<br />

6 Schlußbemerkung<br />

Wir stellen in diesem Beitrag einen integrierten visuellen/textuellen Ansatz zur Unterstützung<br />

des kollaborativen k<strong>und</strong>enorientierten Entwurfsprozesses vor. Wir gehen hierbei<br />

als Basis von der vollständig visuellen funktionalen Programmiersprache Pictorial Janus<br />

(PJ) aus, die es erlaubt, ein Programm in endbenutzerorientierter Sicht graphisch darzustellen<br />

<strong>und</strong> zu an<strong>im</strong>ieren. Funktionale Programmier- <strong>und</strong> <strong>An<strong>im</strong>ation</strong>ssprache bilden in<br />

PJ eine Einheit. Wir skizzierten die Vorgehensweise, wie funktionale visuelle Programme<br />

in <strong>im</strong>perative textuelle Programme transformiert werden können. Abschließend stellten wir<br />

eine 3D-Programmiersprache vor, die die Konzepte von PJ bzgl. 3D-<strong>An<strong>im</strong>ation</strong> überträgt<br />

<strong>und</strong> opt<strong>im</strong>iert.<br />

Trotz all dieser Vorteile in der Benutzung ist uns hier dennoch bewußt, daß es sich bzgl. der<br />

Verwendung von PJ noch um einen sehr akademischen Ansatz handelt, da PJ auf der Klasse<br />

der parallel logischen Programmiersprachen basiert, die in der Praxis nicht so häufig


Anwendung finden. Im Zuge einer möglichen Weiterentwicklung neuerer Programmiersprachen<br />

in Richtung funktionaler Beschreibungsmittel ist ein Einsatz von PJ-Konzepten<br />

zur <strong>Spezifikation</strong> <strong>und</strong> <strong>An<strong>im</strong>ation</strong> von Multiagentensystemen in Zukunft denkbar. Wir sehen<br />

PJ-basierte Ansätze hier auch nicht als Ersatz sondern vielmehr als Ergänzung zu anderen<br />

existierenden visuellen <strong>und</strong> textuellen Sprachen - speziell in frühen Phasen des Entwurfsprozeßes.<br />

Danksagung<br />

Die hier vorgestellte Arbeit besteht aus einer Summe von Teilprojekten. Wir bedanken uns<br />

insbesondere bei Marita Dücker, Ralf Hunstock, Georg Lehrenfeld, Waldemar Rosenbach<br />

<strong>und</strong> Christoph Tahedl, die an der Konzeptionierung <strong>und</strong> Implementierung der einzelnen<br />

Teilprojekte wesentlich beteiligt waren.<br />

Literatur<br />

[Bro88] M.H. Brown. Algorithm <strong>An<strong>im</strong>ation</strong>. MIT Press, Cambridge, MA, 1988.<br />

[Ch.96] Ch. Geiger and R. Hunstock and G. Lehrenfeld and W. Mueller and J. Quintanilla and<br />

A. Weber. Visual Modeling and 3D-Representation with a Complete Visual Programming<br />

Language- A Case Study in Manufacturing. In: IEEE Symposium on Visual Languages,<br />

Boulder, Colorado, USA, October 1996.<br />

[Fow97] M. Fowler. UML DISTILLED. Addison-Wesley, 1997.<br />

[Gei98] C. Geiger. Prototyping interactive an<strong>im</strong>ated objects. In: B. Pre<strong>im</strong> P. Lorenz, Hrsg., S<strong>im</strong>ulation<br />

& Visualisierung, Magdeburg, March 1998. SCS.<br />

[Har88] D. Harel. On Visual Formalisms. Communications of the ACM, 31(5):514–530, 1988.<br />

[KS90] K. Kahn <strong>und</strong> V.A. Saraswat. Complete Visualizations of Concurrent Programs and their<br />

Executions. In: 1990 IEEE Workshop on Visual Languages, Oct. 1990.<br />

[M. 96] M. Duecker and G. Lehrenfeld and W. Mueller and C. Tahedl. Specification and Analysis of<br />

Concurrent Systems in a Complete Visual Environment. In: European S<strong>im</strong>ulation Multiconference<br />

(ESM96), Budapest, Ungarn, 1996.<br />

[Mue96] W. Mueller. Executable Graphics for VHDL-based Systems Design. Dissertation, Universität-GH<br />

Paderborn, Nov 1996.<br />

[Pet95] M. Petre. Why Looking Isn’t Always Seeing: Readership Skills and Graphical Programming.<br />

Communications of the ACM, 37(10), 1995.<br />

[RS95] A. Repenning <strong>und</strong> T. Summer. Agentsheets: A Medium for Creating Domain-Oriented Visual<br />

Languages. IEEE Computer, 28(3), March 1995.<br />

[S. 96] S. Voß, S. Spieckermann. S<strong>im</strong>ulation von Farbsortierspeichern in der Automobilindustrie.<br />

In: S<strong>im</strong>ulation <strong>und</strong> <strong>An<strong>im</strong>ation</strong> für Planung, Bildung <strong>und</strong> Präsentation, Magdeburg, 1996.<br />

[Shu88] N. C. Shu. Visual Programming. Van Nostrand Reinhold, New York, 1988.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!