Ereignisgesteuerte Programmierung

Im Computerprogrammierung, ereignisgesteuerte Programmierung ist ein Programmierparadigma, in dem die Programmfluss wird bestimmt durch Veranstaltungen wie Benutzeraktionen (Maus Klicks, Taste drückt), Sensor Ausgänge, oder Nachrichtenübergang aus anderen Programmen oder Themen. Die ereignisgesteuerte Programmierung ist das dominierende Paradigma, das in verwendet wird Grafische Benutzeroberflächen und andere Anwendungen (z. B. JavaScript Web Applikationen), die sich darauf konzentrieren, bestimmte Aktionen als Antwort auf Benutzereingabe. Dies gilt auch für die Programmierung für Gerätetreiber (z.B., P In USB -Geräte -Treiberstapeln[1]).

In einer ereignisgesteuerten Anwendung gibt es im Allgemeinen a Hauptschleife das hört auf Ereignisse und löst dann a aus Rückruffunktion Wenn eines dieser Ereignisse erkannt wird. Im eingebettete SystemeDas Gleiche kann mit Verwendung erreicht werden Hardware unterbricht Anstelle einer ständig laufenden Hauptschleife. Ereignisgesteuerte Programme können in jedem geschrieben werden Programmiersprache, obwohl die Aufgabe in Sprachen, die bieten, einfacher ist Hochleistungsabstraktionen, wie zum Beispiel erwarten und Schließungen.

Event -Handler

Ein trivialer Ereignishandler

Weil der Code für die Überprüfung von Ereignissen und die Hauptschleife Bei Anwendungen sind viele Programmierframeworks üblich, und erwarten, dass der Benutzer nur den Code für die Ereignishandler bereitstellt. In diesem einfachen Beispiel kann es einen Anruf bei einem Ereignishandler namens geben OnkeyEner () Dies enthält ein Argument mit einer Zeichenfolge, die dem, was der Benutzer eingegeben hat, entspricht, bevor er auf die Eingabetaste gedrückt hat. Um zwei Zahlen hinzuzufügen, muss der Speicher außerhalb des Event -Handlers verwendet werden. Die Implementierung könnte wie unten aussehen.

Deklarieren Sie weltweit den Zähler k und die Ganzzahl T. Onkeyenter (Zeichen C) {Konvertieren Sie C in eine Zahl n, wenn k in t Nullspeicher ist und in T -Inkrement k ansonsten k fügen, das Ergebnis drucken und K auf Null zurücksetzen können}

Während das Verfolgen der Geschichte normalerweise in einem sequentiellen Programm trivial ist, da Ereignishandler als Reaktion auf externe Ereignisse ausgeführt werden, kann die korrekte Strukturierung der Handler so zu funktionieren, wenn sie in beliebiger Reihenfolge aufgerufen werden, besondere Aufmerksamkeit und Planung in einem ereignisgesteuerten Programm erfordern.

Erstellen von Event -Handlern

Der erste Schritt bei der Entwicklung eines ereignisgesteuerten Programms besteht darin, eine Reihe von zu schreiben Unterroutinen, oder Methoden, Event-Handler-Routinen genannt. Diese Routinen verarbeiten die Ereignisse, auf die das Hauptprogramm reagieren wird. Zum Beispiel klickte eine einzelne linke Maus auf eine Befehlstaste in a GUI Das Programm kann eine Routine auslösen, die ein anderes Fenster öffnet, Daten in a speichern Datenbank oder beenden Sie die Anwendung. Viele moderne Programmierumgebungen bieten dem Programmierer Ereignisvorlagen und ermöglichen es dem Programmierer, sich auf das Schreiben des Ereigniscodes zu konzentrieren.

Der zweite Schritt besteht darin, Ereignishandler an Ereignisse zu binden, damit die richtige Funktion aufgerufen wird, wenn das Ereignis stattfindet. Grafische Redakteure kombinieren die ersten beiden Schritte: Doppelklicken Sie auf eine Schaltfläche, und der Editor erstellt einen (leeren) Ereignishandler, der dem Benutzer zugeordnet ist, der auf die Schaltfläche klickt, und öffnet ein Textfenster, damit Sie den Ereignishandler bearbeiten können.

Der dritte Schritt bei der Entwicklung eines ereignisgesteuerten Programms besteht darin, die zu schreiben Hauptschleife. Dies ist eine Funktion, die das Auftreten von Ereignissen überprüft und dann den passenden Ereignishandler aufruft, um ihn zu verarbeiten. Die meisten ereignisgesteuerten Programmierumgebungen bieten diese Hauptschleife bereits an, daher muss der Anwendungsprogrammierer nicht speziell bereitgestellt werden. Rollenspiel, eine frühe Programmiersprache von IBMDas Designkonzept der 1960er Jahre ähnelte der oben diskutierten ereignisgesteuerten Programme, die ein integriertes Hauptpunkt bildeten I/o Schleife (bekannt als "Programmzyklus"), in dem die Berechnungen gemäß "Indikatoren" (Indikatoren "reagierten (Flaggen) die früher im Zyklus festgelegt wurden.

Ausnahmebehandler in PL/i

Im Pl/iObwohl ein Programm selbst möglicherweise nicht überwiegend ereignisgesteuert ist, bestimmte abnormale Ereignisse wie ein Hardwarefehler, Überlauf oder "Programmprüfungen" können auftreten, die möglicherweise eine weitere Verarbeitung verhindern. Ausnahmebehandler kann von "on Aussagen" in (unsichtbaren) Anrufern zur Verfügung gestellt werden Reinigung Routinen, um anschließend vor der Beendigung zu säubern oder Wiederherstellungsvorgänge durchzuführen und zum unterbrochenen Verfahren zurückzukehren.

Gemeinsame Verwendungen

Die meisten vorhandenen GUI-Entwicklungstools und -Architekturen stützen sich auf ereignisgesteuerte Programme.[2] Das Java AWT -Framework verarbeitet alle UI Ereignisversandsthread. Ebenso alle UI -Updates im Java -Framework Javafx treten auf dem Javafx -Anwendungs ​​-Thread auf.[3]

Darüber hinaus sind Systeme wie node.js ebenfalls ereignisgesteuert.[4]

Kritik

Die Gestaltung jener Programme, die sich auf das Event-Action-Modell stützen, wurde kritisiert, und es wurde vorgeschlagen, dass das Ereignis-Action-Modell die Programmierer dazu veranlasst, fehleranfällige, schwer zu erweiterende und übermäßig komplexe Anwendungscode zu erstellen.[2] Tabelletrieben Staatsmaschinen wurden als praktikable Alternative befürwortet.[5] Andererseits leiden tabelletriebene Staatsmaschinen selbst unter erheblichen Schwächen, einschließlich der Zustandsexplosion Phänomen.[6] Eine Lösung hierfür ist die Verwendung Petri Nets.

Stackloser Faden

Ein ereignisgesteuerter Ansatz wird in verwendet Hardware -Beschreibung Sprachen. Ein Thread -Kontext benötigt nur einen CPU -Stapel, während ein Ereignis aktiv verarbeitet. Sobald die CPU fertig ist, kann die CPU andere ereignisgesteuerte Threads verarbeiten, wodurch eine extrem große Anzahl von Fäden behandelt werden kann. Dies ist im Wesentlichen a Finite-State-Maschine sich nähern.

Siehe auch

Verweise

  1. ^ Vivek Gupta, Ethan Jackson, Shaz Qadeer und Sriram Rajamani (November 2012). "P: Safe asynchrone ereignisgesteuerte Programmierung". Microsoft Research. Abgerufen 20. Februar 2017.{{}}: CS1 Wartung: Verwendet Autorenparameter (Link)
  2. ^ a b Samek, Miro (1. April 2013). "Wer hat meinen Staat bewegt?". Dr. Dobbs. Abgerufen 2018-01-28.
  3. ^ Fedortsova, Irina (Juni 2012). "Parallelität in Javafx". Javafx Dokumentation Home. Orakel. Abgerufen 4. Januar 2018. Das JavaFX-Szenegrafik, das die grafische Benutzeroberfläche einer JavaFX-Anwendung darstellt, ist nicht mit Thread-Safe und kann nur aus dem UI-Thread zugegriffen und geändert werden, auch als Javafx-Anwendungs-Thread bezeichnet.
  4. ^ Ereignisgesteuerte Programmierung in node.js.
  5. ^ Samek, Miro (11. März 2009). "Zustandsmaschinen für ereignisgesteuerte Systeme". Abgerufen 19. März 2013.
  6. ^ Patrick Schaumont (2012-11-27). Eine praktische Einführung in Hardware-/Software -Codessign. ISBN 978-1-4614-3737-6.

Externe Links