viernes, 30 de mayo de 2014

Delegados en C# - Parte 3: Eventos

Tabla de Contenido

0. Introducción
1. Eventos
1.1 event
1.1.1 Declaración de un evento
1.2 Convenciones de especificación y nomenclatura en .NET Framework
2. Creación de un Evento
3. Conclusiones
4. Glosario
5. Literatura & Enlaces

0. Introducción

En esta tercera entrega de la serie de delegados en C# vamos a adentrarnos en lo concerniente a eventos. Comprenderemos su utilidad a partir del patrón de diseño publicador-subscriptores. Exploraremos la palabra clave event para la declaración de eventos a partir de tipos de delegados. (Nota: En publicaciones posteriores nos sumergiremos en asuntos más complejos acerca de eventos, al igual, desarrollaremos nuestros propios manejadores (handlers) de eventos siguiendo el modelo del Framework .NET.)

1. Eventos

Un evento es una acción o reacción que ocurre/sucede durante el curso de ejecución de un programa. Antes de existir la programación orientada eventos, los programas se diseñaban siguiendo un patrón rígido en donde el usuario controlaba la aplicación siguiendo unos pasos predeterminados. Esta rigidez no permitía el aprovechamiento de recursos de la máquina, ni tampoco la interacción con otros elementos del programa mientras se procesaba/calculaba cierto grupo de datos. Desde la aparición de las interfaces gráficas de usuario, la programación orientada a eventos posibilito la construcción de aplicaciones capaces de realizar diferentes acciones al mismo tiempo. Además, posibilitó actuar sobre elementos visuales que respondían a la interacción de los usuarios: clic sobre botones, selección de elemento de menú, inserción de texto, selección de lista de comprobación o radios.

En línea con lo anterior, se creó el patrón de diseño publicador-subscriptor [2] que básicamente con consiste en el envío de mensajes por parte de un publicador, y la recepción de los mensajes y quién los envío por parte de un subscriptor. Los lenguajes de programación modernos, como: C#, Java, Objective-C implementa este patrón para dejar que el programador pueda construir aplicaciones basadas en este patrón de diseño, y así poder construir interfaces gráficas que respondan a la interacción del usuario con los controles visuales integrales.

En particular, en C# esto se logra a través del uso de delegados y eventos. Empecemos por explorar por una construcción del lenguaje: event.

1.1 event

En C#, la palabra reservada event [3] es usada para la declaración de un evento en una clase que hace el rol de publicadora (según el patrón de diseño publicador-subscriptor).

1.1.1 declaración de un evento

Esta es la sintaxis a seguir para declarar un evento en código fuente C#:

{modificador acceso} event {delegado} {identificador};

Descripción puntual:
  • {modificador acceso}: uno de los modificadores de acceso disponibles en C#.
  • event: especificación de la palabra clave reservada.
  • {delegado}: tipo del delegado.
  • {identificador}: identificador para el evento.
En particular, podríamos utilizar los siguientes ejemplos de declaración de un evento:

public delegate void DelegadoInicio();

public event DelegadoInicio eventoInicio;

Hemos declarado un evento con identificador eventoInicio de tipo de delegado DelegadoInicio.

1.2 Convenciones de especificación y nomenclatura en el Framework .NET

En el Framework .NET existen algunas convenciones de especificación y nomenclatura para los eventos.

1.2.1 Postfijo Handler

El postfijo Handler se utiliza para el identificador de un delegado. Por ejemplo:

public delegate void EventoCambioHandler(object sender, EventArgs e);

1.2.2 Retorno y parámetros

En cuanto a la especificación, los delegados deben especificar como tipo de retorno void, y los siguientes tipos para los parámetros:
  • Object: Se refiere al objeto subscrito.
  • EventArgs: este parámetro corresponde con la información que genera el evento (e.g., en un clic de ratón, la posición (coordenadas cartesianas) en donde se pulsó; al pulsar una tecla, el valor asignado a la tecla).

2. Creación de un Evento (Ejemplo)

En este ejemplo vamos a declarar un delegado para responder a los eventos de carga de un formulario, y además usaremos los eventos asignados a controles visuales estándar de WinForms.


En la línea 8 creamos un delegado -EventoInicioHandler- con tipo de retorno void y ningún parámetro. El identificador para este delegado sigue las convenciones establecidas por el Framework .NET descritas en la sección 1.2.

Declaramos el evento eventoInicio (tipo EventoInicioHandler) en la línea 15. Para demostrar su utilidad en la línea 35 agregamos a la pila de métodos compatibles (en este caso, InicioAplicacion), y en la línea 38 invocamos los métodos asociados con este publicador de eventos.

En la línea 31 establecemos como evento de clic del botón -btnPulsar- el método compatible con la firma del delegado asociado: Clic (líneas 41 a 44).

Compilación:

  1. csc /target:exe FormularioConEventos.cs

Ejecución:

3. Conclusiones

El uso de eventos es indispensable para construir aplicaciones interactivas: facilitar al usuario la inserción de datos, procesamiento de datos, visualización de contenido. Los eventos nos da esta posibilidad. En resumen: comprendimos la definición, uso, y utilidad de los eventos a través de un ejemplo sencillo en donde creamos el delegado y el evento para mostrar un mensaje de inicio de aplicación.

4. Glosario

  • Delegado
  • Evento
  • Handler
  • Manejador

5. Literatura & Enlaces

[1]: C# 5.0 in a Nutshell by Joseph Albahari and Ben Albahari. Copyright 2012 Joseph Albahari and Ben Albahari, 978-1-449-32010-2.
[2]: Publish–subscribe pattern - Wikipedia, the free encyclopedia - http://en.wikipedia.org/wiki/Publish/subscribe
[3]: event (C# Reference) - http://msdn.microsoft.com/en-us/library/8627sbea.aspx


J

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.