La programación guiada por eventos pone este mundo del revés. Los programas guiados por eventos no predicen la secuencia de control que se va a producir; están escritos para reaccionar razonablemente a cualquier secuencia de eventos en particular que se produzca una vez que se ha comenzado la ejecución.
En este modelo, son los datos de entrada los que regula la secuencia de control que lleva a cabo el programa. Además, la ejecución de un programa guiado por eventos no termina normalmente; estos programas están diseñados para ejecutarse durante un periodo de tiempo arbitrario, con frecuencia, indefinidamente.
En este modelo, son los datos de entrada los que regula la secuencia de control que lleva a cabo el programa. Además, la ejecución de un programa guiado por eventos no termina normalmente; estos programas están diseñados para ejecutarse durante un periodo de tiempo arbitrario, con frecuencia, indefinidamente.
El ejemplo más extendido de un programa guiado por eventos es la interfaz de usuario GUI guiada por ratón y por ventanas que encontramos en la mayoría de las computadoras de escritorio y portátiles de hoy en día. Los programas guiados por eventos también controlan aplicaciones basadas en web. Por ejemplo, un sistema de registro de alumnos en línea debe estar preparado para interactuar con un estudiante sin importar lo que va a hacer a continuación: apuntarse a un curso, deja un curso, determinar la clase en la que se celebra un curso, etc. De la misma manera, un sistema de reservas de una línea aérea en línea debe estar preparado para responder a diversas secuencias de eventos de usuario como el cambio de la fecha de viaje, la ciudad de destino o la preferencia de asientos.
Sin embargo, la programación guiada por eventos lleva utilizándose mucho más tiempo que la Web; es solo recientemente cuando se ha hecho con un papel destacado a los ojos de los programadores debido a la Web. Antes de la Web (¡si es que podemos imaginar esa época!), podíamos encontrar programas guiados por eventos en una variedad de vehículos y dispositivos, como aviones y sistemas de seguridad del hogar. En estos entornos, los eventos que disparan respuestas programadas incluyen un cambio en la dirección, la velocidad del viento o la temperatura; debido a la naturaleza, estos eventos no se producen en ningún orden en particular ni predecible.
Para ofrecer un soporte efectivo para la programación guiada por eventos, algunos programas han desarrollado una terminología básica y algunos principios de diseño. Recientemente, estos principios han aparecido en Java, aunque otros lenguajes como Visual Basic y Tcl/Tk también soportan programación guiada por eventos.
Por el contrario, la entrada a un programa guiado por eventos viene de diferentes fuentes de eventos autónomas, que pueden ser sensores de un robot o botones de un marco interactivo de un navegador web. Estos eventos se producen de forma asíncrona y, por tanto, cada uno de ellos entra en una cola de eventos cada vez que se produce. A medida que pasa el tiempo, un bucle de control sencillo recibe el siguiente evento eliminándolo de esta cola y manipulándolo. En el proceso de manipulación del evento, el programa puede consultar y/o cambiar el valor de una variable de estado o incluso producir resultados intermedios. Y lo que es más importante, vemos que el programa guiado por eventos esta diseñado para ejecutarse indefinidamente, sin un punto de parada predefinido, como es el caso de un programa imperativo.
Java ofrece soporte directo para la programación guiada por eventos, facilitando ciertas clases y métodos que podemos utilizar para diseñar una interacción. Cuando diseñamos una interacción, nuestro programa tiene que clasificar los eventos que pueden ocurrir, asociar esas incidencias de los eventos con objetos específicos del marco y después manipular cada evento de manera efectiva cuando se produce.