Událost (objektově orientované programování)

Událost v objektově orientovaném programování  je zpráva, která se objeví na různých místech spustitelného kódu , když jsou splněny určité podmínky.

Události jsou určeny k tomu, aby bylo možné předvídat, jak bude software reagovat. [jeden]

K vyřešení úlohy jsou vytvořeny obslužné rutiny událostí: jakmile se program dostane do zadaného stavu, dojde k události, odešle se zpráva a obsluha tuto zprávu zachytí. V obecném případě není obsluze předáno nic nebo je předán odkaz na objekt, který inicioval (vytvořil) zpracovávanou událost. Ve zvláštních případech jsou hodnoty některých proměnných nebo odkazy na některé další objekty předány handleru , aby zpracování této události mohlo vzít v úvahu kontext, ve kterém k události došlo.

Nejjednodušší událostí je událost, která oznamuje začátek nebo dokončení nějaké procedury . Událost v podstatě hlásí změnu stavu nějakého objektu. Události jsou nejjasněji zastoupeny v uživatelském rozhraní , kdy každá uživatelská akce generuje řetězec událostí, které jsou následně zpracovány v aplikaci .

Obecný popis

V objektově orientované analýze je obvyklé používat stavový model k popisu dynamického chování objektů. [2]

Událost  je přechod objektu z jednoho stavu do druhého. Interakce objektů se také provádí pomocí událostí: změna stavu jednoho objektu vede ke změně stavu jiného objektu a událost se ukazuje jako prostředek komunikace mezi objekty.

Podle [2] je událost  „abstrakce incidentu nebo signálu v reálném světě, který nám říká, že se něco přesunulo do nového stavu“. Dále se rozlišují čtyři aspekty události:

Příklady

První sadu příkladů událostí poskytuje životní cyklus samotného objektu:

Složitější příklady událostí nastanou, když má objekt vnitřní stavy, které jsou popsány odpovídajícím přechodovým diagramem (z jednoho stavu do druhého).

Události v .Netu

Události umožňují třídě nebo objektu upozornit jiné třídy nebo objekty, když nastanou určité situace. Třída, která odesílá (nebo vyvolává) událost, se nazývá vydavatel a třídy, které přijímají (nebo zpracovávají) událost, se nazývají odběratelé. Události jsou instance delegátů schopné ukládat, přidávat a odebírat delegáty stejného typu (obslužné rutiny událostí). Když je vyvolána událost, jsou voláni všichni delegáti, kteří byli k události přidáni. Události lze volat pouze ze třídy nebo objektu, do kterého událost patří. [3] Model událostí delegátů, používaný například při vývoji grafických rozhraní, je založen na:

Model navíc vyžaduje, aby:

V C# delegovat void Notifier ( řetězec odesílatel ); class Model { public event Notifier notifyViews ; public void Změnit () { ... notifyViews ( "Model" ); } } class Pohled1 { public Pohled1 ( Model m ) { m . notifyViews += new Notifier ( this . Update1 ); } void Update1 ( odesílatel řetězce ) { Console . WriteLine ( odesílatel + " bylo změněno během aktualizace" ); } } class View2 { public View2 ( Model m ) { m . notifyViews += new Notifier ( this . Update2 ); } void Update2 ( odesílatel řetězce ) { Console . WriteLine ( odesílatel + "bylo změněno" ); } } class Test { static void Main () { Model model = new Model (); newView1 ( model ) ; newView2 ( model ) ; model . Změnit (); // Budou volány metody Update1 i Update2. } } Ve VB.NET

Ve VB.NET jsou události deklarovány pomocí klíčového slova Event. Pokud je typ delegáta vynechán, pak jej vytvoří samotný kompilátor, který může později obsahovat odkaz na metodu implementovanou v účastníkovi.

Předplatné události můžete implementovat několika způsoby:

  • evtSample As sampleDel - Mechanismus pro registraci obsluhy události pro daný typ deklarace musí být poskytnut třídou s deklarovanou událostí. Událost je generována voláním metody na delegátovi evtSample.
  • Public Event evtSample As sampleDel – obslužnou rutinu události lze zaregistrovat pomocí příkazu AddHandler, který sváže zdrojovou událost a metodu ve třídě odběratele. Událost je implementována pomocí deklarovaného delegáta sampleDel. Událost je generována pomocí příkazu RaiseEvent.
  • Public Event evtSample – obslužná rutina události bude registrována pomocí klíčového slova WithEvents v deklaraci instance třídy a Handles v samotné deklaraci metody třídy odběratele. Událost je implementována pomocí implicitně deklarovaného delegáta. Událost je generována pomocí příkazu RaiseEvent.
Systém importu CTimer veřejné třídy Delegovat Sub SecondDel ( ByVal xintTime As Integer ) Private evtSecond As SecondDel Public Event evtMinute As SecondDel Public Event evtHour ( ByVal xHour As Integer ) public Shared lngSeconds As Long Veřejný dílčí registr ( ByVal objSecond As SecondDel ) evtSecond = evtSecond . Combine ( evtSecond , objSecond ) End Sub Public Sub OnTimer ( ) lngSeconds = lngSeconds + 1 If lngSeconds Mod 5 = 0 Then evtSecond ( lngSeconds ) ' Metoda delegáta volání End If If lngSeconds Mod 10 = 0 Then RaiseEvent evtMinute ( lngSeconds IfRise ' _ _ _ _ Potom RaiseEvent evtHour ( lngSeconds ) ' Raise event End If End Sub závěrečná třída CClock veřejné třídy Private WithEvents mobjTimer Jako deklarace objektu třídy CTimer s možností připojení k událostem Sub New () mobjTimer = New CTimer () mobjTimer . Register ( New CTimer . SecondDel ( AddressOf SecondEvent )) 'Zaregistrujte událost pomocí metody poskytované třídou AddHandler mobjTimer . evtMinute , AddressOf MinuteEvent 'Protokolování události pomocí AddHandler While ( mobjTimer . lngSeconds < 60 ) mobjTimer . Systém OnTimer () . závitování . vlákno . Spánek ( 100 ) End While End Sub Private Sub SecondEvent ( ByVal xintTime As Integer ) Konzola . WriteLine ( "Druhá událost" ) End Sub Konzola Private Sub MinuteEvent ( ByVal xintTime As Integer ) . WriteLine ( "Minutová událost" ) End Sub 'Registrace události pomocí klíčového slova Handles Private Sub mobjTimer_evtHour ( ByVal xintTime As Integer ) Handles mobjTimer . Konzole evtHour . WriteLine ( "hodinová událost" ) End Sub Public Shared Sub Main () Dim cc1 = New CClock () End Sub závěrečná třída

Viz také

Odkazy

Poznámky

  1. Události jsou v tomto smyslu podobné přerušením .
  2. 1 2 Viz [1].
  3. Mössenböck, Hanspeter Advanced C#: Variabilní počet parametrů 26. http://ssw.jku.at/Teaching/Lectures/CSharp/Tutorial/:+ Institut für Systemsoftware, Johannes Kepler Universität Linz, Fachbereich Informatik (25. března) 20 . Získáno 5. srpna 2011. Archivováno z originálu dne 20. září 2011.

Literatura

  1. Schleer S, Mellor S. Objektově orientovaná analýza: Modelování světa ve státech: Per. z angličtiny. - Kyjev: Dialektika, 1993. - 240 s: nemoc.