Programación impulsada por eventos

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 13 de febrero de 2016; las comprobaciones requieren 15 ediciones .

La programación dirigida por eventos ( eng.  programación dirigida por eventos ; en adelante SOP) es un paradigma de programación en el que la ejecución del programa está determinada por eventos  : acciones del usuario (teclado, mouse, pantalla táctil), mensajes de otros programas y subprocesos, eventos del sistema operativo ( por ejemplo, la recepción de un paquete de red ).

SOP también se puede definir como una forma de construir un programa de computadora en el que el bucle principal de la aplicación se asigna explícitamente en el código (generalmente en la función principal del programa) , cuyo cuerpo consta de dos partes: obtención de eventos y procesamiento de eventos. .

Como regla general, en tareas reales, es inaceptable ejecutar un controlador de eventos durante mucho tiempo, ya que en este caso el programa no puede responder a otros eventos. En este sentido, cuando se escriben programas dirigidos por eventos, se suele utilizar la programación automática .

Alcance

La programación dirigida por eventos se usa generalmente en tres casos:

  1. al construir interfaces de usuario (incluidas las gráficas );
  2. al crear aplicaciones de servidor en caso de que, por una razón u otra, la generación de procesos de servicio no sea deseable ;
  3. al programar juegos en los que se controlan muchos objetos.

Aplicaciones en aplicaciones de servidor

La programación basada en eventos se utiliza en aplicaciones de servidor para resolver el problema de escalar a 10 000 conexiones simultáneas o más.

En los servidores construidos según el modelo "un hilo por conexión", surgen problemas de escalabilidad por las siguientes razones:

Una premisa filosófica para abandonar el modelo de transmisión de servidores puede ser la declaración de Alan Cox : “Una computadora es una máquina de estado . La programación de flujo es para aquellos que no saben programar máquinas de estado” [1] .

La aplicación de servidor en la programación orientada a eventos se implementa en una llamada al sistema que recibe eventos simultáneamente desde muchos descriptores (multiplexación). El manejo de eventos utiliza exclusivamente operaciones de E/S sin bloqueo para que ningún identificador interfiera con el procesamiento de eventos de otros identificadores.

Multiplexación

Las siguientes herramientas del sistema operativo se pueden utilizar para multiplexar conexiones:

Ejemplos de implementación

Aplicaciones en aplicaciones de escritorio

En los lenguajes de programación modernos, los eventos y los controladores de eventos son fundamentales para la implementación de una interfaz gráfica de usuario. Considere, por ejemplo, la interacción de un programa con eventos del mouse. Al presionar el botón derecho del mouse, se activa una interrupción del sistema que ejecuta un procedimiento específico dentro del sistema operativo. Este procedimiento busca la ventana debajo del cursor del mouse. Si se encuentra una ventana, este evento se envía a la cola de mensajes de la ventana. Además, según el tipo de ventana, se pueden generar eventos adicionales. Por ejemplo, si una ventana es un botón (en Windows, todos los elementos gráficos son ventanas), se genera adicionalmente un evento de clic de botón. La diferencia del último evento es que es más abstracto, es decir, no contiene las coordenadas del cursor, sino que simplemente dice que se hizo clic en el botón.

Un controlador de eventos podría verse así (usando C# como ejemplo):

privado void button1_Click ( remitente del objeto , EventArgs e ) { MessageBox . Mostrar ( "Se presionó el botón" ); }

Aquí, el controlador de eventos es un procedimiento al que se pasa el parámetro del remitente, que normalmente contiene un puntero al origen del evento. Esto le permite usar el mismo procedimiento para manejar eventos de múltiples botones, distinguiéndolos por este parámetro.

Lenguajes de programación

En C# , los eventos se implementan como un elemento de lenguaje y son miembros de clases. El mecanismo de eventos aquí implementa el patrón de diseño de publicador/suscriptor . Ejemplo de declaración de evento:

public class MyClass { public event EventHandler MyEvent ; }

Donde EventHandler  es un delegado que especifica el tipo de procedimiento del controlador de eventos. La suscripción a un evento se realiza de la siguiente manera:

miclase _ MiEvento += nuevo EventHandler ( Manejador );

Aquí myClass  es una instancia de la clase MyClass , Handler  es un procedimiento de controlador. Un evento puede tener un número ilimitado de controladores. Cuando se agrega un controlador de eventos, se agrega a una pila especial y, cuando ocurre un evento, se llama a todos los controladores en su orden en la pila. La cancelación de la suscripción a un evento, es decir, la eliminación de un controlador, se realiza de manera similar, pero utilizando el operador "-=".

Diferentes lenguajes de programación admiten SOP en diversos grados. Los siguientes idiomas tienen el soporte más completo para eventos (lista no exhaustiva):

Otros lenguajes, en su mayor parte, admiten eventos como manejo de excepciones .

Herramientas y bibliotecas

  • Node.js , un marco de E/S controlado por eventos basado en el motor JavaScript V8
  • Cocoa & Objective-C , un lenguaje de programación reflexivo orientado a objetos que agrega mensajes de estilo Smalltalk al lenguaje C.
  • Fácil
  • Gui4Cli [4] , un lenguaje de programación basado en eventos para Windows
  • libsigc++
  • evento libre
  • POCO
  • libasync , parte de las bibliotecas sfs y sfslite [5] , una biblioteca de eventos eficiente para C++
  • Entorno de objetos Perl
  • AnyEvent, EV - Módulos Perl para programación basada en eventos
  • PRADO, una herramienta de componentes basada en eventos para la programación web en PHP 5
  • tcl
  • retorcido , pitón
  • Qt , una biblioteca de widgets C ++ multiplataforma basada en el modelo de gestión de eventos. Hay una versión más pequeña llamada Qt/Console que elimina el código de soporte de widgets y es un marco de trabajo controlado por eventos que también incluye algunas características adicionales como redes multiplataforma, subprocesos múltiples y manipulación de XML .
  • QP  es una familia de entornos abiertos basados ​​en eventos para sistemas integrados en tiempo real [6]
  • Simple Unix Events, también conocido como SUE [7] , una biblioteca sencilla orientada a objetos para crear programas Unix orientados a eventos en C++ .

Véase también

Fuentes en inglés

Materiales en ruso

Enlaces

  1. Archivo Linux-Kernel: Re: ¿Cita de Alan Cox? (era: Re: contabilidad (enlace no disponible) . Consultado el 29 de abril de 2008. Archivado desde el original el 8 de febrero de 2008. 
  2. N. N. Nepeyvoda. 13. Clase magistral: Programación de eventos // Estilos y métodos de programación. curso de conferencias. guia de estudio - M. : Universidad de Internet de las Tecnologías de la Información, 2005. - S. 213-222. — 316 pág. — ISBN 5-9556-0023-X . Archivado el 28 de enero de 2012 en Wayback Machine .
  3. SV Zykov. Conferencias №15 y №16 // Introducción a la teoría de la programación. Enfoque Orientado a Objetos . — Universidad de Internet de las Tecnologías de la Información. Archivado el 13 de abril de 2011 en Wayback Machine .
  4. Página de inicio de Gui4Cli . Consultado el 1 de julio de 2011. Archivado desde el original el 9 de julio de 2011.
  5. sfslite: descripción general (enlace descendente) . Fecha de acceso: 22 de enero de 2008. Archivado desde el original el 29 de marzo de 2010. 
  6. Descargar desde Quantum Leaps . Consultado el 22 de enero de 2008. Archivado desde el original el 8 de julio de 2008.
  7. La página de inicio de la biblioteca Simple Unix Events (SUE) . Fecha de acceso: 1 de julio de 2011. Archivado desde el original el 29 de marzo de 2010.