sábado, 20 de febrero de 2016



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.

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.

No hay comentarios:

Publicar un comentario