Behavioral Design Patterns The Observer Pattern. Intention Définir une dépendance de “1” à “n” entre des objets de telle sorte que lorsque l’état d’un.

Slides:



Advertisements
Présentations similaires
Mathilde VINCENT - Olivier JOURDAN Paris - le 7/2/2012
Advertisements

Module Systèmes d’exploitation
Evénements Java Beans Java RMI
Systèmes en temps réel Modélisation du comportement en temps réel avec UML.
UML - Présentation.
Plan du cours La sérialisation: – comment stocker et restaurer les Objets? Les interfaces graphiques et la programmation évènementielle. –Comment concevoir.
JAV - TD 6 Structures de données JAVA
Design Pattern MVC En PHP5.
CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Entité Module Java Expert.
Introduction à la POO: Les classes vs les objets
CSI3525: Concepts des Langages de Programmation Notes # 11: Sous-Programmes ( Lire Chapitre 8 )
1 ARCHITECTURE DACCÈS la méthode générale modèle de données définitions module daccès / modules métiers construction des modèles les modules daccès, les.
Page de garde Introduction aux Design Patterns ISIA, Mars 2003
Pattern État PowerPoint 2003, télécharger la visionneuse PowerPoint Viewer dernière édition si vous ne lavez pas…télécharger la visionneuse PowerPoint.
Programmation orientée objet
LA SEGMENTATION STRATÉGIQUE
ManageEngine ADManager Plus 6
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Concepts de base : la Classe Pour faire une comparaison simple, une classe serait a priori, une structure C avec des variables et des fonctions.
Initiation à la conception de systèmes d'information
Réalisée par :Samira RAHALI
Bibliothèque standard du C++
Chaque use-case génère un ou des scénarios, traduits par des diagrammes objets, qui permettent d’introduire et/ou de compléter les diagrammes des catégories.
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
Factory Design Patterns Factory Method
.Net Remoting.
Patterns et maintenabilité dans lindustrie : un cas concret Christophe Saint-Marcel Silicomp Ingénierie.
Behavioral Design Patterns The Observer Pattern Roberto Demontis Sylvain Giroux.
Introduction au paradigme orienté-objet (suite)
Module 8 : Maintenance des logiciels à l'aide des services SUS
Initiation à la conception des systèmes d'informations
Développement dapplication avec base de données Semaine 10 : WCF avec Entité Framework Automne 2013.
Patrons de conceptions de créations
Propriétés. Propriétés ► Les propriétés peuvent être visibles dans les environnements de scripts ► Les propriétés peuvent être accédées par programmation.
JDBC L'API JDBC est utilisée pour utilisée pour intéragir avec une base de données.
Evénements. Plan Evénements Principes Exemples Adapteur.
Designs Patterns comment rendre son code faiblement couplé, et maintenable...
2003 (revisé 2008)SEG Chapitre 11 Chapitre 1 “The Systems Engineering Context” Le contexte du génie de systèmes.
Un design pattern orienté-objet
1 Registration Physique Séminaire du Master Davide Bazzi Université de Fribourg
Introduction au Génie Logiciel
Tutorat en bio-informatique
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
Factory Design Patterns Abstract Factory. Abstract Factory Design Pattern Plan Factory patterns: principesFactory patterns: principes The Factory Method.
Initiation à la conception des systèmes d'informations
Présentation du framework JSF (Java Server Faces) dans le modèle événementiel MVCII
Le polymorphisme.
2 Processus de conception de BD
Iterator Design Pattern Alessandro Soro Sylvain Giroux.
La programmation par objets Principes et concepts Etude de Smalltalk.
Notifications et Communication réseau D. BELLEBIA – 18/12/2007NSY208 CNAM.
Introduction à la programmation objet avec java
Héritage Conception par Objet et programmation Java
Observer/Observable Définition Fonctionnement Exemple.
Chapitre 2 Rappels objet et Présentation des diagrammes UML
Chapitre 2 Rappels objet et Présentation des diagrammes UML
La programmation par objets
Introduction à la Programmation Orientée Objet
Post-optimisation, analyse de sensibilité et paramétrage
Initiation aux bases de données et à la programmation événementielle
INSTITUT SUPERIEURE D’INFORMATIQUE Design Pattern
BlueJ_VII 1 Java, les objets : tout de suite ! Conception de classes (1) Notes de cours associées au chapitre 7 tutorial BlueJ
Template Method Design Pattern. But Définir le squelette d’un algorithme tout en déléguant certaines étapes aux sous-classes. Les sous-classes peuvent.
TSTC développement de clientèles 1 Le système d'information mercatique (SIM)
Schéma de base de données Présentation. Conception du schéma logique  Transformation du schéma conceptuel en structures de données supportées par les.
Introduction à l'orienté objet. Définition Le terme orienté objet siginifie que l'on organise le logiciel comme une collection d'objets organisée en graphe.
Architecture J2EE Web Jean-Jacques LE COZ. J2EE Web Container JSP Page Servlet J ava 2 Standard Edition APIs EJB Container EJB JDBCJMS JNDI JTA JavaMail.
Behavioral Design Patterns
Transcription de la présentation:

Behavioral Design Patterns The Observer Pattern

Intention Définir une dépendance de “1” à “n” entre des objets de telle sorte que lorsque l’état d’un objet change, tous ses dépendants sont informés et mis-à-jour automatiquement

Motivation Un effet de bord fréquent de la partition d’un système en une collection de classes coopérantes est la nécessité de maintenir la consistence entre les objets reliés entre eux. On ne veut pas obtenir la consistance en liant étroitement les classes, parce que cela aurait comme effet de réduire leur réutilisabilité.

Exemple I

Exemple II

Exemple III Un observateur --- plusieurs sources

Exemple IV LigthListener lightOn(LightEvent evt) lightOff(LightEvent evt) HydroQuebec mieuxConsommer()

Fonctionnement Le pattern “Observer” décrit comment établir les relations entre les objets dépendants. Les objets-clés sont la source Peut avoir n’importe quel nombre d’observateurs dépendants Tous les observateurs sont informés lorsque l’état de la source change l’observateur. Chaque observateur demande à la source son état afin de se synchroniser

Quand l’appliquer Lorsqu’une abstraction possède deux aspects dont l’un dépend de l’autre. L’encapsulation de ces aspects dans des objets séparés permet de les varier et de les réutiliser indépendemment. Exemple : Modèle-Vue-Contrôleur Lorsqu’une modification à un objet exige la modification des autres, et que l’on ne sait pas a priori combien d’objets devront être modifiés. Exemple : TP sur la réservation des locaux Lorsqu’un objet devrait être capable d’informer les autres objets sans faire d’hypothèses sur ce que sont ces objets, on ne veut pas que les objets soient étroitement liés.

Structure

Interfaces Sources Définir une interface pour les objets qui doivent “notifier” leur changement d’état En Java, par convention Add/remove/PropertyChangeListener Observateurs Définir une interface pour les objets qui seront informés des changements d’états PropertyChangeListener void propertyChange( PropertyChangeEvent e)

Implémentation Implémentation des Sources Mémorise son état afin que les observateurs puissent le lire. Notifie les objets observateurs des changements de leur état en implémentant une méthode notifier\fireEvent Gère les références aux observateurs intéressés add\remove___Listener Implémentation des Observateurs Conserve une référence à l’objet source Implémente la méthode de notification Par exemple, update

Collaborations

Bénéfices Utilisation indépendante des sources et des observateurs. On peut réutiliser les sources sans réutiliser les observateurs et vice-versa. On peut ajouter des observateurs sans modifier la source et les autres observateurs.

Bénéfices Couplage abstrait entre les sources et les observateurs. La source ne s’intéresse pas à la classe des observateurs Une source et un observateur peuvent appartenir à des niveaux différents d’un système.

Bénéfices Support pour la communication “broadcast” La source ne se préoccupe pas du nombre d’observateurs.

Désavantages Mises-à-jour imprévues. Parce que les observateurs n’ont aucune connaissance de la présence des autres, ils ne peuvent connaître le coût réel total d’une modification de la source. Une opération apparemment anodine sur la source peut entraîner une cascade de mises-à-jour des observateurs et des objets qui en dépendent.

Choix liés à l’implémentation I Associations sources-observateurs Dans la source Hashtable sources-observateurs Par exemple en Smalltalk dans la classe Object Observation de plus d’une source Qui a déclenché la notification ? Solution : adapteurs pour démultiplexer les sources Qui déclenche la notification ? La source après une modification de son état Les clients Pour éviter les mises-à-jour intermédiaires

Choix liés à l’implémentation II Références en suspens à des sources détruites A priori, pas en Java sauf sérialization-désérialization d’un observateur S’assurer que l’état de la source est consistant avant la notification Par exemple, si la notification est faite avant de faire le changement d’état, alors les observateurs qui interrogeront la source ne récupèreront pas la bonne valeur Solution possible : design pattern Template Method Void cut( TextRange r) {Replace(); \\ à redéfinir dans la sous-classe notify(); }

Choix liés à l’implémentation III Éviter les protocoles de mise-à jour spécifiques Modèle Push source envoie des informations détaillées que l’observateur le veuille ou non suppose que la source connaît l’information dont l’observateur a besoin Peut rendre les observateurs moins réutilisables Modèle Pull L’observateur vient chercher l’information dont il a besoin Emphase sur l’ignorance des observateurs par la source Peut être inefficace car les observateurs doivent identifier ce qui a changé

Choix liés à l’implémentation IV Spécifier explicitement les modifications qui sont d’intérêt pour l’observateur Améliore l’efficacité addPropertyChangeListener(“texte”, aListener); Fusion de classes de sources et d’observateurs Objets qui sont à la fois source et observateurs Dans les langages qui n’ont pas l’héritage multiple, on combine souvent les interfaces de sources et d’observateurs dans une même classe. En Smalltalk, les interfaces des sources et des observateurs sont combinées dans la classe Object, ce qui les rend disponibles à toutes les classes

Choix liés à l’implémentation V Encapsuler les sémantiques complexes de mises-à-jour Par exemple si une opération implique plusieurs sources interdépendentes, il faut s’assurer que les observateurs sont informés après la modification de toutes les sources pour éviter de notifier les observateurs plus d’une fois Gestionnaire de modifications : ChangeManager Table de correspondance entre une source et ses observateurs Stratégie spécifique de mise-à-jour À la demande de la source, il met à jour les observateurs dépendants

Gestionnaire de modifications DP Mediator : définit un objet qui encapsule la manière dont plusieurs objets interagissent entre eux DP Singleton car il n’y a en général qu’un seul ChangeManager DAGChangeManager gère un graphe acyclique de dépendances entre les sources et les observateurs

Java public class Observable {... } public interface Observer { void update(Observable o, Object arg); }

Bibliographie Design Patterns; Elements of Reusable Object- Oriented Software, E. Gamma, R. Helm, R. Johnson, J. Vlissides pag Java Design Patterns 101 ibm.com\developersWorks

The End