IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

Observable - Observer


Sujet :

Contribuez

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 161
    Points : 221
    Points
    221
    Par défaut Observable - Observer
    Dans le cadre d'un projet conçu dernièrement, je devais avoir plusieurs vues différentes du même modèle de données. En l'occurrence, ce modèle était sous forme d'instance de classe Windev gérant différents calculs.

    Dans ce contexte, le patron de conception qui me semblait le meilleur était le modèle Observable-Observé (http://fr.wikipedia.org/wiki/Observa..._de_conception)).

    Objectif

    Envoyer un signal à toute instance observant la classe héritant d'Observable.

    Mise en oeuvre

    La mise en oeuvre est relativement simple et consiste en deux classes. La première, Observable, contient un tableau de pointeur d'Observers et des méthodes d'ajout / de suppression et de notification.

    Il suffira de faire appel à la notification lorsqu'on voudra que toutes les vues correspondantes se mettent à jour.

    Observer quant à lui se contente de définir la méthode update() qui devra être redéfinie dans chacune de ses sous-classes pour que le polymorphisme fonctionne correctement.

    Enough word, let's code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Observer est une classe
     
    FIN
     
     
    PROCEDURE PRIVÉE Constructeur()
     
     
    PROCEDURE PRIVÉE Destructeur()
     
     
    PROCEDURE VIRTUELLE update()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    Observable est une classe
    PRIVÉ
    	observateurs est un tableau d'Observer dynamique
    FIN
     
     
    PROCEDURE Constructeur()
    PROCEDURE Destructeur()
    // Résumé : Notifie tous les observateurs qu'ils doivent se mettre à jour
    // Syntaxe :
    // notify ()
    //
    // Paramètres :
    //	Aucun
    // Valeur de retour :
    // 	Aucune
    //
    // Exemple :
    // Indiquez ici un exemple d'utilisation.
    //
    PROCEDURE PUBLIQUE notify()
     
    POUR CHAQUE o DE observateurs
    	o.update()
    FIN
     
    // Résumé : Ajoute un observer au tableau
    // Syntaxe :
    //addObserver (<o> est Observer dynamique)
    //
    // Paramètres :
    //	o (Observer dynamique) : <indiquez ici le rôle de o>
    // Valeur de retour :
    // 	Aucune
    //// Exemple :
    // Indiquez ici un exemple d'utilisation.
    //
    PROCEDURE PUBLIQUE addObserver(o est un Observer dynamique)
    TableauAjoute(observateurs,o)
     
    // Résumé : Retire l'observateur à l'indice indiqué
    // Syntaxe :
    //removeObserver (<indice> est entier)
    //
    // Paramètres :
    //	indice (entier) : indice de l'observateur dans le tableau
    // Valeur de retour :
    // 	Aucune
    //// Exemple :
    // Indiquez ici un exemple d'utilisation.
    //
    PROCEDURE PUBLIQUE removeObserver(indice est un entier)
    TableauSupprime(observateurs,indice)
    Il vous suffira alors de faire hériter vos Modèles à Observable et vos vues à Observer, redéfinir la méthode update pour que la vue se mette à jour, et c'est gagné !

    Sous des airs très basiques, ce patron de conception est très puissant et permet une cohésion des données affichées très facilement.

    J'attend vos retours ! ;-)

  2. #2
    Membre éprouvé

    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    402
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 402
    Points : 915
    Points
    915
    Par défaut
    Merci pour ta contribution,
    je m'intéresse aussi pas mal à la POO sous WD avec plus ou moins de bonheur.
    Je garde ton Pattern sous le coude et je l'appliquerai au plus tôt.
    As tu travaillé sur un pattern Singleton en WD?
    Quel avantage avec une variable globale déclarée au niveau du projet?
    Je te tiens au courant de l'application de Observer/Observable

    BJ

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2010
    Messages
    161
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 161
    Points : 221
    Points
    221
    Par défaut
    Hello !

    "Indirectement". C'est-à-dire que j'ai créé quelques classes (Générateurs d'objets par exemple) qui sont considérées comme Singleton mais ne sont pas codées spécialement pour. C'est juste à moi (ou mes collègues) de bien faire gaffe à pas lancer de deuxième instance !

    D'ailleurs, c'est une question intéressante. Je me pencherai sur les propriétés statiques

  4. #4
    Membre éprouvé

    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    402
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 402
    Points : 915
    Points
    915
    Par défaut
    Alors voilà je me lance dans ce pattern...
    Imaginons 5 listes combos chargées d'affiner une recherche
    Exemple (presque un cas d'école) :
    Combo_Article= affiche les données de Article
    Combo_Rayon= affiche les données de Rayon
    Combo_Famille= affiche les données de Famille
    Combo_SousFamille= affiche les données de SousFamille
    Combo_Saison= affiche les données de Saison

    Alors on est dans le cas des listes liées...
    J'imagine qu'on peut gérer ça avec ce pattern mais c'est encore un peu flou.

    Nous disons donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    observableCombo est une classe
    	nomCompletChampCombo est une chaîne
    	fichierLie est une chaîne
    	rubAffiche est une chaîne
    	rubMemorise est une chaîne
     	tableLiaisons est un tableau associatif de chaînes
    FIN
    et

    une classe observer...

Discussions similaires

  1. XStream sérialisation : Observer / Observable
    Par fabred dans le forum Persistance des données
    Réponses: 3
    Dernier message: 09/05/2012, 00h08
  2. Xstream Serialisation : Observer Observable
    Par fabred dans le forum Langage
    Réponses: 2
    Dernier message: 16/05/2007, 14h40
  3. [Observateur] Observable/Observer more infos
    Par sozie9372 dans le forum Design Patterns
    Réponses: 2
    Dernier message: 29/05/2006, 12h54
  4. observer / observable
    Par alex6891 dans le forum Java ME
    Réponses: 9
    Dernier message: 03/05/2006, 15h31
  5. [DP] observer-observable
    Par schousso dans le forum Général Java
    Réponses: 4
    Dernier message: 15/05/2004, 00h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo