INSTITUTO TECNOLÓGICO SUPERIOR DE CENTLA
ING. EN SISTEMAS COMPUTACIONALES
TÓPICOS AVANZADOS DE PROGRAMACIÓN
Dr. Edgar Martín Lorca Velueta.
Alumna.- María del Carmen Pérez de la Cruz.
INTRODUCCIÓN
Los
eventos son el medio como interactúa una clase con otras o con el propio
usuario, se encargan de avisar que algo ha ocurrido y de manejarlo de una forma
o de otra. Cada vez que escribimos con nuestro teclado, que hacemos clic en un
botón o un link, que cambiamos el tamaño de un objeto, estamos generando
eventos. Es por ello que, cuando programamos, debemos tener en cuenta la
posibilidad (no siempre necesaria, pero lo será a medida que generemos clases
cada vez más complejas), tanto de manejar eventos que sólo implican a nuestra
clase como de generar nuestros propios eventos, de modo que los usuarios de
nuestras clases (en principio nosotros mismos) puedan decidir cómo reaccionará
su código ante ellos.
Un
evento en C# es el modo que tiene una clase de proporcionar notificaciones a
los clientes de la clase cuando ocurre algo digno de reseñar en un objeto. El
uso más habitual para los eventos se produce en las interfaces gráficas;
normalmente, las clases que representan controles de la interfaz disponen de
eventos que se notifican cuando el usuario hace algo con el control (por
ejemplo, hacer clic en un botón).
Los
eventos, sin embargo, no sólo se utilizan para interfaces gráficas. Los eventos
proporcionan un medio apropiado para que los objetos puedan señalizar cambios
de estado que pueden resultar útiles para los clientes de ese objeto. Los
eventos constituyen unidades importantes para crear clases que se pueden
reutilizar en diferentes programas.
Los
eventos se declaran mediante delegados. Un evento es el modo
que tiene una clase de permitir a los clientes proporcionar delegados a los
métodos para llamarlos cuando se produce el evento. Cuando ocurre el evento, se
llama a los delegados que proporcionan los clientes para el evento.
1.1 TIPO DE EVENTOS
Eventos de bajo nivel.-
Representan entradas o interacciones de bajo nivel con elementos del interfaz
gráfico (Cambio de tamaño, cambio del foco, operación con el ratón o con el
teclado).
Eventos semánticos.- Eventos
de alto nivel que encapsulan la semántica del modelo de componentes del
interfaz de usuario (Hacer una acción, un cambio de estado en un elemento,
etc.). No están relacionados con una clase específica de componente sino que pueden
aplicarse a todos los componentes que implementen un modelo semántico similar.
En Java la clase Padre de los Eventos es java.awt.Event, en el caso de C# EventArgs.
Una vez que se produce una acción, existe un “Escuchador” que permite capturar esos
eventos y ejecutar algún código asociado al objeto que contenía al evento.
Eventos de Ventana
Son los que se generan en respuesta a los cambios de una ventana un frame o un dialogo.
WINDOW_DESTROY
WINDOW_EXPOSE
WINDOW_ICONIFY
WINDOW_DEICONIFY
WINDOW_MOVED
Eventos de Teclado:
Son generados en respuesta a cuando el usuario pulsa y suelta una tecla mientras un Componente
tiene el foco de entrada.
KEY_PRESS
KEY_RELEASE
KEY_ACTION
KEY_ACTION_RELEASE
Eventos de Ratón:
Son los eventos generados por acciones sobre el ratón dentro de los límites de un Componente.
MOUSE_DOWN
MOUSE_UP
MOUSE_MOVE
MOUSE_ENTER
MOUSE_EXIT
MOUSE_DRAG
Eventos de Barras
Son los eventos generados como respuesta a la manipulación de barras de desplazamiento
(scrollbars).
SCROLL_LINE_UP
SCROLL_LINE_DOWN
SCROLL_PAGE_UP
SCROLL_PAGE_DOWN
SCROLL_ABSOLUTE
Eventos de Lista
Son los eventos generados al seleccionar elementos de una lista.
LIST_SELECT
LIST_DESELECT
Eventos Varios
Son los eventos generados en función de diversas acciones.
ACTION_EVENT
LOAD_FILE
SAVE_FILE
GOT_FOCUS
LOST_FOCUS
1.2 GENERACIÓN Y PROPAGACIÓN DE EVENTOS
El modelo de delegación de
eventos es un concepto que trabaja de la siguiente manera: Una fuente genera un
evento y lo envía a uno a más oyentes o auditores, que han estado simplemente
esperando hasta que reciben ese evento y una vez recibido lo procesan y lo
devuelven. Una fuente es un objeto que genera un evento. Esto ocurre cuando
cambia de alguna manera el estado interno de ese objeto. Las fuentes pueden
generar más de un tipo de eventos. Una fuente tiene que ir acompañada de
auditores para que estos reciban las notificaciones sobre el tipo específico de
evento, cada tipo de evento tiene su propio método de registro. Un auditor es
un objeto que es avisado cuando ocurre un evento. Tiene dos requisitos
principales. Primero tiene que ser registrado o ir acompañado por una o más
fuentes para recibir notificaciones sobre los tipos específicos de eventos.
Segundo, tiene que implementar métodos para recibir y procesar notificaciones.
Ejemplos de componentes que
pueden generar eventos:
-Button. Genera eventos de
acción (ActionEvent) cuando se presiona el botón.
-Checkbox. Genera eventos de
elementos (ItemEvent) cuando se selecciona o deselecciona un checkbox.
-Choice. Genera eventos de
elementos cuando se cambia de opción choice.
-List. Genera eventos de
acción cuando se hace doble click sobre un elemento, genera eventos de elemento
cuando se selecciona o deselecciona un elemento.
-Menu Item. Generá eventos de
acción cuando se selecciona un elemento de menú; genera eventos del elemento cuando
se selecciona o se deselecciona un elemento de un menú de opciones.
-Scrollbar. Genera eventos de
ajuste (AdjustmentEvent) cuando se manipula el scrollbar.
-Text components. Genera
eventos de texto (TextEvent) cuando el usuario introduce un carácter.
-Window. Genera eventos de
ventana (WindowEvent) cuando una ventana se activa, se cierra, se desactiva, se
minimiza, se maximiza, se abre o se sale de ella.
1.3 MÉTODOS DE CONTROL DE EVENTOS
Un controlador de eventos es un procedimiento del código que determina las acciones que se han de ejecutar cuando se produce un evento, como cuando un usuario hace clic en un botón o una cola recibe un mensaje. Cuando se produce un evento, se ejecuta el controlador o los controladores de eventos que reciben dicho evento. Los eventos se pueden asignar a varios controladores, y los métodos que controlan los distintos eventos se pueden cambiar dinámicamente. Puede utilizar el Diseñador de Windows Forms para crear controladores de eventos.
Para responder a un evento, se define un método controlador de eventos en el receptor de eventos.Este método debe coincidir con la signatura del delegado del evento que se está controlando.En el controlador de eventos, se realizan las acciones que es necesario llevar a cabo cuando se genera el evento, como recopilar los datos proporcionados por el usuario cuando este hace clic en un botón.Para recibir notificaciones cuando se genera el evento, el método controlador de eventos debe suscribirse al evento.
En el ejemplo siguiente se muestra un método de control de eventos denominado c_ThresholdReached que coincide con la signatura del delegado EventHandler. El método se suscribe al evento ThresholdReached.
En el ejemplo siguiente se muestra un método de control de eventos denominado c_ThresholdReached que coincide con la signatura del delegado EventHandler. El método se suscribe al evento ThresholdReached.
1.4 CREACIÓN DE EVENTOS
Para definir un evento, se utiliza la palabra clave event (en C#) o
Event (en Visual Basic) en la signatura de la clase de eventos y se especifica
el tipo de delegado para el evento. Los delegados se describen en la sección
siguiente.
Normalmente, para generar un evento, se agrega un método marcado como
protected y virtual (en C#) o Protected y Overridable (en Visual Basic).Asigne
a este método el nombre OnEventName; por ejemplo, OnDataReceived.El método debe
tomar un parámetro que especifica un objeto de datos de evento.Este método se
proporciona para permitir que las clases derivadas reemplacen la lógica para
generar el evento.Una clase derivada siempre debería llamar al método
OnEventName de la clase base para asegurarse de que los delegados registrados
reciben el evento.
En el ejemplo siguiente se muestra cómo declarar un evento denominado
ThresholdReached.El evento está asociado al delegado EventHandler y se genera
en un método denominado OnThresholdReached.
class Counter
{
public event EventHandler
ThresholdReached;
protected virtual void
OnThresholdReached(EventArgs e)
{
EventHandler handler =
ThresholdReached;
if (handler != null)
{
handler(this, e);
}
}
// provide remaining
implementation for the class
}
Los datos asociados a un evento se pueden proporcionar a través de una
clase de datos de evento..NET Framework proporciona muchas clases de datos de
evento que puede utilizar en las aplicaciones. Por ejemplo, la clase
SerialDataReceivedEventArgs es la clase de datos del evento
SerialPort.DataReceived. En .NET Framework se sigue un patrón de nombres que
consiste en finalizar todas las clases de datos de evento con EventArgs.
Determine qué clase de datos de eventos se asocia a un evento examinando el
delegado para ese evento. Por ejemplo, el delegado
SerialDataReceivedEventHandler incluye entre sus parámetros la clase
SerialDataReceivedEventArgs.
La clase EventArgs es el tipo base para todas las clases de datos de
evento. EventArgs también es la clase que se utiliza cuando un evento no tiene
datos asociada a él. Cuando cree un evento que solo sirva para notificar a
otras clases que algo ha sucedido y que no necesite pasar ningún dato, incluya la
clase EventArgs como segundo parámetro del delegado.Puede pasar el valor
EventArgs.Empty cuando no se proporciona ningún dato.El delegado EventHandler
incluye la clase EventArgs como parámetro.
Si desea crear una clase de datos de evento personalizada, cree una
clase que se derive de EventArgs y, a continuación, especifique los miembros
que sean necesarios para pasar los datos relacionados con el
evento.Normalmente, debe usar el mismo patrón de asignación de nombres que se
usa en .NET Framework y finalizar el nombre de la clase de los datos de evento
con EventArgs.
CONCLUSIÓN
Para generar eventos de forma satisfactoria a partir del código implementado, tenga en cuenta las siguientes reglas:
- Cree una única instancia del objeto creador de eventos en proceso (IEC) de Visual Studio Analyzer mediante la interfaz ISystemDebugEventFire(en C++) o el objeto ISystemDebugEventFireAuto (en una aplicación administrada, como Visual Basic o C#).
- Utilice el método BeginSession para identificar de forma única esta sesión de un origen de evento ante el concentrador de eventos locales (LEC).
- Si la generación del evento es costosa, antes de generarlo, utilice el método IsActive para averiguar si el IEC está activo.
- Genere los eventos.
- Notifique a Visual Studio Analyzer que esta instancia de un origen de evento ha terminado de generar eventos.
- Libere la instancia única del objeto IEC
REFERENCIAS
- Cinthia Carrasco. (2012). Estructura de Datos. Sitio web: http:// www.aliensoft.com.ve.
- Felipe E. Muñiz. Estructura de Datos.
- Miguel Angel Zambrano. Estructura de Datos.
- R.Pressman. Ingeniería del software, Un enfoque práctico. Quinta edición, 2001.