Behavioral Design Patterns The Observer Pattern Roberto Demontis Sylvain Giroux.

Slides:



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

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.
Approfondissement du langage
(Classes prédéfinies – API Java)
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
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.
Langage Oriente Objet Cours 4.
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.
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Chapitre 21 Collections Partie I Introduction Une collection : est un objet qui regroupe multiple éléments dans une unité. Une collection est.
Classes abstraites et Interfaces
Factory Design Patterns Factory Method
1 Objectifs de ce cours (I21) Cours JAVA (I21) -Licence 1 Semestre 2 / Y.Laborde Résumé du cours précédent.
Patterns et maintenabilité dans lindustrie : un cas concret Christophe Saint-Marcel Silicomp Ingénierie.
Langage Oriente Objet Cours 2.
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
Introduction au paradigme orienté-objet (suite)
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Initiation à la conception des systèmes d'informations
Développement dapplication avec base de données Semaine 10 : WCF avec Entité Framework Automne 2013.
Objectifs À la fin de ce cours, vous serez capables de :
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.
Design Patterns en programmation par objets. Plan  Design patterns –De quoi s’agit-il? –Pourquoi faut-il les utiliser?  Design patterns essentiels 
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.
Conception 2 users.info.unicaen.fr/~ionona/gl2009
Un design pattern orienté-objet
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.
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.
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.
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
Factory Design Patterns Raffaella Sanna Sylvain Giroux.
Introduction à la Programmation Orientée Objet
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.
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.
Principes de l'orienté objet Jean-Jacques LE COZ.
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.
Révision Les principes SOLID. Question  Qu’est-ce que le S de Solid?
Behavioral Design Patterns
Transcription de la présentation:

Behavioral Design Patterns The Observer Pattern Roberto Demontis Sylvain Giroux

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

Motivation Un effet de bord fréquent de la partition dun 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 public static void main(java.lang.String[] args) { … for (Iterator lesCours=Cours.getInstances().iterator(); lesCours.hasNext();) { Cours unCours = (Cours)lesCours.next(); for (Iterator lesLocaux=Local.getInstances().iterator(); lesLocaux.hasNext();) { Local unLocal = (Local)lesLocaux.next(); unLocal.addVetoableChangeListener(unCours); unLocal.addPropertyChangeListener(unCours); } … }

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

Quand lappliquer Lorsquune abstraction possède deux aspects dont lun dépend de lautre. Lencapsulation 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 Lorsquune modification à un objet exige la modification des autres, et que lon ne sait pas a priori combien dobjets devront être modifiés. Exemple : TP sur la réservation des locaux Lorsquun objet devrait être capable dinformer les autres objets sans faire dhypothè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)

Implementation 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 Conserver une référence à lobjet source Implementer 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 sintéresse pas à la classe des observateurs Une source et un observateur peuvent appartenir à des niveaux différents dun système.

Bénéfices Support pour la communication broadcast La source ne se préoccupe du nombre dobservateurs.

Désavantages Mises-à-jour imprévues. Parce que les observateurs nont aucune connaissance de la présence des autres, ils ne peuvent connaître le coût réel total dune 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 à limplementation I Associations sources-observateurs Dans la source Hashtable sources-observateurs Par exemple en Smalltalk dans la classe Object Observation de plus dune 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 à limplémentation II Références en suspens à des sources détruites Sassurer que létat de la source est consistent 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 à limplémentation III Éviter les protocoles de mise-à jour spécifiques Modèle Push source envoie des informations détaillées que lobservateur le veuille ou non suppose que la source connaît linformation dont la source a besoin Peut rendre les observateurs moins réutilisables Modèle Pull Lobservateur vient chercher linformation dont il a besoin Emphase sur lignorance des observateurs par la source Peut être inefficace car les observateurs doivent identifier ce qui a changé

Choix liés à limplémentation IV Spécifier explicitement les modifications dintérêt pour lobservateur Améliore lefficacité addPropertyChangeListener(texte, aListener); Fusion de classes de sources et dobservateurs Objets qui sont à la fois source et observateurs Dans les langages qui nont pas lhéritage multiple, on combine souvent les interfaces de sources et dobservateurs 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 à limplémentation V Encapsuler les sémantiques complexes de mises-à-jour Par exemple si une opération implique plusieurs sources interdépendentes, il faut sassurer que les observateurs sont informés après la modification de toutes les sources pour éviter de notifier les observateurs plus dune 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 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 ny a en général quun seul ChangeManager

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