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 :

Dépendances de projets et problème de conception


Sujet :

C++

  1. #1
    Membre confirmé
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Juillet 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2004
    Messages : 289
    Points : 635
    Points
    635
    Par défaut Dépendances de projets et problème de conception
    Bonsoir à tous,

    Me revoila encore avec mes problèmes d'agents et de référence circulaire, surement un problème de conception mais je ne vois pas où ...

    Bon j'ai dans mon système des agents :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class IMPEXP cAgent : public cObjet {
    public:
    	cAgent (std::string Nom);
    	virtual ~cAgent ();
            [...]
     
    protected:
    	cListObjets *_Methodes;
    	cMessagerie *_Messagerie;
    };
    J'aimerais pour ces agents leur ajouter des IA : j'ai créé une classe d'interfaçage destinée à gérer les IA de l'agent et à les faire intervenir dans un ordre déterminé (par exemple "lecture des messages dans _Messagerie", "analyse de l'état de l'agent" ...).
    Comme ces IA ne sont pas connus à l'avance mais chargés via fichiers XML, j'ai dans l'idée d'une petite Factory ...

    Pour l'instant les classes Agent et InterfaceIA sont dans le même projet.
    Mon problème vient de la référence circulaire induite par mon projet "Agent" et mes projets "IAs". En effet la factory de création des IA dépend des projets "IAs", mais mes projets IA dépendent également du projet IA pour pouvoir travailler sur les agents (par exemple récupération des messages ou autre).

    J'ai surement un problème de conception mais je ne vois pas où ... et je n'ai pas envie de mettre toutes mes classes IA dans le projet "Agents".

    Quelqu'un a-t-il une idée ?
    Merci d'avance

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Salut,

    Dans le module Agents ajoute une interface pour la factory, l'implementation concrete de la factory qui instancie les IAs concretes faisant partie du module Ia.

    (Sinon il faut passer les std::string en const & et ne pas utiliser de pointeurs nus, mais a la limite ce n'est pas la question)

    MAT.
    (desole pas d'accents sur cette machine)

  3. #3
    Membre confirmé
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Juillet 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2004
    Messages : 289
    Points : 635
    Points
    635
    Par défaut
    Par interface t'entends une classe abstraite ? et faire dériver cette classe dans mon projet "IA" pour implémenter les méthodes virtuelles ?
    Je vais tester ce soir mais j'ai des doutes sur l'appel à une méthode d'une classe abstraite ...

    Sinon le const & y'a vraiment de la gagne au niveau temps d'exécution ?
    Et qu'est-ce que t'appelle les pointeurs nus ? (parce que les accesseurs sont dans les [...] )

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Citation Envoyé par Captain_JS Voir le message
    Par interface t'entends une classe abstraite ? et faire dériver cette classe dans mon projet "IA" pour implémenter les méthodes virtuelles ?
    Oui.
    Ensuite tu construits tes Agent en leur passant par référence la factory.

    Citation Envoyé par Captain_JS Voir le message
    Sinon le const & y'a vraiment de la gagne au niveau temps d'exécution ?
    Ca évite de faire une copie.
    En général on passe tous les types autres que les types de base par const & plutôt que par copie.

    Citation Envoyé par Captain_JS Voir le message
    Et qu'est-ce que t'appelle les pointeurs nus ?
    cListObjets* est un pointeur nu, je dirais qu'il vaudrait mieux les passer sous forme de références à la construction et les stocker sous forme de références également.
    (je pensais lors de mon message précédent que les objets étaient créés par Agent mais à la réflexion ça ne doit pas être le cas)

    MAT.

  5. #5
    Membre confirmé
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Juillet 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2004
    Messages : 289
    Points : 635
    Points
    635
    Par défaut
    En fait pour les pointeurs nus ils sont construits par les agents.

    Pour la factory (si j'ai bien compris), il faut que j'ai une méthode virtuelle pure autre que celle de construction de mes IA, sinon le compilo ne va pas aimer ... parce que le but est que chaque agent créé ses bouts d'IA à son chargement, donc appeller IntfIA->build(...) sur une classe abstraite ça me parait chaud à 1ère vue ... mais j'essaierai quand même ce soir

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Citation Envoyé par Captain_JS Voir le message
    En fait pour les pointeurs nus ils sont construits par les agents.
    Il faudrait mettre les pointeurs dans des std::auto_ptr à ce moment-là, parce que sinon par exemple si la construction de _Messagerie lève une exception alors _Methodes ne sera pas détruit.

    MAT.

  7. #7
    Membre confirmé
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Juillet 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2004
    Messages : 289
    Points : 635
    Points
    635
    Par défaut
    Bon j'essaie de tritouiller le problème dans tous les sens et je ne comprends quand même pas ...

    J'ai une classe "Monde" qui crée les agents à partir de fichiers XML. Cette classe est dans le même projet que mes agents.
    Si je passe la factory à mes agents à leur création, ça veut dire que mon Monde va instancier la factory, donc mon projet agent dépend encore de mon projet IA.

    En fait mon cycle est comme ceci (chaque flèche est une dépendance au sens de dépendance projet VS) :

    Agents ---> Factory ---> DllIA1 ---> Agents
    ---> DllIA2 ---> Agents

    Mes agents dépendent de la factory pour créer les IAs (sauf si une classe Tiers crée les IAs pour eux, ce qui déporte le problème mais ne le résout pas), la Factory dépend des classes d'IA (normal elle les instancie), et les IAs dépendent des agents car ils utilisent des méthodes propres aux agents.
    Si j'essaie de rajouter une interface à mes agents je rajoute une couche mais ne résout pas le problème.

    Pour l'interface si je sépare la classe abstraite de la classe concrète je crée une dépendance du projet "concret" vers le projet "abstrait". Mais mes agents ne peuvent pas instancier de classe abstraite (en tout cas pas dans cette version de VS ), donc je ne vois pas comment faire.

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Effectivement il faut par exemple que Monde soit dans un troisième module qui dépendrait des deux autres.
    Il n'y a pas vraiment de miracle, pour casser la référence croisée A <-> B il faut extraire ce qui dépend de B dans A et par exemple le remonter dans un C pour ne garder que A <- B et avoir du coup en plus A <- C -> B.

    MAT.

  9. #9
    Membre confirmé
    Homme Profil pro
    Consultant MOA
    Inscrit en
    Juillet 2004
    Messages
    289
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant MOA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2004
    Messages : 289
    Points : 635
    Points
    635
    Par défaut
    En fait je viens de trouver une solution : la méthode de création des IA de la factory est dans une Dll à part.
    Au chargement de la factory, la Dll est liée dynamiquement et la méthode de création est récupérée de la Dll.

    Donc le corps de la Factory est chez les agents, et la méthode de création des IA est dans une Dll, Dll dépendante de tous les projets IA.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Maven/JBoss] Problème de dépendances entre projets
    Par Cafeinoman dans le forum Wildfly/JBoss
    Réponses: 1
    Dernier message: 08/01/2014, 09h24
  2. Petit problème de conception sur access
    Par coooookinette dans le forum Modélisation
    Réponses: 3
    Dernier message: 18/12/2005, 18h24
  3. Réponses: 2
    Dernier message: 24/10/2005, 10h23
  4. Gestion des départements problème de conception
    Par snoopy69 dans le forum Modélisation
    Réponses: 7
    Dernier message: 11/10/2005, 13h08
  5. Problème de conceptions de tables
    Par dtavan dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/05/2004, 23h13

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