Event (objektorienteret programmering)

En hændelse i objektorienteret programmering  er en meddelelse, der opstår på forskellige punkter i den eksekverbare kode, når visse betingelser er opfyldt.

Begivenheder er beregnet til at kunne forudse, hvordan softwaren vil reagere. [en]

For at løse opgaven oprettes hændelseshandlere: så snart programmet går ind i den specificerede tilstand, sker der en hændelse, en meddelelse sendes, og behandleren opsnapper denne meddelelse. I det generelle tilfælde videregives intet til handleren, eller en reference til det objekt, der initierede (affødte) hændelsen, der behandles, videregives. I særlige tilfælde sendes værdierne af nogle variabler eller referencer til nogle andre objekter til behandleren , så behandlingen af ​​denne hændelse kan tage højde for den kontekst, hvor hændelsen fandt sted.

Den enkleste begivenhed er en begivenhed, der annoncerer begyndelsen eller afslutningen af ​​en eller anden procedure . En hændelse rapporterer i bund og grund en ændring i et objekts tilstand. Hændelser er tydeligst repræsenteret i brugergrænsefladen , når hver brugerhandling genererer en kæde af hændelser, som derefter behandles i applikationen .

Generel beskrivelse

I objektorienteret analyse er det sædvanligt at bruge tilstandsmodellen til at beskrive objekters dynamiske adfærd. [2]

En begivenhed  er en overgang af et objekt fra en tilstand til en anden. Interaktionen mellem objekter udføres også ved hjælp af begivenheder: en ændring i tilstanden af ​​et objekt fører til en ændring i tilstanden af ​​et andet objekt, og begivenheden viser sig at være et middel til kommunikation mellem objekter.

Ifølge [2] er en begivenhed  "en abstraktion af en hændelse eller et signal i den virkelige verden, der fortæller os, at noget er flyttet til en ny tilstand." Yderligere skelnes der mellem fire aspekter af begivenheden:

Eksempler

Det første sæt eksempler på hændelser leveres af selve objektets livscyklus:

Mere komplekse eksempler på hændelser opstår, når et objekt har interne tilstande, der er beskrevet af et tilsvarende overgangsdiagram (fra en tilstand til en anden).

Begivenheder i .Net

Hændelser tillader en klasse eller et objekt at underrette andre klasser eller objekter, når visse situationer opstår. Klassen, der sender (eller rejser) en begivenhed, kaldes en udgiver, og de klasser, der modtager (eller håndterer) en begivenhed, kaldes abonnenter. Hændelser er delegerede forekomster, der er i stand til at gemme, tilføje og fjerne delegerede af samme type (hændelseshandlere). Når en begivenhed rejses, kaldes alle delegerede, der blev føjet til begivenheden. Hændelser kan kun kaldes fra den klasse eller det objekt, som hændelsen tilhører. [3] Delegeret-begivenhedsmodel, der f.eks. bruges i udviklingen af ​​grafiske grænseflader, er baseret på:

Derudover kræver modellen, at:

I C# delegere void Notifier ( strengsender ) ; klasse Model { public event Notifier notifyViews ; public void Change () { ... notifyViews ( "Model" ); } } klasse View1 { public View1 ( Model m ) { m . notifyViews += ny notifier ( denne . Update1 ); } void Update1 ( strengsender ) { Konsol . _ WriteLine ( afsender + " blev ændret under opdatering" ); } } klasse View2 { public View2 ( Model m ) { m . notifyViews += ny notifier ( denne . Update2 ); } void Update2 ( strengsender ) { Konsol . _ WriteLine ( afsender + "blev ændret" ); } } klasse Test { static void Main () { Model model = new Model (); newView1 ( model ) ; newView2 ( model ) ; model . Skift (); // Både Update1 og Update2 metoder vil blive kaldt. } } I VB.NET

I VB.NET erklæres begivenheder med begivenhedsnøgleordet. Hvis delegattypen udelades, så vil compileren selv oprette den, som senere kan indeholde en reference til metoden implementeret i abonnenten.

Du kan implementere et begivenhedsabonnement på flere måder:

  • evtSample As sampleDel - Mekanismen til registrering af en hændelseshandler for en given deklarationstype skal leveres af klassen med den erklærede hændelse. Hændelsen genereres ved at kalde en metode på evtSample delegaten.
  • Public Event evtSample As sampleDel - En hændelseshandler kan registreres ved hjælp af AddHandler-sætningen, som vil binde kildehændelsen og metoden i abonnentklassen. Hændelsen implementeres ved hjælp af den sampleDel-erklærede delegerede. Hændelsen genereres ved hjælp af RaiseEvent-sætningen.
  • Public Event evtSample - Hændelseshandleren vil blive registreret ved hjælp af WithEvents nøgleordet i klasseinstanserklæringen og Handles i selve abonnentklassemetodedeklarationen. En begivenhed implementeres ved hjælp af en implicit erklæret delegeret. Hændelsen genereres ved hjælp af RaiseEvent-sætningen.
Import system Public Class CTimer Delegeret Sub SecondDel ( ByVal xintTime As Integer ) Privat evt . Second As SecondDel Offentlig begivenhed evtMinute As SecondDel Offentlig begivenhed evtHour ( ByVal xHour As Integer ) public Shared lngSeconds As Long Offentligt underregister ( ByVal objSecond As SecondDel ) evtSecond = evtSecond . _ Kombiner ( evtSecond , objSecond ) End Sub Offentlig Sub OnTimer ( ) lngSeconds = lngSeconds + 1 If lngSeconds Mod 5 = 0 Then evt . _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ RaiseEvent evtHour ( lngSeconds ) 'Raise event End If End Sub slutklasse _ Offentlig klasse CClock Private WithEvents mobjTimer Som CTimer 'Class objekterklæring, med mulighed for at oprette forbindelse til begivenheder Sub New () mobjTimer = New CTimer () mobjTimer . Registrer ( Ny CTimer . SecondDel ( AddressOf SecondEvent )) 'Tilmeld en begivenhed via metoden leveret af AddHandler mobjTimer -klassen . evtMinute , AddressOf MinuteEvent ' Log af en begivenhed 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 Private Sub MinuteEvent ( ByVal xintTime As Integer ) Console . WriteLine ( "Minutes begivenhed" ) End Sub 'Registrering af en begivenhed ved hjælp af nøgleordet Handles Private Sub mobjTimer_evtHour ( ByVal xintTime As Integer ) Håndterer mobjTimer . evtHour Console . WriteLine ( "Timens begivenhed" ) End Sub Offentlig delt underhoved ( ) Dim cc1 = Ny CClock ( ) Slutunder slutklasse _

Se også

Links

Noter

  1. ↑ Begivenheder ligner interrupts i denne forstand .
  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. marts 2002) . Hentet 5. august 2011. Arkiveret fra originalen 20. september 2011.

Litteratur

  1. Schleer S, Mellor S. Objektorienteret analyse: modellering af verden i stater: Pr. fra engelsk. - Kiev: Dialektik, 1993. - 240 s: ill.