Evento (programación orientada a objetos)
Un evento en la programación orientada a objetos es un mensaje que ocurre en varios puntos del código ejecutable cuando se cumplen ciertas condiciones.
Los eventos están destinados a poder anticipar cómo reaccionará el software. [una]
Para resolver la tarea, se crean controladores de eventos: tan pronto como el programa ingresa al estado especificado, ocurre un evento, se envía un mensaje y el controlador intercepta este mensaje. En el caso general, no se pasa nada al controlador, o se pasa una referencia al objeto que inició (generado) el evento que se está procesando. En casos especiales, los valores de algunas variables o referencias a algunos otros objetos se pasan al controlador para que el procesamiento de este evento pueda tener en cuenta el contexto en el que ocurrió el evento.
El evento más simple es un evento que anuncia el comienzo o la finalización de algún procedimiento . Un evento, en esencia, informa un cambio en el estado de algún objeto. Los eventos se representan más claramente en la interfaz de usuario , cuando cada acción del usuario genera una cadena de eventos, que luego se procesan en la aplicación .
Descripción general
En el análisis orientado a objetos , se acostumbra utilizar el modelo de estado para describir el comportamiento dinámico de los objetos. [2]
Un evento es una transición de un objeto de un estado a otro. La interacción de los objetos también se lleva a cabo con la ayuda de eventos: un cambio en el estado de un objeto conduce a un cambio en el estado de otro objeto, y el evento resulta ser un medio de comunicación entre los objetos.
Según [2] , un evento es "una abstracción de un incidente o señal en el mundo real que nos dice que algo se ha movido a un nuevo estado". Además, se distinguen cuatro aspectos del evento:
- etiqueta — identificador único del evento.
- valor : un mensaje de texto sobre la esencia de lo que sucedió.
- destino : el modelo de evento que recibe el evento.
- datos : datos que se transfieren de un objeto a otro.
Ejemplos
El primer conjunto de ejemplos de eventos lo entrega el ciclo de vida del objeto mismo:
- creación de objetos;
- destrucción de objetos.
Ejemplos más complejos de eventos ocurren cuando un objeto tiene estados internos que se describen mediante un diagrama de transición correspondiente (de un estado a otro).
Eventos en .Net
Los eventos permiten que una clase u objeto notifique a otras clases u objetos cuando ocurren ciertas situaciones. La clase que envía (o genera) un evento se denomina editor, y las clases que reciben (o manejan) un evento se denominan suscriptores. Los eventos son instancias de delegado capaces de almacenar, agregar y eliminar delegados del mismo tipo (controladores de eventos). Cuando se genera un evento, se llama a todos los delegados que se agregaron al evento. Los eventos solo se pueden llamar desde la clase u objeto al que pertenece el evento. [3]
El modelo de evento delegado, utilizado, por ejemplo, en el desarrollo de interfaces gráficas, se basa en:
- el objeto de control que es la fuente de los eventos
- un observador , también llamado controlador de eventos, que recibe notificaciones de eventos de la fuente
- interfaces (en un sentido más amplio) que describen la forma (protocolo) del intercambio de eventos.
Además, el modelo requiere que:
- cada observador ha implementado una interfaz para los eventos a los que quiere suscribirse
- cada observador debe registrarse con la fuente para expresar su intención de recibir eventos.
- cada vez que la fuente emite un evento, lo pasa a los observadores utilizando el protocolo de interfaz.
En C#
delegado void Notificador ( cadena remitente );
modelo de clase { notificador de
eventos públicos notificaciones de vistas ; public void Cambiar () { ... notificar Vistas ( "Modelo" ); } }
class View1 {
public View1 ( Modelo m ) {
m . notificarViews += new Notifier ( this . Update1 );
}
void Update1 ( cadena de remitente ) {
Console . WriteLine ( el remitente + "se cambió durante la actualización" );
}
}
class View2 {
public View2 ( Modelo m ) {
m . notificarViews += new Notifier ( this . Update2 );
}
void Update2 ( cadena de remitente ) {
Console . WriteLine ( remitente + "fue cambiado" );
}
}
prueba de clase {
static void Main () {
modelo modelo = nuevo modelo ();
newView1 ( modelo ) ; newView2 ( modelo ) ; modelo _ Cambiar (); // Se llamarán los métodos Update1 y Update2. } }
En VB.NET
En VB.NET, los eventos se declaran con la palabra clave Event. Si se omite el tipo de delegado, entonces el compilador mismo lo creará, que luego puede contener una referencia al método implementado en el suscriptor.
Puede implementar una suscripción a un evento de varias formas:
- evtSample As sampleDel: la clase con el evento declarado debe proporcionar el mecanismo para registrar un controlador de eventos para un tipo de declaración determinado. El evento se genera llamando a un método en el delegado evtSample.
- Evento público evtSample As sampleDel: se puede registrar un controlador de eventos mediante la declaración AddHandler, que vinculará el evento y el método de origen en la clase de suscriptor. El evento se implementa mediante el delegado declarado sampleDel. El evento se genera mediante la instrucción RaiseEvent.
- Evento público evtSample: el controlador de eventos se registrará mediante la palabra clave WithEvents en la declaración de la instancia de la clase y Handles en la declaración del método de la clase del suscriptor. Un evento se implementa utilizando un delegado declarado implícitamente. El evento se genera mediante la instrucción RaiseEvent.
Sistema de importación
Temporizador de clase pública
Delegado Sub SecondDel ( ByVal xintTime As Integer )
Private evtSecond As SecondDel
Evento público evtMinute As SecondDel
Evento público evtHour ( ByVal xHour As Integer ) public Shared lngSeconds As Long
Subregistro público ( ByVal objSecond As SecondDel ) evtSecond = evtSecond . _ Combinar ( evtSecond , objSecond ) End Sub
Public Sub OnTimer ()
lngSeconds = lngSeconds + 1
If lngSeconds Mod 5 = 0 Then
evtSecond ( lngSeconds ) 'Llamar al método delegado
End If
If lngSeconds Mod 10 = 0 Then
RaiseEvent evtMinute ( lngSeconds ) 'Raise Event
End If
If lngSeconds Mod 30 = 0 Entonces
RaiseEvent evtHour ( lngSeconds ) 'Elevar evento
End If
End Sub
clase final
CClock de clase pública
Private WithEvents mobjTimer As CTimer 'Declaración de objeto de clase, con la capacidad de conectarse a eventos
Sub Nuevo ()
mobjTimer = Nuevo CTimer ()
mobjTimer . Register ( New CTimer . SecondDel ( AddressOf SecondEvent )) 'Registra un evento a través del método proporcionado por la clase
AddHandler mobjTimer . evtMinute , AddressOf MinuteEvent 'Registrando un evento con AddHandler
While ( mobjTimer . lngSeconds < 60 )
mobjTimer . Sistema OnTimer ()
. enhebrar _ hilo _ Dormir ( 100 ) Finalizar mientras Finalizar sub
Private Sub SecondEvent ( ByVal xintTime As Integer )
Consola . WriteLine ( "Evento del segundo" )
End Sub
Private Sub MinuteEvent ( ByVal xintTime As Integer )
Consola . WriteLine ( "Evento del minuto" )
End Sub
'Registrando un evento usando la palabra clave Maneja
Private Sub mobjTimer_evtHour ( ByVal xintTime As Integer ) Maneja mobjTimer . Consola evtHour
. WriteLine ( "Evento de la hora" ) End Sub
Public Shared Sub Main ()
Dim cc1 = New CClock ()
End Sub
clase final
Véase también
Enlaces
Notas
- ↑ Los eventos son similares a las interrupciones en este sentido .
- ↑ 1 2 Véase [1].
- ↑ Mössenböck, Hanspeter Advanced C#: número variable de parámetros 26. http://ssw.jku.at/Teaching/Lectures/CSharp/Tutorial/:+ Institut für Systemsoftware, Johannes Kepler Universität Linz, Fachbereich Informatik (25 de marzo de 2002) . Consultado el 5 de agosto de 2011. Archivado desde el original el 20 de septiembre de 2011. (indefinido)
Literatura
- Schleer S, Mellor S. Análisis orientado a objetos: Modelado del mundo en estados: Per. De inglés. - Kyiv: Dialéctica, 1993. - 240 p: il.