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

Diagrammes de Classes Discussion :

Association navigables dans les deux sens


Sujet :

Diagrammes de Classes

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 70
    Points : 49
    Points
    49
    Par défaut Association navigables dans les deux sens
    Salut à tous,

    Mon problème est simple et sûrement pas nouveau.
    J'ai une association entre une classe A & une classe B.

    A---->B = 1 seule
    B---->A = 0..*

    Je cherche une méthode qui me créer l'association d'un seule coup, c'est à dire qui me laisse mes objets dans un états cohérents.

    Si je crée dans A un setB il faut que celui-ci ajoute A à B et si je crée dans B un ajouterA il faut que mon A contienne la réference vers B. Le problème ici est l'appel croisé de mes deux fonctions.

    Parrallèlement si je créer mes fonctions qui ne crée l'association que dans un seul sens navigable, je dois enchaîner deux appels, publiques de plus ce qui ne me garanti pas qu'un programmeur n'en oublie une, laissant mon système dans un état incohérent.

    Merci de venir à mon aide

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 109
    Points : 122
    Points
    122
    Par défaut
    Hello,

    Tu peux faire un observateur de A vers B et réciproquement :
    (pseudo code)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class A {
    
    void setNomB(b) {
    monB = b;
    b.notifierSet(this);
    }
    
    void notifierAjout(b) {
    monB = b;
    }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class B {
    
    void setAjouterA(a) {
    collectionA.add(a);
    a.notifierAjout(this);
    }
    
    void notifierSet(b) {
    collectionA.add(b);
    }
    }
    Bien sur, en pratique c'est un peu plus compliqué car il faut aussi notifier les suppressions.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 70
    Points : 49
    Points
    49
    Par défaut
    Merci ça me conviens parfaitement, a un détaille près.

    Les méthodes notifier doivent être publiques donc un programmeur peut appeller notifier directement.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 109
    Points : 122
    Points
    122
    Par défaut
    Deux éléments de réponse :
    * Tu peux utiliser une visibilité "package" (ou "friend" en C++ si j'ai bonne mémoire)
    * Tu peux masquer ces méthodes en utlisant des interfaces. Par exemple en Java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public interface IA {
    void setMonB(IB b):
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public class A implements IA {
    ...
    }
    et faire en sorte que les parties non concernées de ton application ne travaillent qu'avec les interfaces IA et IB

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 70
    Points : 49
    Points
    49
    Par défaut
    Merci,

    Là la solution m'est parfaite.

    J'opterais plutôt vers la solution interface que je trouve plus "propre".

    Merci pour tout.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/08/2009, 16h18
  2. Réponses: 9
    Dernier message: 20/08/2008, 18h18
  3. lier des cellules dans les deux sens
    Par noisat dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 30/06/2008, 16h42
  4. [Oracle 8i] Jointure externe dans les deux sens
    Par Drizzt [Drone38] dans le forum Langage SQL
    Réponses: 7
    Dernier message: 07/09/2006, 15h10
  5. Double HashMap (Parcours dans les deux sens)
    Par Graffity dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 07/02/2006, 11h02

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