Event (objektorienterad programmering)

En händelse i objektorienterad programmering  är ett meddelande som inträffar på olika punkter i den körbara koden när vissa villkor är uppfyllda.

Events är avsedda att kunna förutse hur programvaran kommer att reagera. [ett]

För att lösa uppgiften skapas händelsehanterare: så snart programmet går in i det angivna tillståndet inträffar en händelse, ett meddelande skickas och hanteraren fångar upp detta meddelande. I det allmänna fallet skickas ingenting till hanteraren, eller så skickas en referens till objektet som initierade (uppstod) händelsen som behandlas. I speciella fall skickas värdena för vissa variabler eller referenser till vissa andra objekt till hanteraren så att behandlingen av denna händelse kan ta hänsyn till sammanhanget där händelsen inträffade.

Den enklaste händelsen är en händelse som tillkännager början eller slutförandet av någon procedur . En händelse rapporterar i huvudsak en förändring i tillståndet för något objekt. Händelser är tydligast representerade i användargränssnittet när varje användaråtgärd genererar en kedja av händelser som sedan bearbetas i applikationen .

Allmän beskrivning

I objektorienterad analys är det vanligt att använda tillståndsmodellen för att beskriva objekts dynamiska beteende. [2]

En händelse  är en övergång av ett objekt från ett tillstånd till ett annat. Interaktionen mellan objekt utförs också med hjälp av händelser: en förändring i ett objekts tillstånd leder till en ändring av ett annat objekts tillstånd, och händelsen visar sig vara ett kommunikationsmedel mellan objekt.

Enligt [2] är en händelse  "en abstraktion av en incident eller signal i den verkliga världen som berättar att något har flyttat till ett nytt tillstånd." Vidare särskiljs fyra aspekter av evenemanget:

Exempel

Den första uppsättningen exempel på händelser levereras av själva objektets livscykel:

Mer komplexa exempel på händelser uppstår när ett objekt har interna tillstånd som beskrivs av ett motsvarande övergångsdiagram (från ett tillstånd till ett annat).

Händelser i .Net

Händelser tillåter en klass eller objekt att meddela andra klasser eller objekt när vissa situationer uppstår. Klassen som skickar (eller tar upp) en händelse kallas en utgivare, och klasserna som tar emot (eller hanterar) en händelse kallas prenumeranter. Händelser är delegatinstanser som kan lagra, lägga till och ta bort delegater av samma typ (händelsehanterare). När en händelse tas upp, kallas alla delegater som lades till händelsen. Händelser kan endast anropas från den klass eller objekt som händelsen tillhör. [3] Delegat-event-modell, som används till exempel vid utveckling av grafiska gränssnitt, är baserad på:

Dessutom kräver modellen att:

I C# delegera void Notifier ( strängsändare ) ; class Model { public event Notifier notifyViews ; public void Ändra () { ... notifyViews ( "Modell" ); } } klass View1 { public View1 ( Modell m ) { m . notifyViews += ny anmälare ( denna . Uppdatering1 ); } void Uppdatering1 ( strängsändare ) { Konsol . _ WriteLine ( avsändare + " ändrades under uppdatering" ); } } class View2 { public View2 ( Modell m ) { m . notifyViews += ny anmälare ( denna . Update2 ); } void Update2 ( strängsändare ) { Konsol . _ WriteLine ( avsändare + "ändrades" ); } } klass Test { static void Main () { Model model = new Model (); newView1 ( modell ) ; newView2 ( modell ) ; modell . Ändra (); // Både Update1- och Update2-metoderna kommer att anropas. } } I VB.NET

I VB.NET deklareras händelser med nyckelordet Event. Om delegattypen utelämnas kommer kompilatorn själv att skapa den, som senare kan innehålla en referens till metoden implementerad i abonnenten.

Du kan implementera en händelseprenumeration på flera sätt:

  • evtSample As sampleDel - Mekanismen för att registrera en händelsehanterare för en given deklarationstyp måste tillhandahållas av klassen med den deklarerade händelsen. Händelsen genereras genom att anropa en metod på evtSample-delegaten.
  • Public Event evtSample As sampleDel - En händelsehanterare kan registreras med hjälp av AddHandler-satsen, som kommer att binda källhändelsen och metoden i abonnentklassen. Händelsen implementeras med hjälp av sampleDel deklarerade delegat. Händelsen genereras med hjälp av RaiseEvent-satsen.
  • Public Event evtSample - Händelsehanteraren kommer att registreras med hjälp av nyckelordet WithEvents i klassinstansdeklarationen och Handles i själva abonnentklassmetoddeklarationen. En händelse implementeras med hjälp av en implicit deklarerad delegat. Händelsen genereras med hjälp av RaiseEvent-satsen.
Importsystem _ Public Class CTimer Delegera Sub SecondDel ( ByVal xintTime As Integer ) Privat evtSecond As SecondDel Public Event evtMinute As SecondDel Public Event evtHour ( ByVal xHour As Integer ) public Shared lngSeconds As Long Public Sub Register ( ByVal objSecond As SecondDel ) evtSecond = evtSecond . Kombinera ( evtSecond , objSecond ) End Sub Public Sub OnTimer ( ) lngSeconds = lngSeconds + 1 If lngSeconds Mod 5 = 0 Then evtSecond ( lngSeconds ) ' Call delegate method End If If lngSeconds Mod 10 = 0 Then RaiseEvent evt.Minute ( lngSeconds ) _ _ _ _ _ Sedan RaiseEvent evtHour ( lngSeconds ) 'Raise event End If End Sub slutklass _ Public Class CClock Private WithEvents mobjTimer As CTimer 'Class-objektdeklaration, med möjlighet att ansluta till händelser Sub New () mobjTimer = New CTimer () mobjTimer . Registrera ( Ny CTimer . SecondDel ( AddressOf SecondEvent )) 'Registrera en händelse via metoden som tillhandahålls av klassen AddHandler mobjTimer . evtMinute , AddressOf MinuteEvent ' Logga en händelse med AddHandler While ( mobjTimer . lngSeconds < 60 ) mobjTimer . OnTimer () System . trådning . tråd . Sleep ( 100 ) End While End Sub Private Sub SecondEvent ( ByVal xintTime As Integer ) Console . WriteLine ( "Second's Event" ) End Sub Privat Sub MinuteEvent ( ByVal xintTime As Integer ) Console . WriteLine ( "Minutens händelse" ) End Sub 'Registrera en händelse med nyckelordet Handles Private Sub mobjTimer_evtHour ( ByVal xintTime As Integer ) Hanterar mobjTimer . evtHour Console . WriteLine ( "Timmens händelse" ) End Sub Public Shared Sub Main () Dim cc1 = New CClock () End Sub slutklass _

Se även

Länkar

Anteckningar

  1. ↑ Händelser liknar avbrott i denna mening .
  2. 1 2 Se [1].
  3. Mössenböck, Hanspeter Advanced C#: Variable Number of Parameters 26. http://ssw.jku.at/Teaching/Lectures/CSharp/Tutorial/:+ Institut für Systemsoftware, Johannes Kepler Universität Linz, Fachbereich Informatik (25 mars 2002) . Hämtad 5 augusti 2011. Arkiverad från originalet 20 september 2011.

Litteratur

  1. Schleer S, Mellor S. Objektorienterad analys: modellering av världen i stater: Per. från engelska. - Kiev: Dialektik, 1993. - 240 s: ill.