Programació orientada a esdeveniments
La programació orientada a esdeveniments, en ciències de la computació, és un paradigma de la programació en el qual el flux del programa és determinat per esdeveniments,[1] com per exemple accions d'usuari (clics de ratolí, tecles premudes, accions de joystick, pantalles tàctils...), sortides de sensors (a través de l'USB) o missatges d'altres programes. La programació orientada a esdeveniments és el paradigma dominant que s'empra en les interfícies gràfiques d'usuari[2] i a la majoria de servidors i entorns de progrmació, com ara Node.js, també estan basats en esdeveniments.[3] A les aplicacions orientades a esdeveniments hi ha generalment un bucle principal que escolta els possibles esdeveniments i dispara la funció callback corresponent quan es detecten.[4][5][6]
Per entendre la programació dirigida per esdeveniments, podem oposar-la al que no és: mentre a la programació estructurada és el programador el que defineix quin serà el flux del programa, a la programació dirigida per esdeveniments serà el mateix usuari —qui estigui accionant el programa— el que dirigeixi el flux del programa. Tot i que a la programació seqüencial hi pot haver intervenció d'un agent extern al programa, aquestes intervencions es produiran quan el programador ho hagi determinat, i no en qualsevol moment com pot ser en el cas de la programació dirigida per esdeveniments.
El creador d'un programa orientat a esdeveniments ha de definir els esdeveniments i les accions que es realitzaran en produir-se cadascun, el que es coneix com l'administrador d'esdeveniments. Els esdeveniments permesos estaran determinats pel llenguatge de programació utilitzat, pel sistema operatiu i per esdeveniments creats pel mateix programador.
A la programació orientada a esdeveniments, en començar l'execució del programa es duen a terme les inicialitzacions i la resta de codi inicial i, a continuació, el programa queda bloquejat fins que es produeixi algun esdeveniment. Quan té lloc algun dels esdeveniments esperats pel programa, es passa a executar el codi del corresponent. Per exemple, si l'esdeveniment consisteix que l'usuari ha fet clic al botó de reproduir d'un reproductor de pel·lícules, s'executarà el codi de l'administrador d'esdeveniment que farà que la pel·lícula es mostri per pantalla.
Problema
[modifica]La programació orientada a esdeveniments suposa una complicació afegida pel que fa a altres paradigmes de programació, ja que el flux d'execució del programari escapa al control del programador. En certa manera podríem dir que a la programació clàssica el flux estava en poder del programador i era aquest qui decidia l'ordre d'execució dels processos, mentre que en programació orientada a esdeveniments és l'usuari qui controla el flux i decideix.
Per exemple, un menú amb dos botons, botó 1 i botó 2. Quan l'usuari prem botó 1, el programa s'encarrega de recollir certs paràmetres emmagatzemats en un fitxer i calcular algunes variables. Quan l'usuari prem el botó 2, es mostren a l'usuari per pantalla aquestes variables. La naturalesa indeterminada de les accions de l'usuari i les característiques d'aquest paradigma poden fàcilment desembocar en l'error fatal que es premi el botó 2 sense prèviament haver estat premut el botó 1. Per tant, amb programació orientada a esdeveniments, cal tenir en compte les propietats d'aquests botons per tal de tenir en compte les diferents possibilitats.
Gestor d'esdeveniments
[modifica]En contraposició al model clàssic, la programació orientada a esdeveniments permet interactuar amb l'usuari en qualsevol moment de l'execució. Això s'aconsegueix perquè els programes creats amb aquesta arquitectura es componen per un bucle exterior permanent encarregat de recollir els esdeveniments i diferents processos que s'encarreguen de tractar-los. Habitualment, aquest bucle extern roman ocult al programador que simplement s'encarrega de tractar els esdeveniments, encara que en alguns entorns de desenvolupament (IDE) serà necessària la seva construcció.
Exemple de programa orientat a esdeveniments en pseudo llenguatge:
While (true){ Switch (event){ case mouse_button_down: case mouse_click: case keypressed: case Else: } }
El gestor d'esdeveniments crida la rutina (callback) que li correspon. En programari de baix nivell s'anomenen rutines d'interrupcions del maquinari. Un exemple de rutina callback per a gestionar un teclat:
globally declare the counter K and the integer T. si-hi-ha-tecla-premuda(character C) { convert C to a number N if K is zero store N in T and increment K otherwise add N to T, print the result and reset K to zero }
Referències
[modifica]- ↑ «Programació orientada a esdeveniments». Gran Enciclopèdia Catalana. Grup Enciclopèdia. [Consulta: 1r abril 2025].
- ↑ Samek, Miro «Who Moved My State?». Dr. Dobb's. Arxivat de l'original el 2024-09-19.
- ↑ «Event-Driven Programming in Node.js | DigitalOcean» (en anglès). [Consulta: 1r abril 2025].
- ↑ «What is Event-driven Programming?» (en anglès). https://www.computerhope.com, 23-11-2017.
- ↑ «What is event-driven application? - Definition from WhatIs.com» (en anglès). SearchITOperations, 23-11-2017.
- ↑ Wells, Christopher J. «Event Driven Programming» (en anglès). https://www.technologyuk.net. Arxivat de l'original el 2018-07-08. [Consulta: 23 novembre 2017].