Eveniment (programare orientată pe obiecte)

Un eveniment din programarea orientată pe obiecte  este un mesaj care apare în diferite puncte ale codului executabil atunci când sunt îndeplinite anumite condiții.

Evenimentele sunt menite să poată anticipa cum va reacționa software-ul. [unu]

Pentru a rezolva sarcina, sunt creați handleri de evenimente: de îndată ce programul intră în starea specificată, are loc un eveniment, este trimis un mesaj, iar handlerul interceptează acest mesaj. În cazul general, nu se transmite nimic către handler sau se trece o referință la obiectul care a inițiat (a generat) evenimentul în curs de procesare. În cazuri speciale, valorile unor variabile sau referințe la alte obiecte sunt transmise handlerului, astfel încât procesarea acestui eveniment să țină cont de contextul în care a avut loc evenimentul.

Cel mai simplu eveniment este un eveniment care anunță începutul sau finalizarea unei proceduri . Un eveniment, în esență, raportează o schimbare a stării unui obiect. Evenimentele sunt cel mai clar reprezentate în interfața cu utilizatorul , atunci când fiecare acțiune a utilizatorului generează un lanț de evenimente, care sunt apoi procesate în aplicație .

Descriere generală

În analiza orientată pe obiecte , se obișnuiește să se utilizeze modelul de stare pentru a descrie comportamentul dinamic al obiectelor. [2]

Un eveniment  este o tranziție a unui obiect de la o stare la alta. Interacțiunea obiectelor se realizează și cu ajutorul evenimentelor: o schimbare a stării unui obiect duce la o schimbare a stării altui obiect, iar evenimentul se dovedește a fi un mijloc de comunicare între obiecte.

Potrivit [2] , un eveniment  este „o abstractizare a unui incident sau semnal din lumea reală care ne spune că ceva s-a mutat într-o stare nouă”. În plus, se disting patru aspecte ale evenimentului:

Exemple

Primul set de exemple de evenimente este oferit de ciclul de viață al obiectului însuși:

Exemple mai complexe de evenimente apar atunci când un obiect are stări interne care sunt descrise printr-o diagramă de tranziție corespunzătoare (de la o stare la alta).

Evenimente în .Net

Evenimentele permit unei clase sau obiecte să notifice alte clase sau obiecte atunci când apar anumite situații. Clasa care trimite (sau generează) un eveniment se numește editor, iar clasele care primesc (sau gestionează) un eveniment se numesc abonați. Evenimentele sunt instanțe de delegat capabile să stocheze, să adauge și să elimine delegați de același tip (gestionare de evenimente). Când un eveniment este lansat, toți delegații care au fost adăugați la eveniment sunt chemați. Evenimentele pot fi apelate numai din clasa sau obiectul căruia îi aparține evenimentul. [3] Modelul delegat-eveniment, utilizat, de exemplu, în dezvoltarea interfețelor grafice, se bazează pe:

În plus, modelul necesită următoarele:

În C# delegat void Notifier ( string sender ); class Model { public event Notifier notifyViews ; public void Modificare () { ... notifyViews ( „Model” ); } } clasa View1 { public View1 ( Model m ) { m . notifyViews += new Notifier ( acest . Update1 ); } void Update1 ( string sender ) { Consolă . WriteLine ( expeditorul + " a fost schimbat în timpul actualizării " ); } } clasa View2 { public View2 ( Model m ) { m . notifyViews += new Notifier ( acest . Update2 ); } void Update2 ( string sender ) { Consolă . WriteLine ( expeditorul + „a fost schimbat” ); } } class Test { static void Main () { Model model = new Model (); newView1 ( model ) ; newView2 ( model ) ; model . Modificare (); // Vor fi apelate ambele metode Update1 și Update2. } } În VB.NET

În VB.NET, evenimentele sunt declarate cu cuvântul cheie Event. Dacă tipul delegat este omis, atunci compilatorul însuși îl va crea, care poate conține ulterior o referință la metoda implementată în abonat.

Puteți implementa un abonament la eveniment în mai multe moduri:

  • evtSample As sampleDel - Mecanismul de înregistrare a unui handler de evenimente pentru un anumit tip de declarație trebuie furnizat de către clasa cu evenimentul declarat. Evenimentul este generat prin apelarea unei metode pe delegatul evtSample.
  • Eveniment public evtSample Ca sampleDel - Un handler de evenimente poate fi înregistrat folosind instrucțiunea AddHandler, care va lega evenimentul sursă și metoda în clasa de abonat. Evenimentul este implementat folosind delegatul declarat sampleDel. Evenimentul este generat folosind instrucțiunea RaiseEvent.
  • Eveniment public evtSample - Managerul de evenimente va fi înregistrat folosind cuvântul cheie WithEvents în declarația instanței de clasă și Handle în declarația metodei clasei de abonat în sine. Un eveniment este implementat folosind un delegat declarat implicit. Evenimentul este generat folosind instrucțiunea RaiseEvent.
Sistem de import Clasa publică CTimer Delegat Sub SecondDel ( ByVal xintTime As Integer ) Private evtSecond As SecondDel Eveniment public evtMinute As SecondDel Eveniment public evtHour ( ByVal xHour As Integer ) public Shared lngSeconds As Long Subregistru public ( ByVal objSecond As SecondDel ) evtSecond = evtSecond . _ Combină ( evtSecond , objSecond ) End Sub Public Sub OnTimer () lngSeconds = lngSeconds + 1 Dacă lngSeconds Mod 5 = 0 Apoi evtSecond ( lngSeconds ) ' Metoda delegatului de apel End If If lngSeconds Mod 10 = 0 Atunci RaiseEvent evtMinute ( lngSeconds = 0 Mod Raise EventSecond ) Apoi RaiseEvent evtHour ( lngSeconds ) 'Raise event End If End Sub termina clasa Clasa publică CClock Private WithEvents mobjTimer Ca Declarație de obiect de clasă CTimer , cu posibilitatea de a se conecta la evenimente Sub New () mobjTimer = New CTimer () mobjTimer . Register ( New CTimer . SecondDel ( AddressOf SecondEvent )) 'Înregistrați un eveniment prin metoda oferită de clasa AddHandler mobjTimer . evtMinute , AddressOf MinuteEvent 'Înregistrarea unui eveniment cu AddHandler While ( mobjTimer . lngSeconds < 60 ) mobjTimer . Sistem OnTimer () . filetare . fir . Sleep ( 100 ) End While End Sub Private Sub SecondEvent ( ByVal xintTime As Integer ) Consola . WriteLine ( "Evenimentul celui de-al doilea" ) End Sub Private Sub MinuteEvent ( ByVal xintTime As Integer ) Consola . WriteLine ( "Evenimentul minutelor" ) End Sub „Înregistrarea unui eveniment utilizând cuvântul cheie Handles Private Sub mobjTimer_evtHour ( ByVal xintTime As Integer ) Se ocupă de mobjTimer . Consola evtHour . WriteLine ( "Evenimentul orei" ) End Sub Public Shared Sub Main () Dim cc1 = New CClock () End Sub termina clasa

Vezi și

Link -uri

Note

  1. ↑ Evenimentele sunt asemănătoare întreruperilor în acest sens .
  2. 1 2 Vezi [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 martie 2002) . Preluat la 5 august 2011. Arhivat din original la 20 septembrie 2011.

Literatură

  1. Schleer S, Mellor S. Analiză orientată pe obiecte: modelarea lumii în state: Per. din engleza. - Kiev: Dialectica, 1993. - 240 p: ill.