Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2712 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [RESOLU] Intéraction entre deux objets - Meilleure façon de faire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU] Intéraction entre deux objets - Meilleure façon de faire

n°1324202
Sve@r
Posté le 13-03-2006 à 14:36:10  profilanswer
 

Bonjour,
 
j'aimerais avoir un conseil sur la meilleure (plus élégante) façon de programmer une intéraction entre 2 objets
 
J'ai un objet A avec une méthode X et un objet B qui aura besoin, dans une méthode à lui (appelons-là "Y" ), d'appeler la méthode A::X pour un des objets A
 

Code :
  1. class A {
  2.    public:
  3.    ...
  4.    ...
  5.    void X(void);
  6. };
  7. void A::X(void)
  8. {
  9.     ...
  10. }
  11. class B {
  12.   public:
  13.   ...
  14.   ...
  15. };


 
Là, je me heurte à un dilemne. Pour que B puisse appeler A::X(), il faut que B connaisse l'objet A (évident). Donc j'ai plusieurs choix :

  • quand j'appelle la méthode "Y" de B, je lui passe en paramètre l'adresse du A que je veux traiter. Cela me donne :
Code :
  1. class B {
  2.   public:
  3.   void Y(A *pt);
  4.   ...
  5. };
  6. void B::Y(A *pt)
  7. {
  8.     pt->X();
  9. }


Ca fonctionne correct... mais si j'ai maintenant 50 méthodes de B qui ont besoin d'appeler X(), je dois passer à chaque méthode un pointeur vers A. Je suis pas emballé outre mesure.
 

  • quand je construits B, je passe à son constructeur un pointeur sur l'objet A. B stocke ce pointeur dans un de ses membres. Mais ensuite, toutes ses méthodes peuvent utiliser ce pointeur pour appeler X() et ça donne :
Code :
  1. class B {
  2.   public:
  3.   B(A *pt);
  4.   void Y(void);
  5.   ...
  6.   private:
  7.   A *pt;
  8. };
  9. B::B(A *pt)
  10. {
  11.      this->pt=pt;
  12.      ...;
  13. }
  14. void B::Y(void)
  15. {
  16.     pt->X();
  17. }


 
Zavez des conseils ou des idées sur la meilleure ou la plus élégante des solutions ? (ou une 3° que je ne connessoirais pas encore ?)
 
En vous remerciant.


Message édité par Sve@r le 13-03-2006 à 19:34:24
mood
Publicité
Posté le 13-03-2006 à 14:36:10  profilanswer
 

n°1324221
slash33
Posté le 13-03-2006 à 14:43:47  profilanswer
 

Les deux solutions que tu présentes ici montrent deux niveaux de dépendances différents.
 
Le premier cas est l'exemple d'une classe B qui utilise des objets de la classe A.  Le même objet B peut utiliser des objets A différents. Dans un diagramme UML, cela se traduit par une relation de dépendance de A sur B mais pas d'association. Un objet A est simplement employé en paramètre de signaux de B.
 
Le deuxième cas est caractéristique d'une association entre les classes A et B. Un seul objet A est associé à un objet B (il est possible de définir des accesseurs qui modifient cette relation). Le pointeur sur l'objet A que tu conserves a donc un rôle bien particulier dans la relation.  
 
La solution à retenir dépend donc de la relation qui lie tes classes A et B.

Message cité 2 fois
Message édité par slash33 le 13-03-2006 à 14:55:00
n°1324330
franceso
Posté le 13-03-2006 à 15:43:06  profilanswer
 

slash33 a écrit :

Les deux solutions que tu présentes ici montrent deux niveaux de dépendances différents.
 
Le premier cas est l'exemple d'une classe B qui utilise des objets de la classe A.  Le même objet B peut utiliser des objets A différents. Dans un diagramme UML, cela se traduit par une relation de dépendance de A sur B mais pas d'association. Un objet A est simplement employé en paramètre de signaux de B.
 
Le deuxième cas est caractéristique d'une association entre les classes A et B. Un seul objet A est associé à un objet B (il est possible de définir des accesseurs qui modifient cette relation). Le pointeur sur l'objet A que tu conserves a donc un rôle bien particulier dans la relation.  
 
La solution à retenir dépend donc de la relation qui lie tes classes A et B.


 [:plusun]


---------------
TriScale innov
n°1324373
slash33
Posté le 13-03-2006 à 16:34:32  profilanswer
 

Bonjour franceso. Comment va ?

n°1324454
Sve@r
Posté le 13-03-2006 à 18:55:09  profilanswer
 

slash33 a écrit :

Les deux solutions que tu présentes ici montrent deux niveaux de dépendances différents.
 
Le premier cas est l'exemple d'une classe B qui utilise des objets de la classe A.  Le même objet B peut utiliser des objets A différents.


En effet...
 

slash33 a écrit :

Le deuxième cas est caractéristique d'une association entre les classes A et B. Un seul objet A est associé à un objet B (il est possible de définir des accesseurs qui modifient cette relation). Le pointeur sur l'objet A que tu conserves a donc un rôle bien particulier dans la relation.


Certes... mais comme tu les dis, je peux très bien avoir une méthode de B qui modifie "pt". Donc le même objet B peut utiliser des objets A différents (mais cela devient un peu plus compliqué si B va travailler sur A1 puis sur A2 puis de nouveau sur A1)
 

slash33 a écrit :

La solution à retenir dépend donc de la relation qui lie tes classes A et B.


Merci :)


Message édité par Sve@r le 13-03-2006 à 18:55:43

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1324455
skelter
Posté le 13-03-2006 à 18:56:34  profilanswer
 

tu sais que en c++ void en parametre ca ne sert à rien ?

n°1324457
Sve@r
Posté le 13-03-2006 à 18:58:36  profilanswer
 

skelter a écrit :

tu sais que en c++ void en parametre ca ne sert à rien ?


Euh, non je savais pas. C'est une habitude que j'ai du C d'indiquer qu'il n'y a pas de paramètre...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1324460
slash33
Posté le 13-03-2006 à 19:01:31  profilanswer
 

Bon si tu as 50 méthodes qui utilises A dans ta classe B, j'opterai pour la seconde solution. Enfin à ce stade, il faut diviser ta classe.

n°1324464
slash33
Posté le 13-03-2006 à 19:06:59  profilanswer
 

Mais d'après ta réponse, B peux utiliser des objets A différents. En dehors de toute considération de contexte, il est risqué de prendre la deuxième solution car il est probable que tu oublies une fois sur deux de changer la référence.
 
Pour moi, c'est assez simple: si un objet B est associé au même objet A ou si tu gères une espèce de contexte, optes pour la deuxième solution.
Sinon, utilises la première solution.
 
Un exemple classique d'utilisation : la gestion d'une session (1 seul objet pour toute la durée de la session). Pour ne pas te prendre la tête, tu décides de donner une visibilité sur la session en cours. Mais tu aurais pu gérer une méthode statique (3ème solution) !

Message cité 1 fois
Message édité par slash33 le 13-03-2006 à 19:10:33
n°1324485
Sve@r
Posté le 13-03-2006 à 19:33:30  profilanswer
 

slash33 a écrit :

Bon si tu as 50 méthodes qui utilises A dans ta classe B, j'opterai pour la seconde solution. Enfin à ce stade, il faut diviser ta classe.


Le terme "50" n'avait qu'un but illustratif signifiant "plusieurs"  ;)  
 

slash33 a écrit :

Mais d'après ta réponse, B peux utiliser des objets A différents. En dehors de toute considération de contexte, il est risqué de prendre la deuxième solution car il est probable que tu oublies une fois sur deux de changer la référence.


Probablement...
 

slash33 a écrit :

Pour moi, c'est assez simple: si un objet B est associé au même objet A ou si tu gères une espèce de contexte, optes pour la deuxième solution.
Sinon, utilises la première solution.


Oui, c'est probablement ce qu'il y a de mieux à faire
Merci :)


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
mood
Publicité
Posté le 13-03-2006 à 19:33:30  profilanswer
 

n°1324810
franceso
Posté le 14-03-2006 à 10:02:11  profilanswer
 

slash33 a écrit :

Bonjour franceso. Comment va ?


Ca va bien, merci. Et toi ?

n°1324856
slash33
Posté le 14-03-2006 à 10:37:21  profilanswer
 

Ben toujours en recherche d'emploi (la réponse qui tue) :o


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [RESOLU] Intéraction entre deux objets - Meilleure façon de faire

 

Sujets relatifs
[RESOLU] ouvrir une pop-up avec un header en php..[RESOLU] _GET ou _POST ???
[résolu - qst outil] rétro conception[Résolu] Imprimer l'image d'arriere plan d'une page php
[Resolu] Recherche d'occurences dans une variable String[resolu] RAD 6 et tags JSF 1.2
[résolu] identification de membre - pb d'affichage des données [ RESOLU ] lien particulier dans la page
[ resolu] Faire une alerte message[Résolu] Forum - SMF/Free, que de logs
Plus de sujets relatifs à : [RESOLU] Intéraction entre deux objets - Meilleure façon de faire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR