Bonjour,
Je suis actuellement en projet de deuxième année de BTS informatique où nous devons faire un logiciel en C++ sous QT. Je précise dès le départ, car peut-être mon problème vient de ma manière de pensée, j'apprécie bien plus le java au C++ (Mais bon on choisit pas son projet, on fait avec ^^" ). Nous programmons en n-tiers (ici notre niveau nous impose la version simplifiée, la 3 couches Client-Métier-Physique) et ici les problèmes commencent étant donnés que le C++ ne connait pas les packages comme en java. Et pour finir nous utilisons aussi le design patterns Factory (très agréable à utiliser en C++ sachant que les interfaces n'existent pas et qu'il est possible de faire des héritages privés ^^" ) et donc voici en gros la chose par étape :
Couche Client :
-Notre IHM.h include la MetierFactory pour avoir accès aux Implémentation des services Métier. Et on crée des pointeur de ses objets ( EXEMPLE : CapteurService * capteurServiceImpl
-Dans le .cpp on utilise ses objets (après les avoir au préalable déclarer dans le constructeur et préparer la destruction dans le destructeur) pour appeler des fonctions quelconque appartenant à ceux-ci.
Couche Metier :
-Restons avec l'exemple de CapteurServiceImpl. Dans le CapteurServiceImpl.h j'include la PhysiqueFactory pour avoir accès aux Implémentation des services Physique (Ici CapteurDataServiceImpl).
-Dans le .cpp je fais la même chose qu'avant. Appel de fonction donc.
Couche Physique :
-Je fais enfin ce que les fonctions appeler sont censées faire sur les composants.
Alors le problème ne vient pas de là, même si s'en ai partiellement la cause. Ce découpage en couche et ces includes me donne un schéma très simplifié de ce style :
Par la suite j'utilise une fonction du nom de connect :
connect(objet1,SIGNAL(monSignal()),objet2,SLOT(monSlot()))
Et nous voici au problème suivant :
Ce connect se trouve dans une Impl en Physique et si les deux premiers paramètres sont simples a avoir les deux autres je n'ai absolument pas trouvé comment les avoir sans faire une boucle d'include ou faire un truc très moche, je m'explique.
Le connect de mon Impl en Physique doit renvoyé à celle en Métier du même nom (CapteurDataServiceImpl à CapteurServiceImpl en gros, donc il faut que CapteurDataServiceImpl ai un include de la seconde). Le problème est que CapteurServiceImpl a un include de la Physique Factory qui a elle même une include de CapteurDataServiceImpl ... BONJOUR LA BOUCLE. En gros cela donne ça :
Alors au début j'ai essayer toute les méthodes les moins crades possibles comme les namespaces (mais les packages gênes) ou alors d'éssayer d'includer d'autres classes ... Mais rien à faire ça marche pas et je sait plus quoi faire. Je peut à la limite faire une autre classe qui servira à recevoir le connect et qui ne servira qu'à ça (donc aucune connection avec les factory) mais je trouve ça très très moche donc pour un projet d'une entreprise ...