Rendezvény (objektum-orientált programozás)

Az objektumorientált programozásban az esemény olyan üzenet, amely bizonyos feltételek teljesülése esetén a végrehajtható kód  különböző pontjain jelenik meg .

Az események célja, hogy előre jelezzék, hogyan reagál a szoftver. [egy]

A feladat megoldásához eseménykezelőket készítenek: amint a program a megadott állapotba kerül, egy esemény történik, üzenetet küldenek, és a kezelő elfogja ezt az üzenetet. Általános esetben semmit nem ad át a kezelőnek, vagy a feldolgozás alatt álló eseményt kezdeményező (szpawn) objektumra való hivatkozást adják át. Speciális esetekben egyes változók értékei vagy más objektumokra való hivatkozások átadásra kerülnek a kezelőnek , hogy az esemény feldolgozása figyelembe tudja venni azt a kontextust, amelyben az esemény bekövetkezett.

A legegyszerűbb esemény egy olyan esemény, amely bejelenti valamely eljárás kezdetét vagy befejezését . Egy esemény lényegében valamely tárgy állapotának változásáról számol be. Az események a legvilágosabban a felhasználói felületen jelennek meg , amikor minden felhasználói művelet eseményláncot generál, amelyet aztán az alkalmazás feldolgoz .

Általános leírás

Az objektumorientált elemzésben az állapotmodellt szokás használni az objektumok dinamikus viselkedésének leírására. [2]

Az esemény  egy objektum átmenete egyik állapotból a másikba. Az objektumok interakciója is események segítségével valósul meg: az egyik objektum állapotának megváltozása egy másik objektum állapotának megváltozásához vezet, és az esemény az objektumok közötti kommunikáció eszközévé válik.

A [2] szerint az esemény  "egy incidens vagy jel absztrakciója a való világban, amely azt mondja nekünk, hogy valami új állapotba lépett". Továbbá az esemény négy aspektusát különböztetjük meg:

Példák

Az események első példáit maga az objektum életciklusa adja:

Az események bonyolultabb példái akkor fordulnak elő, ha egy objektum belső állapotokkal rendelkezik, amelyeket egy megfelelő átmeneti diagram ír le (egyik állapotból a másikba).

Események a .Neten

Az események lehetővé teszik egy osztály vagy objektum számára, hogy értesítsen más osztályokat vagy objektumokat bizonyos helyzetek bekövetkeztekor. Az eseményt elküldő (vagy felhozó) osztályt kiadónak, az eseményt fogadó (vagy kezelő) osztályokat pedig előfizetőknek nevezzük. Az események olyan delegált példányok, amelyek képesek tárolni, hozzáadni és eltávolítani az azonos típusú delegáltakat (eseménykezelőket). Amikor egy esemény megtörténik, az eseményhez hozzáadott összes küldött meghívásra kerül. Az események csak abból az osztályból vagy objektumból hívhatók meg, amelyhez az esemény tartozik. [3] A delegált esemény modell, amelyet például a grafikus felületek fejlesztésében használnak, a következőkön alapul:

Ezenkívül a modell megköveteli, hogy:

C# nyelven delegate void Notifier ( string sender ); class Model { nyilvános esemény Notifier notifyViews ; public void Változás () { ... notifyViews ( "Model" ); } } class View1 { public View1 ( Model m ) { m . notifyViews += new Notifier ( ez . Frissítés1 ); } void Frissítés1 ( karakterlánc küldője ) { Konzol . WriteLine ( feladó + " frissítés közben megváltozott" ); } } class View2 { public View2 ( Model m ) { m . notifyViews += new Notifier ( ez . Frissítés2 ); } void Update2 ( karakterlánc küldője ) { Konzol . WriteLine ( feladó + "módosítva" ); } } class Teszt { static void Main () { Model model = new Model (); newView1 ( modell ) ; newView2 ( modell ) ; modell . Változás (); // Az Update1 és Update2 metódusok is meghívásra kerülnek. } } A VB.NET-ben

A VB.NET-ben az eseményeket az Event kulcsszóval deklarálják. Ha a delegate típust kihagyjuk, akkor a fordító maga hozza létre, ami később tartalmazhat hivatkozást az előfizetőben megvalósított metódusra.

Az esemény-előfizetést többféleképpen is megvalósíthatja:

  • evtSample As sampleDel – Az eseménykezelő regisztrálásának mechanizmusát egy adott deklarációtípushoz a deklarált eseménnyel rendelkező osztálynak kell biztosítania. Az esemény az evtSample delegált metódusának meghívásával jön létre.
  • Nyilvános esemény evtSample mint sampleDel – Eseménykezelő regisztrálható az AddHandler utasítással, amely megköti a forráseseményt és a metódust az előfizetői osztályban. Az esemény a sampleDel deklarált delegált használatával kerül megvalósításra. Az esemény a RaiseEvent utasítás használatával jön létre.
  • Nyilvános esemény evtSample – Az eseménykezelő a WithEvents kulcsszóval lesz regisztrálva az osztálypéldány deklarációjában és a Handles kulcsszóval az előfizetői osztálymetódus deklarációjában. Egy esemény egy implicit módon deklarált delegált segítségével valósul meg. Az esemény a RaiseEvent utasítás használatával jön létre.
Rendszer importálása Nyilvános osztályú CTimer Sub SecondDel delegálása ( ByVal xintTime As Integer ) Privát evtSecond mint SecondDel Nyilvános esemény evtMinute As SecondDel Nyilvános esemény evtHour ( ByVal xHour As Integer ) nyilvános Megosztott lngSeconds As Long Nyilvános alregiszter ( 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 ) ' Delegate metódus hívása End If If lngSeconds Mod 10 = 0 Then RaiseEvent = evtMinutes 0 Vége evtMinuteslngSecond _ _ _ _ Akkor RaiseEvent evtHour ( lngSeconds ) 'Esemény emelése End If End Sub végi osztály Public Class CClock Private WithEvents mobjTimer As CTimer 'Osztály objektum deklaráció, eseményekhez való csatlakozás lehetőségével Sub New () mobjTimer = Új CTimer () mobjTimer . Regisztrálás ( New CTimer . SecondDel ( AddressOf SecondEvent )) 'Esemény regisztrálása az AddHandler mobjTimer osztály által biztosított módszerrel . evtMinute , AddressOf MinuteEvent 'Esemény naplózása az AddHandler While segítségével ( mobjTimer . lngSeconds < 60 ) mobjTimer . OnTimer () Rendszer . befűzés . szál . Alvó üzemmód ( 100 ) End While End Sub Privát Sub SecondEvent ( ByVal xintTime As Integer ) konzol . WriteLine ( "Második esemény" ) End Sub Privát Sub MinuteEvent ( ByVal xintTime As Integer ) konzol . WriteLine ( "Perc esemény" ) End Sub "Esemény regisztrálása a Handles Private Sub mobjTimer_evtHour ( ByVal xintTime As Integer ) kulcsszó használatával MobjTimer kezeli . evtHour konzol . WriteLine ( "Óra esemény" ) End Sub Nyilvános megosztott al () Dim cc1 = Új CClock ( ) Vége végi osztály

Lásd még

Linkek

Jegyzetek

  1. Az események ebben az értelemben hasonlóak a megszakításokhoz .
  2. 1 2 Lásd [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 (március 25.00) 2 . Letöltve: 2011. augusztus 5. Az eredetiből archiválva : 2011. szeptember 20.

Irodalom

  1. Schleer S, Mellor S. Objektum-orientált elemzés: A világ modellezése államokban: Per. angolról. - Kijev: Dialektika, 1993. - 240 p: ill.