Ereignisorientierte Programmierung
2 Klassisches Vorgehen Idee der weitgehend automatisierten Problemlösung. Entwickler analysiert Erfordernisse, stellt einen idealen Algorithmus dafür auf. Programm arbeitet autonom; die Reihenfolge ist fest vorgegeben. Benutzer wird im Zweifelsfall gefragt: Entscheidungshilfe für das Programm Lieferung zusätzlicher Daten
3 Klassische Programmstruktur Programm Jedes Read erzeugt einen Zustand.
4 Ereignisorientierte Sicht Kernpunkt: benutzerzentrierter Ansatz. Benutzer übernimmt die Führung, plant die Reihenfolge der Schritte selbst. Benutzeraktionen sind für das Programm überraschende Ereignisse, auf die in passender Weise reagiert werden muss. sternförmiger Zustandsraum
5 Ereignisorientierte Programmstruktur zentrale Einlaufstelle Programm invertierte Programmhierarchie
6 Arten von Ereignissen Maus-Klicks Position, Taste, Modifiers, gedrückt oder losgelassen? Tastendrücke Taste, Zeichen, Modifiers, Wiederholfunktion, Fensterverwaltung Fenster verdeckt, aktiviert, neu zu zeichnen, System-Ereignisse noevent (= Nix los ) für Hintergrundverarbeitung in Eingabepausen
7 Phasen der Ereignisverarbeitung Lesen Rohdaten Ereignisart und -parameter Zuordnen Parameter, Operanden Ziel des Ereignisses (Focus), Delegation an Behandlungsroutine Interpretieren Bedeutung Semantik: Bestimmung der auszuführenden Aktion Ausführen Aktion Rückkopplung Reaktion! Jedes Ereignis soll zu einem sichtbaren Ergebnis führen.
8 Hauptprogramm Initialisierung Hauptschleife (main event loop) Terminierung Initialize(); exit = false; while (! exit) { event = GetEvent(); if (event.kind!= noevent) HandleEvent(event); else BackgroundTasks(); } CleanUp();
9 Interpretation von Ereignissen konventionell: 1. Unterscheidung nach Ereignisart (event.kind) HandleClick(event), HandleKey(event), 2. Unterscheidung nach Kontext (betroffene Objekte, Selektion, etc.) objektorientiert: 1. Bestimmung des betroffenen Objekts CurrentFocus().HandleEvent(event) 2. Unterscheidung nach Ereignisart 3. Delegation an das nächste Objekt, wenn keine Bedeutung für das aktuelle Objekt definiert ist.
10 Focus und Objektschachtelung Applikation Fenster Text Selektion
11 Behandlung von Ereignissen Üblicherweise atomare Aktionen, die nicht von Benutzereingaben unterbrochen werden. Ausnahme: Klick mit Ziehen der Maus, z.b.: Selektion Drag & Drop Schieberegler Lesen von Benutzereingaben außerhalb der Main Event Loop => Zustand! prevpos = event.position; while (ButtonPressed()) { pos = GetMousePosition(); if (pos prevpos) { InvertText( ); prevpos = pos; } }
12 Zustände durch globale Variablen Interpretation von Ereignissen hängt von der Vorgeschichte ab ( Zustände!) Selektion Programm Copy
13 Aktionen mit Parametern führen zwangsläufig zu Zuständen 2 prinzipielle Möglichkeiten: Präfix-Reihenfolge Aktion Parameterangabe Postfix-Reihenfolge Parameterangabe Aktion
14 Präfix-Notation Verb-Noun-Approach Ursprung: Befehlssprachen cp *.txt docs f/temp/ Frage nach Parametern (lineare Zustandsräume) find string: test forward (y/n): y
15 Postfix-Notation Noun-Verb-Approach Parameterangabe durch Selektion Aktivierung des Befehls Befehl bezieht sich implizit auf die ausgewählten Parameter Folgen: Komplexe Aktionen werden in einfache Teilaktionen zerlegt. Teilaktionen (Selektion, Button, Drag&Drop) können auf viele Arten kombiniert werden. Benutzer können ihre Meinung ändern. Zustände nur durch Vorgeschichte (Existenz der Selektion)
16 ein Befehl, ein Operand Gleicher Aufwand bei Präfix- und Postfix-Notation (In beiden Fällen müssen der Operand und der Befehl spezifiziert werden). Postfix-Notation vermeidet nur einen sperrenden Zustand.
17 ein Befehl, mehrere Operanden Präfix: B O 1 B O 2 B O 3 B O 4 B O 1 O 2 O 3 O 4 E lästig, wenn nur ein Operand: B O 1 E Postfix: O 1 O 2 O 3 O 4 B (Endebefehl) erfordert Mechanismus zur Mehrfachselektion Selektion kann vor Befehlsausführung kontrolliert und korrigiert werden (höhere Bediensicherheit)
18 mehrere Befehle, ein Operand Kettenbefehle, z.b. Schrift, Größe, Farbe, Stil, Präfix: B 1 O B 2 O B 3 O B 4 O Postfix: O B 1 B 2 B 3 B 4 Selektion muss nach der Befehlsausführung erhalten bleiben
19 Mischformen Infix-Notation: Parameter Befehl Parameter Bei asymmetrischen Befehlen (Parameter sind nicht gleichwertig) Bei vielen Zusatzparametern, die nicht selektiert werden können (Such-, Druckdialog, ) Wiederholungsbefehle: Befehl 1 Parameter Befehl 2 Befehl 2 Befehl 2 Befehl 2 benutzt die zuvor angegebenen Parameter Befehl 1 : Präfix oder Infix Befehl 2 : Postfix
20 Empfehlungen Präfix-Notation möglichst vermeiden Sichtbare Parameter selektierbar machen Einfacher Mechanismus für Mehrfachselektion Elemente in Mehrfachselektion sind gleichberechtigt (Reihenfolge der Selektion darf keine Rolle spielen) Bei Parameterdialogen zuletzt eingegebene Parameter speichern; bei nächster Aktivierung wieder anbieten Kurzformen anbieten (z.b. Print One, Find Next ) Unmögliche Befehle verbieten (ausblenden)