Programmation événementielle et architecture modèle-vue-contrôleur

Page 1 sur 23Lecteur de document UniversityLib

Programmation événementielle et architecture modèle-vue-contrôleur

Software Engineering · notes

Voir tous les documents en programmation

Génie logiciel

Grégory Bonnet

GREYC - Université de Caen Basse-Normandie

2014 - 2015

Programmation événementielle

Qu’est-ce que la programmation événementielle ?

Programmation séquentielle Paradigme de programmation dans lequel le déroulement des instructions du programme est toujours le même bien que les instructions elles-mêmes peuvent changer en fonction des embranchements.

Exemple Calculer les n premiers termes de la suite de Fibonacci.

Programmation événementielle Paradigme de programmation dans lequel le programme est principalement défini par ses réactions face à différents événements qui peuvent se produire.

Exemple Traitement de prise en charge d’une interface homme-machine.

Qu’est-ce qu’un événement ?

Un événement n’est pas un message

Message : appel d’une méthode particulière d’un objet particulier

Événement : signal envoyé dans l’environnement indépendamment des objets

Qui génèrent les événements ?

◮ les actions des utilisateurs (saisie au clavier ou clics de souris)

◮ le systèmes (tics d’horlogie)

◮ les objets (notifications)

Un événement est capté par les objets abonnés à ce type d’événement

Quelques exemples d’événements

Enfoncer les touches du clavier Une frappe sur le clavier génère un événement clavier contenant le code de la touche enfoncée.

Gestion de la souris Un utilisateur qui bouge ou clique avec la souris génère un événement souris contenant les coordonnées courantes de la souris et le bouton qui a été cliqué.

Actions sur un composant graphique Un composant graphique sur lequel un utilisateur clique génère un événement action auxquel l’application réagit en appellant le traitement associé au composant graphique.

Exception Un processus indépendant dont un opération produit une erreur peut avertir le reste de l’application en générant un événement exception.

Principes fondamentaux de programmation événementielle

Contenu d’un événement Un événement contient toutes les informations qui concernent l’action correspondante

◮ son type

◮ son émetteur

◮ des données (position d’un clic de souris par exemple)

Traitement des événements

◮ les composants interagissent entre eux et avec l’environnement

◮ les événements sont placés dans une file d’événements

◮ la boucle de gestion de l’environnement les transmet à un à un à des écouteurs

◮ les composants associés aux écouteurs agissent en réponse aux événements

Un exemple

Un programme avec une interface graphique

◮ un objet « interface graphique » composé d’objets « bouton »

◮ des écouteurs sont associés aux boutons

◮ le programme en boucle infinie attend des événements

◮ les écouteurs capturent les événements et lancent les traitements

Fonctionnement sous-jacent

◮ action de l’utilisateur sur l’interface graphique

◮ interruption matérielle

◮ récupération de l’interruption par le système

◮ construction de l’événement par le système

Publicité

◮ envoi d’un message contenant l’événement à l’application

◮ l’application réagit à l’événement ou non

Architecture Modèle - Vue - Contrôleur

Architecture d’une application munie d’une ou plusieurs interfaces utilisateur

◮ trois composants

◮ données et traitements, entrées et sorties et de la gestion des événements

◮ utilisée dans la conception de clients / serveurs et d’interfaces graphiques

Généralisation du motif observateur / observé

◮ les objets applicatifs (modèle)

◮ leurs représentations (vue)

◮ leurs interactions (contrôleur)

Pourquoi une nouvelle architure ?

Avantages

◮ patron de conception à part entière

◮ paradigme architectural

◮ découplage fort

◮ multiplicité des vues

◮ changement aisé d’interfaces

Inconvénients

◮ complexité de modélisation accrue

◮ dépendance forte de la vue et du contrôleur envers le modèle

◮ possibilité de mises à jours excessives

Écouteurs & notifications

Écouteur d’événement

◮ objet réagissant à un type d’événement particulier

◮ objet associé à un autre objet

◮ l’écouteur exécute une méthode à chaque fois qu’il reçoit un événement de ce type

Source

Écouteur

+ générer() : Événement

+ reagir(a : Événement)

Événement

De l’événement à la notification

L’implantation des événements passe généralement par la notification

◮ une notification est un signal envoyé par un objet à un ou plusieurs autres

◮ les destinataires sont des objets abonnés à la notification auprès de l’émetteur

◮ modèle publication / abonnement ou publish / subscribe

Les notifications peuvent porter des informations

◮ son type

◮ son émetteur

◮ état ou changement d’état de l’émetteur

◮ des données supplémentaires

Motif Observateur / Observé

◮ implantation à l’aide d’un motif observateur / observé

◮ un objet notifie ses observateurs lorsqu’il a changé

Publicité

◮ la réception d’une notification est un événement

« abstract » Observable

+ ajouter(Observateur) + supprimer(Observateur) + notifier()

« interface » Observateur

+ miseajour()

ClasseObservee

Observateur1

Processus d’attente

◮ un objet est un processus contrôlé par une méthode principale

◮ la méthode possède des points d’arrêts qui mettent le processus en sommeil

◮ la réception d’une notification réveille le processus qui réagit

Thread

+ run()

Événement

ObjetContrôlé

+ run()

Modèle - Vue - Contrôleur

Généralités

Côté applicatif : le modèle contient la logique de l’application

Côté visuel : les vues affichent à l’utilisateur des informations sur le modèle

Côté événementiel : le contrôleur agit à la demande de l’utilisateur sur le modèle

Utilisateur

est perçue par

utilise

Vue

agit sur

Contrôleur

met à jour

manipule

Modèle

Modèle

Cœur de l’application

◮ n’importe quelle classe ou quel paquetage

◮ indépendant de l’affichage et de la modification de ses données

◮ fournit des méthodes d’accès et de modification pour les données

Interactions

◮ le modèle peut être modifié sur ordre du contrôleur

◮ le modèle signale aux vues tout changement de contenu (événement)

◮ le modèle ignore comment il est affiché et qui lui a notifié un changement d’état

Vue

Interface avec l’utilisateur

◮ affiche les données et capte les actions de l’utilisateur ◮ ces actions sont transmises au contrôleur associé à la vue (événement) ◮ la vue et le modèle sont dans une relation observateur / observé ◮ le contrôleur joue un rôle d’écouteur pour les événements captés par la vue.

La vue se met à jour dès qu’elle reçoit un ordre de notification

1. du contrôleur 2. du modèle (elle le consulte alors pour se réafficher de manière adéquate)

Plusieurs vues pour même modèle ?

Publicité

◮ chaque vue est en général associée à un et un seul contrôleur

◮ une vue peut permettre à l’utilisateur de changer de vue

◮ une vue peut obtenir une vue supplémentaire sur le même modèle

◮ la vue instancie généralement son contrôleur,

Contrôleur

Écouteur de l’interface utilisateur

◮ le contrôleur reçoit des notifications de la vue

◮ il manipule alors le modèle en utilisant ses méthodes si besoin

◮ le modèle notifie en réponses les vues

◮ le contrôleur notifie la vue s’il n’est pas besoin de modifier le modèle

Le contrôleur reçoit les événements de l’interface utilisateur et les traduit

1. en changement dans la vue s’ils agisssent sur le côté visuel

Exemple : un clic sur la barre de défilement de la fenêtre graphique.

2. en changement dans le modèle s’ils agissent sur le contenu du modèle

Exemple : Une modification de la valeur d’un tableau affiché dans la fenêtre graphique

Présentation générale des interactions

Modèle

1. le modèle ne connaît ni les vues, ni les contrôleurs

2. ces deux éléments sont des observateurs par rapport au modèle

Vue

1. chaque vue est associée à un contrôleur qu’elle instancie

2. chaque vue est associée au modèle dont elle consulte et présente les données

Contrôleur

1. chaque contrôleur est associé à une vue dont il écoute les événements

2. chaque contrôleur connaît le modèle qu’il modifie en réponse à ses événements

Modèle UML de l’architecture MVC

Observé

Vue1

Observateur

Modèle

Contrôleur1

Observateur

Vue2

Observateur

Contrôleur2

Observateur

Conclusion

Conclusion

La programmation événementielle est un paradigme à part entière

◮ pas d’exécution linéaire du programme ◮ les objets génèrent des événements et réagissent à ces derniers ◮ très utile pour le développement d’interfaces graphiques ◮ implantation : modèle observateur / observé et processus d’attente

Une architecture événementielle

◮ la représentation logique d’une application (modèle) ◮ la représentation visuelle qu’on en donne (vue) ◮ les actions que l’utilisateur effectue (contrôleur)

Développement et maintenance simplifiés

◮ modularité dans la conception ◮ vue et contrôleur peuvent être développés indépendamment du modèle ◮ meilleure répartition des tâches entre développeurs (métiers ou ergonomie)