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:

Ejemplos

El primer conjunto de ejemplos de eventos lo entrega el ciclo de vida del objeto mismo:

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:

Además, el modelo requiere que:

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

  1. ↑ Los eventos son similares a las interrupciones en este sentido .
  2. 1 2 Véase [1].
  3. 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.

Literatura

  1. 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.