Tapahtuma (olioohjattu ohjelmointi)

Olio-ohjelmoinnin tapahtuma on  sanoma, joka esiintyy suoritettavan koodin eri kohdissa, kun tietyt ehdot täyttyvät.

Tapahtumat on tarkoitettu ennakoimaan, miten ohjelmisto reagoi. [yksi]

Tehtävän ratkaisemiseksi luodaan tapahtumakäsittelijät: heti kun ohjelma siirtyy määritettyyn tilaan, tapahtuu tapahtuma, lähetetään viesti ja käsittelijä sieppaa tämän viestin. Yleisessä tapauksessa käsittelijälle ei välitetä mitään tai välitetään viittaus objektiin, joka aloitti (syntyi) käsiteltävän tapahtuman. Erikoistapauksissa joidenkin muuttujien arvot tai viittaukset joihinkin muihin objekteihin välitetään käsittelijälle , jotta tämän tapahtuman käsittelyssä voidaan ottaa huomioon konteksti, jossa tapahtuma tapahtui.

Yksinkertaisin tapahtuma on tapahtuma, joka ilmoittaa jonkin toimenpiteen alkamisesta tai päättymisestä . Tapahtuma pohjimmiltaan raportoi jonkin kohteen tilan muutoksesta. Tapahtumat näkyvät selkeimmin käyttöliittymässä , kun jokainen käyttäjän toiminta synnyttää tapahtumaketjun, joka sitten käsitellään sovelluksessa .

Yleinen kuvaus

Olio -analyysissä on tapana käyttää tilamallia kuvaamaan objektien dynaamista käyttäytymistä. [2]

Tapahtuma  on objektin siirtymä tilasta toiseen. Esineiden vuorovaikutus toteutetaan myös tapahtumien avulla: yhden kohteen tilan muutos johtaa toisen kohteen tilan muutokseen, ja tapahtuma osoittautuu kohteiden väliseksi kommunikaatiovälineeksi.

[2] mukaan tapahtuma on  "abstraktio tapahtumasta tai signaalista todellisessa maailmassa, joka kertoo meille, että jokin on siirtynyt uuteen tilaan." Lisäksi tapahtumasta erotetaan neljä näkökohtaa:

Esimerkkejä

Ensimmäiset esimerkkisarjat tapahtumista saadaan itse kohteen elinkaaresta:

Monimutkaisempia esimerkkejä tapahtumista esiintyy, kun objektilla on sisäisiä tiloja, jotka kuvataan vastaavalla siirtymäkaaviolla (tilasta toiseen).

Tapahtumat .Netissä

Tapahtumat sallivat luokan tai objektin ilmoittaa muille luokille tai objekteille tietyissä tilanteissa. Luokkaa, joka lähettää (tai herättää) tapahtuman, kutsutaan julkaisijaksi, ja luokkia, jotka vastaanottavat (tai käsittelevät) tapahtuman, kutsutaan tilaajiksi. Tapahtumat ovat delegaatteja, jotka pystyvät tallentamaan, lisäämään ja poistamaan samantyyppisiä delegaatteja (tapahtumakäsittelijöitä). Kun tapahtuma nostetaan, kaikki tapahtumaan lisätyt edustajat kutsutaan. Tapahtumia voidaan kutsua vain luokasta tai objektista, johon tapahtuma kuuluu. [3] Edustajatapahtumamalli, jota käytetään esimerkiksi graafisten käyttöliittymien kehittämisessä, perustuu:

Lisäksi malli edellyttää, että:

C# :ssa delegate void Notifier ( merkkijonon lähettäjä ); class Malli { julkinen tapahtuma Ilmoittaja notifyViews ; public void Muuta () { ... notifyViews ( "Malli" ); } } class View1 { public View1 ( Malli m ) { m . notifyViews += new Notifier ( tämä . Päivitys1 ); } void Update1 ( merkkijonon lähettäjä ) { Konsoli . WriteLine ( lähettäjä + " muutettiin päivityksen aikana" ); } } class View2 { public View2 ( Malli m ) { m . notifyViews += new Notifier ( tämä . Päivitys2 ); } void Update2 ( merkkijonon lähettäjä ) { Konsoli . WriteLine ( lähettäjä + "vaihdettu" ); } } class Test { static void Main () { Mallimalli = uusi Malli ( ); newView1 ( malli ) ; newView2 ( malli ) ; malli . Muuta (); // Sekä Update1- että Update2-menetelmiä kutsutaan. } } VB.NETissä

VB.NET:ssä tapahtumat ilmoitetaan Tapahtuma-avainsanalla. Jos delegaatin tyyppi jätetään pois, kääntäjä itse luo sen, joka voi myöhemmin sisältää viittauksen tilaajassa toteutettuun menetelmään.

Voit toteuttaa tapahtumatilauksen useilla tavoilla:

  • evtSample As sampleDel – Ilmoitetun tapahtuman sisältävän luokan on tarjottava tapahtumakäsittelijän rekisteröintimekanismi tietylle ilmoitustyypille. Tapahtuma luodaan kutsumalla menetelmä evtSample-delegaatissa.
  • Julkinen tapahtuma evtSample As sampleDel - Tapahtumakäsittelijä voidaan rekisteröidä AddHandler-käskyllä, joka sitoo lähdetapahtuman ja -menetelmän tilaajaluokassa. Tapahtuma toteutetaan käyttämällä sampleDel-ilmoitettua delegaattia. Tapahtuma luodaan käyttämällä RaiseEvent-käskyä.
  • Julkinen tapahtuma evtSample – Tapahtumakäsittelijä rekisteröidään käyttämällä WithEvents-avainsanaa luokan ilmentymän ilmoituksessa ja Handles-avainsanaa itse tilaajaluokan menetelmäilmoituksessa. Tapahtuma toteutetaan käyttämällä implisiittisesti ilmoitettua delegaattia. Tapahtuma luodaan käyttämällä RaiseEvent-käskyä.
Tuo järjestelmä Julkinen luokan CTimer Delegoi Sub SecondDel ( ByVal xintTime As Integer ) Yksityinen evtSecond As SecondDel Julkinen tapahtuma evtMinute As SecondDel Julkinen tapahtuma evtHour ( ByVal xHour As Integer ) julkinen Jaettu lngSeconds As Long Julkinen alirekisteri ( ByVal objSecond As SecondDel ) evtSecond = evtSecond . _ Yhdistä ( evtSecond , objSecond ) End Sub Julkinen aliaika _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Sitten RaiseEvent evtHour ( lngSeconds ) 'Nosta tapahtuma End If End Sub loppuluokka _ Julkinen luokan kello Yksityinen WithEvents mobjTimer CTimer ' luokan objektin ilmoitus, mahdollisuus muodostaa yhteys tapahtumiin Sub New () mobjTimer = Uusi CTimer () mobjTimer . Register ( New CTimer . SecondDel ( AddressOf SecondEvent )) 'Rekisteröi tapahtuma AddHandler mobjTimer -luokan tarjoamalla menetelmällä . evtMinute , AddressOf MinuteEvent 'Tapahtuman kirjaaminen AddHandler While - ohjelmalla ( mobjTimer . lngSeconds < 60 ) mobjTimer . OnTimer () Järjestelmä . langoitus . lanka . Sleep ( 100 ) End While End Sub Yksityinen Sub SecondEvent ( ByVal xintTime As Integer ) -konsoli . WriteLine ( "Second's Event" ) End Sub Yksityinen Sub MinuteEvent ( ByVal xintTime As Integer ) - konsoli . WriteLine ( "Minuutin tapahtuma" ) End Sub 'Tapahtuman rekisteröinti avainsanalla Handles Private Sub mobjTimer_evtHour ( ByVal xintTime As Integer ) Käsittelee mobjTimer . evtHour- konsoli . WriteLine ( "Tunnin tapahtuma" ) End Sub Julkinen jaettu alapää ( ) Dim cc1 = Uusi CClock () End Sub loppuluokka _

Katso myös

Linkit

Muistiinpanot

  1. Tapahtumat ovat tässä mielessä samanlaisia ​​kuin keskeytykset .
  2. 1 2 Katso [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 (Maaliskuu 25, 00) 2 . Haettu 5. elokuuta 2011. Arkistoitu alkuperäisestä 20. syyskuuta 2011.

Kirjallisuus

  1. Schleer S, Mellor S. Olio-analyysi: Maailman mallinnus valtioissa: Per. englannista. - Kiova: Dialektiikka, 1993. - 240 p: ill.