2 votes

composition. Renvoyer une variable

Supposons que vous ayez deux classes A et B. Si la relation entre les deux est has-a

c'est-à-dire que A a-a B

comment faire passer l'information de B à A ? Supposons par exemple que vous fassiez un calcul en B et que vous ayez besoin de la réponse en A.

Existe-t-il un autre moyen de procéder que de passer un pointeur sur la classe A dans la classe B et d'appeler une fonction qui prend la réponse en paramètre.

J'espère que cela a du sens,

MD.

Désolé, j'aurais dû être plus précis

citation de mon commentaire ci-dessous.

"J'ai donné un exemple simple. Je programme cela en Java et ma classe B lance un nouveau thread et calcule la réponse. Je ne peux donc pas appeler la fonction à partir de la classe A, car je ne sais pas quand le calcul sera terminé.

4voto

larsmans Points 167484

La méthode de A qui a besoin du résultat du calcul doit appeler la méthode de B qui effectue le calcul.

Cette réponse est tellement évidente qu'il y a peut-être quelque chose que vous ne nous dites pas ( ?)

Ok, la question porte en fait sur l'enfilage. Oui, passer une référence à l'objet propriétaire et rappeler cet objet peut être une bonne idée. Une meilleure idée serait de renvoyer un objet objet futur qui encapsule le résultat du calcul.

1voto

pajton Points 7374

Si je comprends bien, vous avez ce type de relation :

class Car {
    Engine engine;

    int test() {
        int fuelLevel = engine.getFuelLevel();

        // do sth with fuel level, store it, use it etc.
   }
}

Cet exemple montre comment vous pouvez transmettre des informations entre les deux classes : par exemple en tant que résultat d'une fonction. L'objet Voiture (votre classe A) appelle une méthode sur l'objet Moteur (classe B) et obtient ainsi l'information souhaitée. Cet exemple peut être facilement transposé à n'importe quel type de travail effectué par la classe B.

1voto

mb14 Points 7166

Il existe essentiellement deux façons de gérer les appels "asynchrones". La première est d'avoir un rappel et l'autre d'effectuer un sondage. L'utilisation d'un rappel est ce que vous décrivez. Lorsque B a terminé, il doit appeler A d'une manière ou d'une autre qu'il a terminé. Cela peut être fait en "donnant" l'adresse de A à B, afin qu'il sache quoi appeler, ou en utilisant un objet intermédiaire C, qui appelle B de manière synchrone et renvoie le résultat à A. C a alors besoin de connaître A.

L'interrogation est le fait pour A de vérifier régulièrement si B a terminé. Cette solution est généralement moins satisfaisante sur le plan intellectuel et plus gourmande en ressources humaines. En outre, vous n'êtes pas informé du moment exact où B a terminé. (Lorsque B a terminé, il ne s'est rien passé, vous devrez attendre la prochaine interrogation pour en être informé). Cependant, de cette façon, B n'a pas besoin de savoir quoi que ce soit sur A.

J'utiliserais le premier modèle avec un objet intermédiaire (et une classe C spéciale). Ainsi, votre modèle reste propre (B n'a pas besoin de connaître A ou C). Je vous suggère également de jeter un coup d'œil à la page Modèle d'observateur .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X