Inhoudsopgave:
Video: Какой сегодня праздник на календаре 12 июля 2019 года 2024
Het woord evenement roept allerlei soorten afbeeldingen op. Voor een niet-programmeur is een evenement gewoon 'iets dat gebeurt'. "Als je gewend bent om met windows en frames in Java om te gaan, dan denk je waarschijnlijk aan een gebeurtenis als een gebeurtenis die een stukje code wakker maakt. Bijvoorbeeld, de muisklik of toetsaanslag van een gebruiker activeert de code die een optie instelt en geeft een OK-vak weer. De klik of toetsaanslag zelf wordt een -gebeurtenis genoemd, omdat deze onafhankelijk van het actieve programma gebeurt. Alleen de gebruiker weet wanneer hij of zij op die knop drukt. En wanneer de knop wordt ingedrukt, wordt een deel van het Java-programma net wakker en behandelt het de situatie. Dit scenario wordt gebeurtenisgestuurd programmeren genoemd.
Gebeurtenisgestuurde programmering
SAX-programma's zijn door gebeurtenissen aangedreven . U stapt bijvoorbeeld in bed voor een goede nachtrust. Je reikt je hand uit om je wekker in te stellen en je dan te settelen, je ogen te sluiten en een aantal uren bewusteloos te raken. Dan gebeurt er een belangrijke gebeurtenis: een bepaald tijdstip komt aan. Wanneer de gebeurtenis plaatsvindt, gaat de wekker in zijn "ontwaak" -modus - en maakt een verschrikkelijk lawaai om u uit uw rustgevende slaap te beroven.
Dit is een ander scenario. Je bent een drukke manager en je bent een paar uur onderweg, maar je wilt geen belangrijke zaken missen. Voordat je het kantoor verlaat, zeg je tegen je assistent: "Bel me als er iets belangrijks komt. "Het afgeven van deze bestelling is vergelijkbaar met het instellen van de wekker. U vertelt uw assistent (uw wekker) om u wakker te maken als een evenement plaatsvindt. Als u dit verzoek aan uw assistent (of aan uw alarmklok) doet, wordt dit registratie genoemd. In beide scenario's registreer je jezelf met een wekservice. Nadat je je hebt geregistreerd, kun je je ontspannen non-activiteit voortzetten en alle echte zaken negeren tot er iets gebeurt. Dan …
Bel, bel. Je mobiele telefoon schreeuwt je uit. "Hallo? “
“Hello. Dit is je assistent. Ik heb de verkoopcijfers voor het eerste kwartaal. Ze zijn 1 miljoen, 4 miljoen en 2 miljoen. "
" Eens kijken. Dat is een totaal van 7 miljoen, "zegt u. "Ik zal het op mijn PalmPilot noteren. Bedankt. "Je hangt op.
Enkele momenten later krijg je een nieuwe oproep. "De president van Big Bucks, Inc. wil die deal sluiten. Ze hebben het over 10 miljoen dollar. “
"Hmm", je reageert. "Dat levert onze jaaromzet op tot 17 megabucks. Ik zal die informatie opslaan in mijn spreadsheetapplicatie. Bedankt voor het bellen. "
Elk van deze interacties staat bekend als een callback .Eerder op de dag, toen u uw wens bij de assistent registreerde, vroeg u om een terugroepactie. Vervolgens maakt de assistent, telkens wanneer een gebeurtenis plaatsvindt, een terugroepactie om u op de hoogte te stellen van de gebeurtenis. In Java-programmeertermen roept de assistent een van uw vele methoden aan (een van uw Java-subprogramma's).
De essentie van gebeurtenisgestuurde programmering
Gebeurtenisgestuurd programmeren bestaat uit drie delen:
- Registratie: U registreert uw wens om op de hoogte te worden gesteld wanneer zich een gebeurtenis voordoet. Je registreert deze wens met een ander stuk code - een ander object, meestal iets dat je hebt geïmporteerd (zoals een stuk code dat deel uitmaakt van de API van iemand anders). Dit object kijkt vervolgens van achter de schermen naar het optreden van de door u opgegeven gebeurtenis.
- Gebeurtenis optreden: Er gebeurt een specifieke gebeurtenis.
- Terugbellen: Het andere stuk code voert een callback uit. Een van je methoden wordt gebeld.
Twee soorten code
Het onderscheid tussen actieve -code en passieve -code is nuttig:
- Actieve code heeft een hoofdmethode. Actieve code, zodra deze wordt gestart, staat centraal. Actieve code bevat de thread van uitvoering die het hele balspel bestuurt.
- Passieve code zit daar gewoon in de aanslag om te worden gebeld. Een passieve Dice-klasse doet niets totdat een andere code Dice noemt. rollen().
Nu, je zou kunnen denken dat passieve code alles is wat je nodig hebt voor door gebeurtenissen gestuurde programmering, maar dat is het niet. Voor het afhandelen van gebeurtenissen hebt u deze registratiestap nodig. De passieve code begint met het registreren van een ander stuk code.
Om een beter beeld te krijgen van de registratie, moet u denken aan een voorbeeld uit de wereld van muizen, vensters en knoppen op het scherm. U maakt een venster of kader. U wilt dat uw kader reageert op muisklikken, dus geeft u de volgende opdracht:
-knop. addMouseListener (deze);
Dit commando registreert uw frame met de knop. Het commando zegt, in feite, Wanneer een muisgebeurtenis plaatsvindt, bel dan een van de muisverwerkingsmethoden van het frame. Later, wanneer de gebruiker met de muis klikt, krijgt het frame een callback. De computer roept de mouseClicked-methode van het frame aan.
SAX-gebeurtenissen
Natuurlijk, SAX is door gebeurtenissen aangestuurd, maar dit betekent niet dat een SAX-programma wacht op muisklikken. In plaats daarvan volgt de SAX-code het register-gebeurtenis-terugroepmodel dat in de laatste paar alinea's is beschreven. Elk SAX-programma heeft twee onmisbare stukjes code:
- Een stuk code dat u schrijft - de -handler . (Uw handler kan een vooraf geschreven DefaultHandler-klasse uitbreiden.) De handler is vergelijkbaar met de miljoen-dollar-beheerder in het voorgaande gedeelte.
- Een stuk code dat u normaal niet schrijft - de parser . De parser speelt een rol zoals die van de assistent van de executive. De Java 1. 4 API heeft een ingebouwde parser. U maakt een instantie van deze parser en vervolgens registreert u uw handler met die parserinstantie. In feite vertel je de instantie om je handler terug te bellen wanneer een evenement plaatsvindt.
Alles wat te maken heeft met XML is nieuw en is nog steeds in beweging. Om deze reden is de terminologie op een aantal bijzondere manieren samen gepatched. Bij de ontwikkeling van SAX versie 2 hadden sommige techneuten een make-up-new-names festival. Wat gewoonlijk een "parser" wordt genoemd, is belichaamd in een Java-interface met de naam XMLReader. Er was een klasse met de naam org. xml. sax. Parser, maar de klas heeft verouderd (wat betekent dat je het van de onderkant van je schoen moet schrapen). Om het een beetje ingewikkelder te maken, is er nog een andere ontledingstool, javax. xml. parsers. SAXParser. U gebruikt deze SAXParser om uzelf een XMLReader te maken. Met een beetje geluk raak je snel gewend aan deze ingewikkelde terminologie. Voor nu, onthoud dat wat een "parser" wordt genoemd, meestal een exemplaar van XMLReader is.
Het register-en-callback-scenario maakt SAX event-driven. Het grappige is dat een SAX-evenement niet voelbaar is. Een SAX-evenement herinnert u niet aan een toetsaanslag of een knopklik. In SAX scant de parser een XML-document van boven naar beneden. Wanneer de parser iets interessants tegenkomt, vuurt de parser een gebeurtenis af en roept de handler. Dan is het aan de handler om iets aan deze interessante ontmoeting te doen.