A man is flying in a hot air balloon and realizes he is lost. He reduces height and spots a man down below. He lowers the balloon further and shouts: Excuse me, can you tell me where I am? The man below says: Yes, you‘re in a hot air balloon, hovering 30 feet above this field. You must be an engineer, says the balloonist. I am, replies the man. How did you know? Well, says the balloonist, everything you told me is technically correct, but it‘s of no use to anyone. The man below says: You must be in management. I am, replies the balloonist, but how did you know? Well, says the man, you don‘t know where you are, or where you‘re going, but you expect me to be able to help. You‘re in the same position you were before we met, but now it‘s my fault. Matti Lattu, Co-Autor von Jeliot 1 Algorithmen-Animation mit Jeliot Ein Projekt der AAPS-Group an der Universität Helsinki 03.07.2002 Seminar Softwarevisualisierung, Katja Silligmann 2 Was ist Jeliot ? • Umgebung zum Visualisieren von Algorithmen in Java (proof of concept – Prototyp) • Nachfolger von Eliot (Visualisierung von C-Programmen) • Jeliot steht für Java-Eliot • eliöt kommt aus dem Finnischen, bedeutet: “Lebewesen“ • entwickelt im Rahmen der AAPS Forschungsgruppe (Animation Aided Problem Solving), Universität Helsinki 3 Themenübersicht • Motivation • Konzepte und Design • Benutzung von Jeliot, Beispiel-Animationen • Implementierung • Offene Probleme • Vergleich mit DDD, Leonardo, Tango • Jeliot2000 4 Motivation • Traditionell: Animationen müssen von Hand implementiert werden (z.B. Tango, Polka) Kostet Zeit ! • Debugger können nur einfache Datentypen visualisieren, Abstraktionsebene zu niedrig (z.B. DDD) Programmverständnis ?? 5 Ziele in Jeliot • Einfache Visualisierungen eigener Programme • Graphische Objekte sollen sich nicht ruckartig, sondern sanft bewegen • UserInterface flexibel und trotzdem leicht handhabbar • ADTs abstraktem Verständnis entsprechend visualisieren • “proof-of-concept“ (zeigen, dass es prinzipiell geht...) 6 Konzepte • Paradigma der selbst-animierenden Datentypen • Theater-Metapher als zentrale Design-Strategie Server-Implementierung GUI 7 Konzepte Selbstanimation Prinzip der selbst-animierenden Datentypen : • werden von Jeliot zur Verfügung gestellt • sind herkömmliche Datentypen inklusive visueller Entsprechung • führen Bewegungen aus, die mit den Operationen der ADTs verbunden sind • in Jeliot vorhanden: Basistypen, Rstack, Rqueue 8 Design Theater-Metapher(1) • Ein Algorithmus wird als Drehbuch (script) eines Theaterstücks betrachtet • Begriffe: Rollen (roles), Darsteller (actor), Bühne (stage), Regisseur (stage director) • Rollen entsprechen den Variablen/Datentypen • Für jede Rolle gibt es mindestens einen Darsteller • Ein Darsteller spielt genau eine Rolle 9 Design Theater-Metapher(2) • Interaktionen zwischen den Rollen: Operationen (in der Praxis meist Zuweisungen und Vergleiche) • Rollen sind eigentlich Models (MVC-Pattern) • Darsteller sind Views mit einer Menge von Attributen, die das Aussehen beschreiben • Attribute: shape, color, size und location (z.B. int dargestellt als Kreis mit Zahl in der Mitte, gelb, Radius 3cm, gezeichnet in der linken unteren Bildecke) 10 Design Theater-Metapher(3) • Regisseur ist der User, bestimmt Aussehen der Darsteller • Algorithmus kann auf mehreren Bühnen simultan stattfinden • Jeder Bühne steht pro Rolle ein Darsteller zur Verfügung • Regisseur kann auf jeder Bühne Rollen auswählen (und damit z.B. nur die für das Verständnis des Algorithmus wichtigen Variablen animieren) • Die Bühnen sind verschiedene Views desselben Programms! 11 Umsetzung der Theater-Metapher GUI: • Jedem Stage entspricht ein Fenster, in dem der Algorithmus ablaufen kann • User wählt über “Setup“-Fenster eines Stages die darzustellenden Variablen aus und kann Actors dieses Stages manipulieren • Kontrolle über Stages und Animation geht vom DirectorFenster aus 12 Umsetzung der Theater-Metapher Server: • Bei Animation gibt es für jede Role-Instanz mindestens eine Actor-Instanz, Actor kennt seine Role, Role braucht Actor nicht zu kennen • Stage-Instanzen verwalten die zu ihnen gehörigen ActorInstanzen • Java-Klassen: Director, Stage, Role, Actor mit Verantwortlichkeiten entsprechend der Metapher (Genaueres siehe Animation – Nachrichtenaustausch) 13 Benutzung von Jeliot(1) EJava • Programme müssen in EJava geschrieben sein (Name kommt von Eliot-Java) • EJava ist Java(tm) sehr ähnlich, bis auf neue animierfähige Datentypen (erben in Jeliot alle von Klasse: Role) • Operationen auf Rstack (LIFO) : push(long value) pop() • Operationen auf Rqueue (FIFO) : add(long value) remove() 14 Benutzung von Jeliot(2) EJava Beschränkungen • Keine Vererbung (extends) möglich! da implizit immer von Applet geerbt wird • Fehlerüberprüfung schwächer als in Java, z.B. ist möglich: Rstack stack = new rubbish(); • bei Arrays sehr viele Beschränkungen: • nur ein-/zweidimensional ist erlaubt • muss so deklariert werden: int[] array; • array = {1, 2}; nicht möglich • ArrayIndexOutOfBoundsException gibt es nicht 15 Jeliot vorführen: http://cs.joensuu.fi/~jeliot/ 16 Implementierung(1) Implementierung(1) 17 Implementierung(2) Ablauf: 1. 2. 3. Main Window liest Algorithmus, schickt Code zum Parser. Parser extrahiert animierbare Variablen und bildet Liste. Code Generator fügt Methodenaufrufen auf Variablen Animations-Requests hinzu, Liste von animierbaren Variablen geht an Main Window. 4. Java Compiler kompiliert generierten Code, URL der Class-Datei wird an Main Window gesendet. 5. Main Window leitet Variablenliste und URL an Animator(animation engine) weiter, dieser startet Animation. 18 Implementierung(3) Server • Server-Prozess bekommt alle Requests des Main Window ein einziges Socket zum Empfangen von Requests • Für jeden neuen Client wird neues Socket und ein eigener Kommunikations-Thread erzeugt eigener Kanal für jeden Client • Kommunikations-Thread erzeugt für jeden Client ein gesondertes Verzeichnis (um Daten für Client abzulegen) 19 Implementierung(4) Kommunikations-Thread Empfängt zwei Arten von Messages vom Client: 1. den Code 2. Stop-Requests Sendet drei Arten von Messages zurück: 1. Liste von Objekten, die animiert werden können 2. URL zur Class-Datei 3. Kompilierungs-Fehler, der vom Parser, vom CodeGenerator oder vom Java Compiler stammen kann 20 Implementierung(5) Der Animator • Modul, das Animation zeigt • Kleiner Server für Requests aus dem generierten Code: Methodenaufrufe zum Senden von Requests an den Animator sind in generierten Code eingebunden • Typische animierte Operation: Vergleich oder Zuweisung • Während Operation animiert wird, ist GUI blockiert. Dann kehrt Kontrolle zurück an GUI/Applet • Animator besteht aus: director, stages, Kommunikation zw. director und stages, GUI.21 Implementierung(6) Animation - Nachrichtenaustausch • Requests der Role-Instanzen kommen bei Director an • Director verteilt Requests an alle vorhandenen Stage-Instanzen • Jeder Stage prüft, ob die Rolle bei ihm visualisiert werden soll • Falls ja und falls eine Actor-Instanz gefunden wurde Request geht an Actor (Darsteller), der Grafik-Routinen auf JAPI-Instanz aufruft (bei Start der Animation) • Antworten aller Stages werden gesammelt, gehen dann an director 22 Nachrichtenaustausch während der Animation : 23 Implementierung(8) Realisierung von selbstanimierenden Datentypen • geteilt in Role- und Actor- Klassen • visuelle Datentypen sind Role-Instanzen, senden VisualisierungsRequests an Actor-Instanz (Actor als entsprechendes Gegenstück) • falls Actor den Request erhält, macht er Aufrufe auf JAPI-Instanz (Jeliot Animation Primitive Interface) Korrektur zum Vortrag: • Im Gegensatz zum Vorgänger Eliot werden hier keine Polka- 24 Zeichenroutinen mehr benutzt. JAPI-Klasse enthält nur Java Offene Probleme • Jeliot zeigt nicht, wie Werte berechnet werden (Problem besonders für didaktisches Ziel, Lern-Tool...) • Läuft nur unter Windows einwandfrei • Komplexere ADTs können nicht visualisiert werden Wünschenswert: Interface für Jeliot-ADTs, das der User nutzen kann, um eigene Visualisierungen für ADTs zu schreiben 25 Jeliot im Vergleich mit Tango, Leonardo, DDD • Tango: flexibler, dafür aufwändiger (von Hand coden!), mit Tango prinzipiell alles möglich. • Leonardo: Deklarationen – aufwändiger als Jeliot, da auf sehr unabstrakten Ebene, evtl. weniger aufwändig als Tango • DDD: Nutzer braucht sich nicht um low-level-Ebene zu kümmern, DDD kann im Gegensatz zu Jeliot Querbeziehungen visualisieren(!) ( Entfalten von verschachtelten ADTs) 26 Jeliot im Vergleich mit Tango, Leonardo, DDD - Fortsetzung • DDD bietet keine abstrakte Sicht auf Programme/Algorithmen, da nur vorhandene Datenstrukturen visualisiert werden können, jedoch keine abstrakten Datentypen wie z.B. Graphen • wie in Jeliot fehlt Möglichkeit, eigene Visualisierungen zu schreiben Vergleich von Jeliot und DDD interessant, • da beide den Ansatz verfolgen, Visualisierung für den Nutzer möglichst einfach zu gestalten • da DDD sich zum Ziel gesetzt hat, in Zukunft abstraktere Sicht auf Programm/Algorithmus zu ermöglichen + 27 Unterstützung eigener Visualisierungen (User) Jeliot2000 • Verbesserungen zu Jeliot: kann Beziehungen visualisieren (z.B. Berechnungen, Auswertung von Unterausdrücken) • wichtig für die Intention von Jeliot, Anfängern das Verständnis von Algorithmen zu erleichtern! • Schwäche: auf Sprachelemente und Kontrollstrukturen beschränkt, keine ADTs visualisierbar 28 Jeliot2000 Screenshot 29 Literatur 1. 2. 3. 4. 5. 6. E. Sutinen, J. Tarhio, S.-P. Lahtinen, A.-P. Tuovinen, E. Rautama, V. Meisalo: Eliot – an Algorithm Animation Environment. No. A-1997-4, Series of Publications A, Department of Computer Science, University of Helsinki, 1997. J. Haajanen, M. Pesonius, E. Sutinen, J. Tarhio, T. Teräsvirta, P. Vannine: Animation of User Algorithms on the Web. In Proceedings of VL´ 97 IEEE Symposium on Visual Languages, pages 360-367, 1997. R. Ben-Bassat Levy, M. Ben-Ari, P.A. Uronen: The Jeliot 2000 Program Animation System. Journal of Visual Languages and Computing, 2001. Andreas Zeller: Datenstrukturen visualisieren und animieren mit DDD. Informatik Forschung und Entwicklung 16, 65-75, Springer-Verlag 2001. Jeliot Homepage http://cs.joensuu.fi/~jeliot/www/ AAPS Homepage http://www.cs.helsinki.fi/research/aaps/ 30