POE - Programación Orientada a Eventos

POE

Programación Orientada a Eventos

¿Qué es un Evento?

Un evento es cualquier acción o cambio detectado por el sistema que puede generar una reacción.

  • Alguien escribe en un documento.
  • Un clic en un botón "Comprar".
  • Una notificación de estado de pedido.
Typing on keyboard

Definición Técnica

  • Objeto de Sistema: Es un objeto que recibe el sistema el cual puede generar algún cambio de estado.
  • Impredecibilidad: A priori no conocemos cuándo van a llegar, pero sabemos cuáles pueden llegar.
  • Origen: Pueden ser definidos por el usuario, por hardware o por el propio sistema interno.

Propiedades de los Eventos

Order status persistent timeline

Inmutables

Una vez que el evento ocurre, no puede ser modificado. Es un hecho histórico.

Persistentes

Pueden ser almacenados indefinidamente para auditoría o procesamiento posterior.

Hechos Históricos

En POE, el evento representa el pasado.

"Changing the past doesn't change the future."

Si un pedido fue "Cancelado", ese evento queda registrado para siempre. No borramos el evento, emitimos uno nuevo de "Corrección".

Avengers Endgame Hulk Meme

Secuencial vs. Orientada a Eventos

Programación Secuencial (PS)


El Programador maneja el flujo del sistema.

"Haz A, luego B, si pasa X haz C."

Prog. Orientada a Eventos (POE)


El Usuario o Sistema maneja el flujo.

"Estoy esperando... cuando pase X, reacciono con Y."

¿Por qué usar POE?

El Problema del Acoplamiento

En sistemas tradicionales, si el componente A llama al B y B falla, A también falla.

Analogía Samsa: Las dependencias rígidas hacen que el sistema sea frágil. Si un receptor se "transforma" o desaparece, el emisor queda bloqueado.

Tangled wires coupling

Arquitectura POE

Emisor

Detecta el cambio y emite el evento.

Broker

Controlador que distribuye el evento.

Suscriptores

Reaccionan al evento de forma independiente.

Balance de la Arquitectura

Ventajas Desventajas
Desacoplamiento: Las entidades no necesitan conocerse entre sí. Performance: El intermediario (Broker) puede añadir latencia.
Contexto: Evita entidades "Dios" que manejan todo. Consistencia Eventual: El cambio no es inmediato en todo el sistema.
Escalabilidad: Es fácil añadir nuevos suscriptores sin tocar el código existente. Complejidad: Es más difícil seguir el flujo lógico del código.

POE en la práctica: JavaFX

Source

El objeto donde se originó el evento (ej: un Button).

TargetType

Define la naturaleza del cambio (Mouse, Key, Action).

Consumed

Flag que indica si el evento ya fue procesado. Si es true, se detiene.

Jerarquía de Clases

  • EventObject: La base de Java Core.
  • Event: La clase base de JavaFX.
  • Subtipos: InputEvent, WindowEvent, ActionEvent.
  • Hojas: MouseEvent, KeyEvent, ScrollEvent...
JavaFX Event Hierarchy

¿Cómo se disparan?

Event Dispatch Chain

Fases del Despacho

1. Capturing (Discovery): El evento viaja desde la Escena hacia abajo hasta el nodo objetivo.
2. Bubbling: El evento "rebota" y viaja desde el nodo objetivo hacia arriba por la jerarquía.

¿Preguntas?

Lectura recomendada: "Metamorfosis Asincrónica" de Federico Brasburg.

Programación Orientada a Eventos - Conceptos Básicos