Intéraction entre deux objets - Meilleure façon de faire [RESOLU] - C++ - Programmation
Marsh Posté le 13-03-2006 à 14:43:47
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.
Marsh Posté le 13-03-2006 à 15:43:06
slash33 a écrit : Les deux solutions que tu présentes ici montrent deux niveaux de dépendances différents. |
Marsh Posté le 13-03-2006 à 18:55:09
slash33 a écrit : Les deux solutions que tu présentes ici montrent deux niveaux de dépendances 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
Marsh Posté le 13-03-2006 à 18:56:34
ReplyMarsh Posté le 13-03-2006 à 18:58:36
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...
Marsh Posté le 13-03-2006 à 19:01:31
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.
Marsh Posté le 13-03-2006 à 19:06:59
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) !
Marsh Posté le 13-03-2006 à 19:33:30
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. |
Oui, c'est probablement ce qu'il y a de mieux à faire
Merci
Marsh Posté le 14-03-2006 à 10:02:11
Reply
Marsh Posté le 13-03-2006 à 14:36:10
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
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 :
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.
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