Sciences de l'ingénieur (spécialité) · TerminaleBac
Programmation événementielle : cours de Terminale SI
Publié le 7 novembre 2026 · Mis à jour le 7 novembre 2026 · Signaler une erreur
L'essentiel
- La programmation événementielle organise un programme autour des événements qu'il reçoit (clic, saisie au clavier, changement d'état) et de ses réactions à chacun d'eux 5.
- Elle s'oppose à la programmation séquentielle, où les instructions s'enchaînent dans un ordre fixé d'avance 5.
- Une architecture classique : une boucle principale en deux parties, l'une détecte les événements, l'autre les gère 5.
- Un événement en cours de traitement va à son terme : un autre ne s'intercale que là où le code l'a explicitement prévu 5.
- Méthode de travail : lister les événements, écrire un gestionnaire par événement, mémoriser l'état dans des variables, garder chaque gestionnaire court.
Introduction : un programme qui attend
Quand tu utilises une application sur ton téléphone, rien ne se passe tant que tu ne touches pas l'écran. Dès que tu appuies sur un bouton, l'application réagit : elle affiche une page, joue un son, envoie un message. Le programme ne suit pas un scénario écrit de la première à la dernière ligne : il attend que quelque chose arrive, puis il réagit.
C'est exactement l'idée de la programmation événementielle. Son principe est de recevoir des événements, de natures très variées : en particulier ce que fait un opérateur sur une interface graphique, comme bouger ou cliquer avec la souris, ou taper au clavier 5.
En sciences de l'ingénieur, cette façon de penser est partout. Un système automatisé reçoit des informations de capteurs, de boutons, de messages venant d'autres systèmes, et doit y répondre au bon moment. Dans le chapitre précédent, tu as vu comment un signal est échantillonné puis filtré : on obtient des valeurs numériques successives. La question suivante est naturelle : que fait le programme quand une de ces valeurs franchit un seuil, ou quand l'utilisateur agit ? La réponse se construit avec des événements.
Dans ce cours, tu vas apprendre à :
- définir ce qu'est un événement et un gestionnaire d'événement ;
- distinguer la programmation événementielle de la programmation séquentielle ;
- décrire la boucle principale qui détecte puis traite les événements ;
- écrire en pseudo-code un petit programme réactif et prévoir son comportement ;
- repérer les erreurs fréquentes : gestionnaire trop long, état mal mémorisé, événement oublié.
L'épreuve de spécialité de Terminale porte sur le programme de sciences de l'ingénieur et sur son complément de sciences physiques, et les notions de Première peuvent y être mobilisées 2. Savoir raisonner sur un programme qui réagit à des entrées fait partie de cette culture numérique.
Qu'est-ce qu'un événement ?
Cette définition a deux conséquences utiles.
Première conséquence : un événement vient de l'extérieur ou de l'intérieur du programme. Un clic vient de l'utilisateur. Une variable qui change de valeur vient du programme lui-même 5. Dans un système technique, on ajoute naturellement les informations d'un capteur : c'est la même idée, un fait nouveau auquel il faut réagir.
Seconde conséquence : un événement n'est pas une durée, c'est un instant. Le clic est l'instant où le bouton est enfoncé. Le programme n'est pas "en train de cliquer" : il reçoit l'information qu'un clic a eu lieu.
Programmation séquentielle et programmation événementielle
Pour comprendre l'intérêt de la programmation événementielle, comparons-la à ce que tu connais déjà. En programmation séquentielle, les instructions s'exécutent l'une après l'autre dans l'ordre où elles sont écrites : le programme décide de tout, l'utilisateur attend son tour. La programmation événementielle s'oppose à ce modèle, ainsi qu'à la programmation par processus légers (threads) 5.
| Critère | Séquentielle | Événementielle |
|---|---|---|
| Ce qui décide de la suite | L'ordre d'écriture des instructions | L'événement reçu |
| Description du programme | Une suite d'instructions | Un ensemble de réactions |
| Exemple typique | Un calcul exécuté du début à la fin | Une interface avec boutons et saisies |
La boucle principale : détecter puis gérer
Comment un programme peut-il réagir à des événements qu'il ne peut pas prévoir à l'avance ? Il s'appuie sur une architecture simple : une boucle principale qui comporte deux parties. L'une guette les événements, l'autre se charge de les traiter 5. On rencontre surtout cette organisation dans les interfaces graphiques 5.
- AttendreLe programme ne fait rien tant qu'aucun fait ne se produit.
- DétecterLa première section repère un événement (clic, saisie, changement).
- GérerLa seconde section exécute le gestionnaire associé, jusqu'à sa fin.
- ReprendreLa boucle revient à l'attente de l'événement suivant.
Imagine un standard téléphonique. L'opératrice attend. Un appel arrive (détection). Elle le dirige vers le bon service (gestion). Puis elle revient à l'attente. Elle ne traite pas deux appels exactement au même instant : elle termine l'un avant de passer au suivant. La boucle principale fonctionne de la même manière.
Cette propriété a une conséquence pratique directe : tant qu'un gestionnaire n'est pas terminé, les événements suivants attendent. Si un gestionnaire met trois secondes à s'exécuter, l'interface semble figée pendant trois secondes, car la section qui détecte ne reprend la main qu'après la fin du traitement. C'est pourquoi on vise des gestionnaires courts.
À l'inverse, cette règle simplifie beaucoup le raisonnement : puisqu'un gestionnaire n'est pas coupé en plein milieu, tu peux le lire comme une petite séquence ordinaire, sans craindre qu'un autre gestionnaire modifie tes variables entre deux de ses lignes.
Écrire des gestionnaires et mémoriser l'état
Un gestionnaire s'exécute puis se termine : il ne "se souvient" de rien par lui-même. Pour que le programme garde une mémoire d'un événement à l'autre, on utilise des variables d'état, déclarées en dehors des gestionnaires. Ce sont elles que les événements modifient, ce qui est cohérent avec l'idée qu'un programme événementiel se décrit par ses réactions aux changements qui surviennent 5.
Du capteur à l'événement : lien avec le signal
Tu as étudié l'échantillonnage et le filtrage. Un capteur de température, une fois échantillonné, fournit une suite de valeurs : Le programme n'a pas besoin de réagir à chaque valeur. Il réagit quand quelque chose de significatif se produit. On peut donc fabriquer des événements à partir de mesures.
Remarque comment le filtrage entre en jeu : si le signal est bruité, il peut franchir le seuil plusieurs fois de suite par simple fluctuation, et produire une rafale d'événements parasites. Filtrer le signal avant de détecter le seuil, ou ajouter une marge entre le seuil de déclenchement et celui de retour à la normale, réduit ces événements inutiles. C'est une démarche d'ingénieur : on choisit la détection qui produit les événements utiles, ni trop, ni trop peu.
Erreurs fréquentes et bonnes pratiques
Pour aller plus loin : place dans le domaine informatique
Cette approche est née avec les interfaces graphiques, et c'est surtout la programmation orientée objet qui l'a rendue courante 5. Une interface graphique est faite de nombreux éléments (boutons, menus, champs de saisie) qui réagissent chacun à des actions de l'opérateur ; associer à chaque élément ses réactions est une organisation très naturelle.
Les programmes événementiels s'intègrent dans la démarche plus générale du programme de sciences de l'ingénieur, qui s'appuie sur une démarche scientifique appliquée à des thématiques comme les territoires et les produits intelligents 2. Un produit intelligent est justement un produit qui perçoit son environnement et réagit : c'est un terrain naturel pour des programmes pilotés par des événements.
Événementiel
- Événement
- Clic
- Saisie clavier
- Changement d'état
- Boucle
- Détecte
- Gère
- Gestionnaire
- Court
- Un par événement
- État
- Variables externes
- Mémoire
- Erreurs
- Gestionnaire long
- Événement oublié
Exercices corrigés
Exercice 1 Suivre l'état d'un compteur
Un programme gère un score. Il possède une variable d'état score initialisée à 10 et deux gestionnaires :
fonction sur_clic_plus() :
score = score + 3
fonction sur_minuteur() :
score = score - 2
La boucle principale reçoit, dans un ordre quelconque, 6 événements clic_plus et 4 événements minuteur. Quelle est la valeur finale de score ?
Indice 1
Chaque événement modifie la même variable d'état, le calcul se fait événement par événement.
Indice 2
Comme on ne fait que des additions et des soustractions, l'ordre d'arrivée ne change pas le résultat final.
Voir la correction pas à pas
On part de
score = 10.Les 6 événements
clic_plusajoutent chacun 3 : total ajouté .Les 4 événements
minuteurretirent chacun 2 : total retiré .Valeur finale : .
La valeur finale est 20. Ici l'ordre des événements n'a pas d'influence, car les opérations commutent. Ce ne serait pas vrai avec un gestionnaire contenant une condition, par exemple "ne pas descendre sous 0".
Exercice 2 Charge de traitement d'une interface
Une interface reçoit en moyenne 4 événements par seconde pendant 2,5 minutes. Chaque événement est traité par un gestionnaire qui dure 0,05 s. Les événements sont traités un par un, sans interruption d'un traitement par un autre.
Calcule la durée cumulée de traitement sur ces 2,5 minutes, en secondes. Puis indique si la boucle principale est saturée.
Indice 1
Convertis d'abord 2,5 minutes en secondes.
Indice 2
Nombre d'événements multiplié par la durée d'un traitement.
Voir la correction pas à pas
Durée de l'observation : s.
Nombre d'événements reçus : .
Durée cumulée de traitement : s.
Comparaison : 30 s de traitement sur 150 s d'observation, soit du temps. La boucle n'est pas saturée.
Le traitement dure 30 s au total. La boucle est occupée 20 % du temps : elle a de la marge. Si chaque gestionnaire durait 0,25 s, le temps de traitement serait égal à la durée d'observation : la boucle serait saturée, et les événements s'accumuleraient en attente.
Exercice 3 Concevoir un distributeur de tickets
Un parking possède une barrière d'entrée. Elle s'ouvre quand un conducteur appuie sur le bouton "ticket", sauf si le parking est complet (100 places). Un capteur détecte le passage du véhicule sous la barrière : la barrière se referme alors. Un autre capteur, à la sortie, signale un véhicule qui part.
- Liste les événements.
- Propose les variables d'état.
- Écris en pseudo-code les gestionnaires.
- Explique ce qui se passe si le conducteur appuie deux fois de suite sur le bouton avant de passer.
Indice 1
Il faut au moins une variable pour le nombre de places occupées et une pour savoir si la barrière est ouverte.
Indice 2
Pour la question 4, regarde ce que fait ton gestionnaire quand la barrière est déjà ouverte.
Voir la correction pas à pas
Événements :
appui_ticket,véhicule_passé(capteur d'entrée),véhicule_sorti(capteur de sortie).Variables d'état :
occupées(entier, initialisé à 0),barrière_ouverte(booléen, initialisé à faux).Gestionnaire d'appui :
fonction sur_appui_ticket() : si occupées < 100 et non barrière_ouverte : barrière_ouverte = vrai ; ouvrir() ; sinon si occupées >= 100 : afficher("Complet").Gestionnaire de passage :
fonction sur_véhicule_passé() : si barrière_ouverte : fermer() ; barrière_ouverte = faux ; occupées = occupées + 1.Gestionnaire de sortie :
fonction sur_véhicule_sorti() : si occupées > 0 : occupées = occupées - 1.Double appui : le premier appui ouvre la barrière et met
barrière_ouverteà vrai. Le second appui trouvebarrière_ouvertevrai, la condition est fausse, rien ne se passe : aucun ticket supplémentaire n'est généré et le compteur n'est pas touché.
La variable barrière_ouverte protège le programme contre un ordre d'événements imprévu. Sans elle, un double appui pourrait ouvrir deux fois la barrière pour un seul véhicule. Penser aux séquences d'événements inattendues fait partie de la conception.
Quiz
7 questions · correction immédiate · ton score reste sur ton appareil.
-
La boucle principale comporte deux parties : l'une guette les événements, l'autre les traite 5. Les autres propositions mélangent des étapes de développement ou de gestion de fichiers qui n'ont rien à voir avec cette architecture.
-
Le clic, la saisie au clavier et le changement d'état de variable sont cités comme des événements 5. L'écriture du programme a lieu avant l'exécution, elle n'est pas un fait auquel le programme réagit.
-
Un événement en cours de traitement va à son terme avant que le suivant soit pris en compte 5, donc la boucle ne peut ni détecter ni traiter d'autres événements avant la fin du gestionnaire. La réponse sur le traitement parallèle est tentante mais contredit cette règle. Rien n'indique non plus qu'un gestionnaire soit coupé de lui-même.
-
Calcul : . L'erreur fréquente est d'oublier de multiplier par le nombre d'événements et de n'appliquer chaque gestionnaire qu'une fois, ce qui donnerait 8.
-
Une variable déclarée à l'intérieur d'un gestionnaire est recréée à chaque appel et perd sa valeur ; il faut donc la placer à l'extérieur. L'idée d'un programme sans mémoire est fausse : c'est précisément l'état, modifié par les événements, qui donne au programme sa mémoire.
Les questions qu'on se pose
Quelle est la différence entre programmation événementielle et programmation séquentielle ?
En programmation séquentielle, les instructions s'exécutent dans un ordre fixé par le programmeur. En programmation événementielle, l'ordre dépend des événements qui se produisent : le programme se définit surtout par ses réactions à ces événements 5. La première s'apparente à une recette suivie pas à pas, la seconde à un standard téléphonique qui répond aux appels dans l'ordre où ils arrivent.
À quoi sert la programmation événementielle dans un système technique ?
Elle permet à un système de réagir à des faits qu'on ne maîtrise pas à l'avance : action de l'utilisateur, changement de valeur d'un capteur, fin d'un minuteur. On l'emploie surtout pour les interfaces graphiques 5, mais la même organisation convient à un système automatisé : on liste les événements, on écrit une réaction pour chacun et on mémorise l'état.
Faut-il obligatoirement un langage particulier pour écrire un programme événementiel ?
Non. Tout langage convient, même si les langages de haut niveau facilitent la tâche 5. Certains environnements de développement intégrés produisent d'eux-mêmes le code des tâches récurrentes de gestion des événements 5. Ce qui compte pour toi est de maîtriser le raisonnement : événement, gestionnaire, état.
Est-ce que cette notion peut servir à l'épreuve de spécialité ?
L'épreuve de spécialité porte sur le programme de Terminale de sciences de l'ingénieur ainsi que sur son complément de sciences physiques, et les notions de Première peuvent y servir 2. La partie de sciences physiques comprend deux exercices indépendants et fait une place aux capacités numériques prévues par le programme 2. Les sources consultées ne détaillent pas de question type sur la programmation événementielle : retiens surtout la méthode de raisonnement (lister les événements, suivre l'état), utile dès qu'un énoncé décrit un système qui réagit à des entrées.
Comment éviter qu'un programme paraisse figé ?
Comme un événement en cours de traitement va à son terme avant que le suivant soit examiné 5, un gestionnaire long bloque la boucle. Garde donc chaque gestionnaire court : il met à jour l'état, déclenche une action rapide, puis se termine. Ne place jamais d'attente active à l'intérieur.
Sources
Programme visé : Bulletin officiel spécial n°8 du 25 juillet 2019 — Sciences de l'ingénieur, classe terminale · education.gouv.fr
- Bulletin officiel spécial n°8 du 25 juillet 2019 — Sciences de l'ingénieur, classe terminale, education.gouv.fr. Consulté le 7 novembre 2026.
- Éduscol STI — Épreuve de l'enseignement de spécialité Sciences de l'ingénieur (classe de Terminale), eduscol.education.fr. Consulté le 7 novembre 2026.
- Éduscol STI — Programme Sciences de l'ingénieur (réforme 2019), eduscol.education.fr. Consulté le 7 novembre 2026.
- Bulletin officiel n°24 du 11 juin 2015 — Enseignement de spécialité SI (classe terminale S), education.gouv.fr. Consulté le 7 novembre 2026.
- Programmation événementielle, Wikipédia. Consulté le 7 novembre 2026.
Les numéros dans le texte renvoient à ces sources. Une source qui ne dit pas ce qu'on lui fait dire ? Signale-le.