Inhaltsverzeichnis:
Video: Azure Friday | Azure Analysis Services Scale Out & Diagnostics 2024
Das Wort event zaubert alle Arten von Bildern. Für einen Nicht-Programmierer ist ein Ereignis nur "etwas, das passiert. "Wenn Sie es gewohnt sind, in Java mit Fenstern und Frames zu arbeiten, dann denken Sie wahrscheinlich an ein Ereignis als ein Ereignis, das ein Stück Code weckt. Zum Beispiel weckt der Mausklick oder Tastenanschlag eines Benutzers den Code auf, der eine Option festlegt und ein OK-Feld anzeigt. Der Klick oder Tastenanschlag selbst wird als -Ereignis bezeichnet, da dies unabhängig vom laufenden Programm geschieht. Nur der Benutzer weiß, wann er diese Taste drücken wird. Und wenn die Taste gedrückt wird, erwacht ein Teil des Java-Programms und behandelt die Situation. Dieses Szenario wird ereignisgesteuerte Programmierung genannt.
Ereignisgesteuerte Programmierung
SAX-Programme sind ereignisgesteuert . Zum Beispiel schlafen Sie für einen guten Schlaf ins Bett. Sie greifen hinüber, um Ihren Wecker einzustellen und sich dann einzuleben, die Augen zu schließen und für einige Stunden bewusstlos zu werden. Dann passiert ein wichtiges Ereignis: Eine bestimmte Tageszeit kommt an. Wenn das Ereignis stattfindet, geht der Wecker in den "Weckmodus" - und macht einen schrecklichen Lärm, um Sie aus Ihrem erholsamen Schlaf zu stören.
Hier ist ein anderes Szenario. Sie sind ein vielbeschäftigter Manager und werden mehrere Stunden unterwegs sein, aber Sie möchten kein wichtiges Geschäft verpassen. Bevor Sie das Büro verlassen, sagen Sie Ihrem Assistenten: "Rufen Sie mich an, wenn etwas Wichtiges auftaucht. "Die Ausgabe dieser Reihenfolge ähnelt dem Einstellen des Weckers. Sie teilen Ihrem Assistenten (Ihrem Wecker) mit, dass Sie geweckt werden, wenn ein Ereignis stattfindet. Diese Anforderung an Ihren Assistenten (oder an Ihren Wecker) wird als Registrierung bezeichnet. In beiden Fällen melden Sie sich bei einem Weckdienst an. Nachdem Sie sich registriert haben, können Sie Ihre gemächliche Nichtaktivität verfolgen und alle echten Geschäfte ignorieren, bis ein Ereignis eintritt. Dann …
Ring, Ring. Ihr Handy brüllt Sie an. "Hallo? "
" Hallo. Das ist dein Assistent. Ich habe die Verkaufszahlen für das erste Quartal. Sie sind 1 Million, 4 Million und 2 Million. "
" Mal sehen. Das sind insgesamt 7 Millionen ", sagen Sie. "Ich werde es auf meinem PalmPilot notieren. Vielen Dank. " Du legst auf.
Einige Augenblicke später erhalten Sie einen weiteren Anruf. "Der Präsident von Big Bucks, Inc., will dieses Geschäft schließen. Sie sprechen 10 Millionen Dollar. "
"Hmm", antworten Sie. "Das wird unseren jährlichen Umsatz bis zu 17 Megabucks bringen. Ich werde diese Informationen in meiner Tabellenkalkulationsanwendung speichern. Danke für den Anruf. "
Jede dieser Interaktionen ist als Callback bekannt.Zu Beginn des Tages, als Sie Ihren Wunsch mit dem Assistenten registriert haben, haben Sie einen Rückruf angefordert. Wann immer ein Ereignis stattfindet, ruft der Assistent einen Rückruf an, um Sie über das Ereignis zu informieren. In Java-Programmierbegriffen ruft der Assistent eine Ihrer vielen Methoden (eines Ihrer Java-Unterprogramme) auf.
Die Essenz der ereignisgesteuerten Programmierung
Die ereignisgesteuerte Programmierung besteht aus drei Teilen:
- Registrierung: Sie registrieren Ihren Wunsch, benachrichtigt zu werden, wenn ein Ereignis eintritt. Sie registrieren diesen Wunsch mit einem anderen Code - einem anderen Objekt, in der Regel etwas, das Sie importiert haben (z. B. ein Stück Code, das Teil der API eines anderen ist). Dieses Objekt überwacht dann von hinten das Auftreten des von Ihnen angegebenen Ereignisses.
- Ereignisereignis: Ein bestimmtes Ereignis wird ausgelöst.
- Rückruf: Der andere Code führt einen Rückruf durch. Eine Ihrer Methoden wird aufgerufen.
Zwei Arten von Code
Die Unterscheidung zwischen aktivem Code und passivem Code ist nützlich:
- Aktiver Code hat eine Hauptmethode. Aktiver Code, sobald er anfängt zu laufen, steht im Mittelpunkt. Aktiver Code enthält den Ausführungs-Thread, der das gesamte Ballspiel steuert.
- Passiver Code sitzt einfach da und wartet darauf, gerufen zu werden. Eine passive Dice-Klasse tut nichts, bis ein anderer Code Dice aufruft. rollen().
Nun können Sie denken, dass passiver Code alles ist, was Sie für eine ereignisgesteuerte Programmierung benötigen, aber das ist es nicht. Für die Ereignisbehandlung benötigen Sie diesen Registrierungsschritt. Der passive Code beginnt mit der Registrierung eines anderen Codes.
Um diesen Begriff der Registrierung zu festigen, denken Sie an ein Beispiel aus der Bildschirmwelt der Mäuse, Fenster und Tasten. Sie erstellen ein Fenster oder einen Rahmen. Sie möchten, dass Ihr Frame auf Mausklicks reagiert. Geben Sie daher den folgenden Befehl ein:
. addMouseListener (dies);
Dieser Befehl registriert Ihren Rahmen mit der Schaltfläche. Der Befehl sagt praktisch Wenn ein Mausereignis eintritt, rufen Sie eine der Mausbehandlungsmethoden des Rahmens auf. Später, wenn der Benutzer mit der Maus klickt, erhält der Rahmen einen Rückruf. Der Computer ruft die mouseClicked-Methode des Frames auf.
SAX-Ereignisse
Sicher, SAX ist ereignisgesteuert, aber das bedeutet nicht, dass ein SAX-Programm auf Mausklicks wartet. Stattdessen folgt der SAX-Code dem in den letzten Absätzen beschriebenen Register-Ereignis-Callback-Modell. Jedes SAX-Programm verfügt über zwei unverzichtbare Codestücke:
- Ein von Ihnen geschriebener Code - der -Handler . (Ihr Handler kann eine vorgefertigte DefaultHandler-Klasse erweitern.) Der Handler ist wie die Million-Dollar-Exekutive im vorhergehenden Abschnitt.
- Ein Stück Code, das Sie normalerweise nicht schreiben - der -Parser . Der Parser spielt eine Rolle wie der Assistent des Direktors. Die Java 1. 4-API verfügt über einen integrierten Parser. Sie erstellen eine Instanz dieses Parsers und registrieren dann Ihren Handler mit dieser Parserinstanz. Im Endeffekt weisen Sie die Instanz an, Ihren Handler immer dann zurückzurufen, wenn ein Ereignis stattfindet.
Alles, was mit XML zu tun hat, ist neu und befindet sich noch immer im Wandel. Aus diesem Grund ist die Terminologie auf besondere Weise zusammengesetzt. Bei der Entwicklung von SAX Version 2 hatten einige Techies ein Make-up-New-Name-Festival. Was normalerweise als "Parser" bezeichnet wird, ist in einer Java-Schnittstelle namens XMLReader enthalten. Früher gab es eine Klasse namens org. XML. Saxophon. Parser, aber die Klasse wurde veraltet (was bedeutet, dass Sie sie von der Unterseite Ihres Schuhs abkratzen sollten). Um die Sache etwas komplizierter zu machen, gibt es noch ein weiteres Parsing-Tool, javax. XML. Parser. SAXParser. Sie verwenden diesen SAXParser, um sich selbst zu einem XMLReader zu machen. Mit etwas Glück werden Sie sich schnell an diese komplizierte Terminologie gewöhnen. Denken Sie daran, dass ein sogenannter "Parser" normalerweise eine Instanz von XMLReader ist.
Das Register-und-Callback-Szenario macht SAX ereignisgesteuert. Das Lustige ist nun, ein SAX-Event ist nicht greifbar. Ein SAX-Ereignis erinnert Sie nicht an einen Tastendruck oder einen Tastenklick. In SAX scannt der Parser ein XML-Dokument von oben nach unten. Wenn der Parser auf etwas Interessantes stößt, löst der Parser ein Ereignis aus und ruft den Handler auf. Dann muss der Handler etwas gegen diese interessante Begegnung unternehmen.