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

C++ Discussion :

Système de communication entre instances via des messages


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2002
    Messages : 162
    Par défaut Système de communication entre instances via des messages
    Bonjour,

    Je suis à la recherche de conseils et d'avis.

    Je m'apprête à mettre en place un système de communication entre les instances de mes classes avec des messages.

    L'idée est d'avoir un "bureau de poste", auquel s'enregistrent les classes souhaitant recevoir des messages (messageable), les messages envoyés héritant de la classe "message".

    Actuellement, lors du transfert des messages j'ai une méthode messageable::process_message( message& m ). C'est alors au destinataire de retrouver le type d'origine du message. Là c'est difficile parce que la classe "message" n'as pas de méthode virtuelle, donc pas de dynamic_cast<>(). Je me suis dit que je pourrais mettre un identifiant à toutes les classes héritant de "message". Le problème c'est que ça devient vite ingérable (genre "quel est le prochain identifiant libre ?"). La solution pourrait être de faire un fichier avec tous les identifiants. Ca me gène parce que ça force un lien entre tous les messages. Peut-être qu'il est possible de générer des identifiants à la compilation ? par métaprogrammation ? je n'en ai aucune idée.

    Du coup je pense à une autre méthode. j'enlève la méthode messageable::process_message() et j'ajoute une méthode message::apply_to( messageable& m ). Le type réel du message est alors bien connu, mais c'est au message de retrouver le type réel du messageable. Ceci dit, vu que ce sont les objets qui définissent les messages qui s'appliquent à eux, il ne devrait pas y avoir de doute quant au type du paramètre.

    Qu'est-ce que vous pensez de ces deux méthodes ? En voyez vous d'autres ?

    merci.

  2. #2
    Membre chevronné Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Par défaut
    La première méthode me semble plus logique.

    Citation Envoyé par YéTeeh
    la classe "message" n'as pas de méthode virtuelle
    Et elle ne peut en avoir ?

    Disons que tu ais une classe Poste avec une méthode SendMessage et
    la classe Message avec une méthode virtuelle GetType.

    Au moment où tu dois envoyer un message, tu l'envoies avec SendMessage.

    Les classes le reçoivent dans leurs méthode OnMessage, et font l'action nécessaire suivant ce que retourne GetType.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2002
    Messages : 162
    Par défaut
    La classe "message" n'a pas de méthode virtuelle parce qu'elle n'en a pas besoin avec le premier modèle. Je pourrais lui en mettre une, mais elle ne servirait qu'au dynamic_cast<>().

    Le problème du GetType, c'est qu'il faut un identifiant pour chaque type de message, et ça revient à ce que j'ai noté dans mon post précédent.

  4. #4
    Membre chevronné Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Par défaut
    Citation Envoyé par YéTeeh
    Le problème du GetType, c'est qu'il faut un identifiant pour chaque type de message, et ça revient à ce que j'ai noté dans mon post précédent.
    Si tu ne veux pas d'identifiants, comment veux-tu les différencier ?

    Toutes les lettres qui vont au bureau de poste n'ont pas la même adresse..

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2002
    Messages : 162
    Par défaut
    Citation Envoyé par Mayti4
    Si tu ne veux pas d'identifiants, comment veux-tu les différencier ?

    Toutes les lettres qui vont au bureau de poste n'ont pas la même adresse..
    En fait, le type de la classe est un identifiant en soi, un identifiant du contenu. Pour ce qui est de l'adresse, dans la mesure où je connais le destinataire, il n'y a aucun soucis.

    Essayons de clarifier l'état actuel avec un exemple :

    Deux personnes sont enregistrées au bureau de poste. Elles peuvent donc recevoir des messages.

    Nous avons quatre type de messages : télégramme, courrier, colis et publicité. Tous héritent de "message" pour pouvoir passer par le bureau de poste.

    Disons que la première personne veut recevoir des télégrammes et du courrier, la seconde ne veut que des colis et de la publicité.

    L'émetteur va faire quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    telegramme t;
    bureau_de_poste.envoyer_message( "personne_1", t );
    Mais la personne 1, elle, ne recevra qu'une instance de "message", sans savoir si c'est un télégramme ou un courrier.

    Donc là, j'ai deux possibilités :
    - soit j'ai ajouté un identifiant à chaque classe de message, et dans deux semaines je me perds en cherchant un identifiant pour un nouveau type de message, qui ne serait pas utilisé par l'un des 50 types de messages déjà existant ;
    - soit j'ajoute une méthode virtuelle à la classe message, ce qui me permettra d'utiliser dynamic_cast<>(), même si la méthode n'aura aucun contenu.

  6. #6
    Membre chevronné Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Par défaut
    Citation Envoyé par YéTeeh
    Donc là, j'ai deux possibilités :
    - soit j'ai ajouté un identifiant à chaque classe de message, et dans deux semaines je me perds en cherchant un identifiant pour un nouveau type de message, qui ne serait pas utilisé par l'un des 50 types de messages déjà existant ;
    Simple, Identifiant = nom de la classe.

    Citation Envoyé par YéTeeh
    - soit j'ajoute une méthode virtuelle à la classe message, ce qui me permettra d'utiliser dynamic_cast<>(), même si la méthode n'aura aucun contenu.
    Tu vas en avoir combien des dynamic_cast, 50 ?

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/06/2007, 17h41
  2. Communication entre objets via .NET Remoting
    Par JBidouille dans le forum Windows Forms
    Réponses: 3
    Dernier message: 30/05/2007, 22h52
  3. communication entre jsp avec des liens
    Par opensource dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 09/05/2007, 14h54
  4. Communication entre objet via "Parent" ?
    Par starkson dans le forum Windows Forms
    Réponses: 11
    Dernier message: 17/02/2007, 18h22
  5. communication entre ordi via téléphone
    Par wonderboutin123 dans le forum Autres Logiciels
    Réponses: 7
    Dernier message: 09/12/2006, 13h14

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