Traduction de relation UML en C++ - C++ - Programmation
MarshPosté le 07-05-2008 à 10:01:20
Bonjour à tous,
Je voudrais traduire les relations UML en C++ de sorte à gérer les relations 1-1, 1-n et n-n le tout en assurant l'intégrité des relations (par exemple si un objet est détruit, il doit détruire les relations qui le lient à d'autre objets). Voici comment je pensais procéder: Si on considère deux classes A et B avec une relation n-n gérée en interne par un set
Jusque là tout va bien, le seul problème c'est quand je cherche à avoir plusieurs relations au sein d'une classe: par exemple A,B, et C avec une relation n-n entre A et B et n-n entre B et C.
Code :
class A : public Relation<A, B, set<B*> > {};
class B : public Relation<B, A, set<A*> > , public Relation<B, C, set<C*> > {};
class C : public Relation<C, B, set<B*> > {};
Là le compilateur me jete lorsque j'essaie de faire
Code :
B* b = new B();
A* a = new A();
a->add(b);
b->add(a); //ici erreur de compilation
Il me met:
Code :
error C2385: accès ambigu de 'add' dans 'B'
est peut-être le 'add' en base 'Relation<B,A,A *>::add'
ou le 'add' en base 'Relation<B,C,C *>::add'
(je précise que j'utilise visual 2003) ce que je ne comprends pas puisque le paramètre de add est 'a' qui est de type A*, il devrait donc pouvoir s'en sortir entre le add de 'Relation<B,A,A *> (void add(A* const obj)) et celui de 'Relation<B,C,C *> (void add(C* const obj)). Dans tout les cas, je ne sais pas si c'est une bonne approche, elle a l'avantage de se reposer sur une seule classe que je pourrais tester une fois pour toute. Comment vous procedez vous pour coder les relations n-n en C++? Merci de m'avoir lu, je suis ouvert à toute proposition de modélisation, partagez moi votre expérience
Marsh Posté le 07-05-2008 à 10:01:20
Bonjour à tous,
Je voudrais traduire les relations UML en C++ de sorte à gérer les relations 1-1, 1-n et n-n le tout en assurant l'intégrité des relations (par exemple si un objet est détruit, il doit détruire les relations qui le lient à d'autre objets). Voici comment je pensais procéder:
Si on considère deux classes A et B avec une relation n-n gérée en interne par un set
avec l'interface de Relation:
et le tpp:
Jusque là tout va bien, le seul problème c'est quand je cherche à avoir plusieurs relations au sein d'une classe: par exemple A,B, et C avec une relation n-n entre A et B et n-n entre B et C.
Là le compilateur me jete lorsque j'essaie de faire
Il me met:
(je précise que j'utilise visual 2003) ce que je ne comprends pas puisque le paramètre de add est 'a' qui est de type A*, il devrait donc pouvoir s'en sortir entre le add de 'Relation<B,A,A *> (void add(A* const obj)) et celui de 'Relation<B,C,C *> (void add(C* const obj)). Dans tout les cas, je ne sais pas si c'est une bonne approche, elle a l'avantage de se reposer sur une seule classe que je pourrais tester une fois pour toute. Comment vous procedez vous pour coder les relations n-n en C++? Merci de m'avoir lu, je suis ouvert à toute proposition de modélisation, partagez moi votre expérience