Ein Ereignis (engl. event) dient in der Softwaretechnik zur Steuerung des Programmflusses. Das Programm wird nicht linear durchlaufen, sondern es werden spezielle Ereignisbehandlungsroutinen (engl. listener, observer, event handler) immer dann ausgeführt, wenn ein bestimmtes Ereignis auftritt (vergleiche Rückruffunktion). Ein verwandtes Konzept sind Interrupts.
Ereignisse eignen sich besonders gut zur Implementierung von grafischen Benutzeroberflächen, wobei hier die Ereignisse meist Aktionen des Benutzers sind, wie zum Beispiel das Drücken einer Taste oder das Anklicken einer Schaltfläche. Ein anderes wichtiges Anwendungsfeld sind Computersimulationen, die so aufgebaut werden, dass Zustandsänderungen nur von Ereignissen ausgelöst werden, und ihrerseits Ereignisse auslösen (siehe ereignisorientierte Simulation).
Ereignisorientierte Programmierung lässt sich gut mit den Konzepten der objektorientierten Programmierung kombinieren: Objekte definieren dann nicht mehr nur Eigenschaften und Methoden, sondern sind auch Ereignisquellen und bieten die Möglichkeit, die Ereignisbehandlung zu beeinflussen. Auch die Ereignisbehandlungsroutinen (engl. event handler, eingedeutscht der Event-Handler, etwa „Ereignisverarbeiter“ oder „Ereignisbehandler“) und die Ereignisse selbst werden dann als Objekte modelliert.
Ereignisse können je nach Programmierumgebung entweder nur eine Ereignisbehandlungsroutine (wie z. B. in Borland Delphi) oder beliebig viele Ereignisbehandlungsroutinen (wie beim Signal-Slot-Konzept) aufrufen.
Der folgende Quelltext soll eine einfache Implementierung eines Ereignissystems zeigen:
var global = this; function Event() { this.listener = []; }; Event.prototype = { addListener: function(l) { if (typeof l !== "function") return false; for (var i = 0; i < this.listener.length; i++) { if (this.listener[i] === l) return false; } this.listener.push(l); return true; }, removeListener: function(l) { if (typeof l !== "function") return false; for (var i = 0; i < this.listener.length; i++) { if (this.listener[i] === l) { this.listener.splice(i,1); return true; } } return false; }, call: function() { for each (var l in this.listener) { l.apply(global, arguments); } } }
Dieses einfache Ereignissystem bietet eine linear ablaufende Ereignisbehandlung und ermöglicht das An- und Abmelden von Ereignisbehandlungsroutinen. Für parallele Ausführung plant das W3C sogenannte Web Workers. Das dargestellte Ereignissystem kann wie folgt verwendet werden:
Formular = function() { this.abschicken = new Event(); ⋮ } function zumServerSenden() { ⋮ } function DankeSagen() { alert("Vielen Dank für das Ausfüllen des Formulars."); } var umfrage=new Formular(); umfrage.abschicken.addListener(zumServerSenden); umfrage.abschicken.addListener(DankeSagen); umfrage.abschicken.call();
Für Lexikon-Artikel gilt die Lizenz „Creative Commons Attribution/Share Alike“.
Die Wikipedia ist eine Enzyklopädie, deren Inhalte frei nutzbar sind und es immer sein werden.