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:
- etiketti — tapahtuman yksilöllinen tunniste.
- arvo - tekstiviesti tapahtuneen olemuksesta.
- kohde - tapahtumamalli, joka vastaanottaa tapahtuman.
- data - tiedot, jotka siirretään kohteesta toiseen.
Esimerkkejä
Ensimmäiset esimerkkisarjat tapahtumista saadaan itse kohteen elinkaaresta:
- esineiden luominen;
- esineen tuhoaminen.
Monimutkaisempia esimerkkejä tapahtumista esiintyy, kun objektilla on sisäisiä tiloja, jotka kuvataan vastaavalla siirtymäkaaviolla (tilasta toiseen).
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:
- ohjausobjekti, joka on tapahtumien lähde
- tarkkailija , jota kutsutaan myös tapahtumakäsittelijäksi, joka vastaanottaa tapahtumailmoituksia lähteestä
- rajapinnat (laajemmassa merkityksessä), jotka kuvaavat tapahtumien vaihdon tapaa (protokollaa).
Lisäksi malli edellyttää, että:
- jokainen tarkkailija on toteuttanut käyttöliittymän tapahtumille, jotka hän haluaa tilata
- jokaisen tarkkailijan on rekisteröidyttävä lähteeseen ilmaistakseen aikomuksensa vastaanottaa tapahtumia.
- aina kun lähde lähettää tapahtuman, se välittää sen tarkkailijoille liitäntäprotokollan avulla.
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
- ↑ Tapahtumat ovat tässä mielessä samanlaisia kuin keskeytykset .
- ↑ 1 2 Katso [1].
- ↑ 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. (määrätön)
Kirjallisuus
- Schleer S, Mellor S. Olio-analyysi: Maailman mallinnus valtioissa: Per. englannista. - Kiova: Dialektiikka, 1993. - 240 p: ill.