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 :

[conception] vecteur de classes


Sujet :

C++

  1. #1
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut [conception] vecteur de classes
    Bonjour à tous, et bonnes fêtes

    j'ai un petit problème de conception à vous poser. Je pense qu'il doit être relativement courant, mais je ne parviens pas à trouver une solution satisfaisante. Alors je me disais que peut-être vous auriez des proposition à me faire concernant l'architecture.

    Je cherche à construire un système tel que:
    1/ J'ai une Interface (classe abstraite) I
    2/ J'ai une série d'objets A1, A2, A3, ... qui héritent de I
    3/ J'ai une classe C qui possède un tableau (vector) d'objets A1, A2, etc..., dont chaque élément sera une instance de A1, A2, ... ce vecteur sera noté V.

    Mes questions:
    - Je voudrais avoir 2 fichiers par classe (Interface.cpp + Interface.h, A1.cpp + A1.h, ..., C.cpp + C.h) quel fichier va inclure quel fichier?
    - D'un point de vue de l'architecture, comment s'organiser pour que la création de V soit possible?

    P.S: il y a peut-être des erreurs sur les termes utilisés dans mon message, car je ne suis pas encore très sûr de moi en poo.

  2. #2
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut Re: [conception] vecteur de classes
    Citation Envoyé par r0d
    Je cherche à construire un système tel que:
    1/ J'ai une Interface (classe abstraite) I
    2/ J'ai une série d'objets A1, A2, A3, ... qui héritent de I
    3/ J'ai une classe C qui possède un tableau (vector) d'objets A1, A2, etc..., dont chaque élément sera une instance de A1, A2, ... ce vecteur sera noté V.

    Mes questions:
    - Je voudrais avoir 2 fichiers par classe (Interface.cpp + Interface.h, A1.cpp + A1.h, ..., C.cpp + C.h) quel fichier va inclure quel fichier?
    En général, le .cpp inclus le .h correspondant (et je te conseille de faire en sorte que ce soit le premier .h inclus).

    Les classes Ai héritent de I donc il faut que la définition de I soit disponible, donc les Ai.h incluent Interface.h.

    C.h devra aussi inclure Interface.h. On n'a pas assez d'information pour dire si d'autres inclusions sont nécessaires.

    - D'un point de vue de l'architecture, comment s'organiser pour que la création de V soit possible?
    Je ne vois pas tellement le problème. Ce qui te bloque peut-être: V doit contenir des pointeurs vers I parce qu'il peut contenir des objets de type différent.

  3. #3
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    J'avais 3 problèmes:
    1/ Comme tu l'as dit, j'essayais de faire un vecteur de classe, et non de pointeurs, donc ça ne marchait pas. C'est corrigé.

    2/ Je n'arrivais pas à deleter correctement les objets contenus dans mon vecteur. En effet, j'utilisais la methode vector::empty() (bon, en réalité, j'utilise un CArray de la mfc, mais c'est exactement pareil il me semble), et ça ne fonctionnait pas. J'ai été obligé de faire une boucle et de deleter mes objets "a la mano":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (int i=0; i<monVecteur.GetSize(); i++)
    {
        delete monVecteur.GetAt(i);
    }
    Et là ça marche, mais je ne comprends pas pourquoi.

    3/ Je trouve qu'il y a quelque chose d'étrange au niveau des includes:
    mes Ai.h inclusent le I.h, jusque là ça va.
    Ce que je trouve "pas naturel" c'est que mon C.h doit inclure tous les Ai.h + le I.h. Je ne sais pas... ça ne me parait pas logique, et puis ça fait beaucoup de #include!

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    2/ Ton conteneur ne va détruire que les pointeurs qu'il contient, pas les objets qu'ils pointent. Il est tout à fait logique que ce soit toi qui libère la mémoire que tu as précédemment allouée avec new.

    3/ C.h ne doit en fait rien inclure. Une déclaration anticipée de la classe I fera l'affaire, c'est C.cpp qui incluera tout le monde dont il a besoin. Voir la FAQ C++ pour plus de précisions sur les déclarations anticipées.

  5. #5
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Ok, je te remercie pour ces précisions.
    Si je comprends bien, si j'ai 20 objets qui héritent de I et qui peuvent potentiellement être utilisés par ma classe C, j'aurais 20 includes dans C.cpp?

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Pas spécialement non. Il n'y a que là où tu utilises une classe que tu doive inclure l'en-tête qui la définit. En l'occurence, si ta classe C ne manipule que des I alors tu ne devras inclure que I.h. C'est là où tu vas créer/manipuler tes Ai qu'il faudra inclure les Ai.h correspondants.

  7. #7
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par r0d
    3/ Je trouve qu'il y a quelque chose d'étrange au niveau des includes: mes Ai.h inclusent le I.h, jusque là ça va. Ce que je trouve "pas naturel" c'est que mon C.h doit inclure tous les Ai.h + le I.h. Je ne sais pas... ça ne me parait pas logique, et puis ça fait beaucoup de #include!
    C'est pas impossible que ce soit nécessaire, mais ça me semble être rarement le cas. Un .h ne devrait inclure un autre .h que quand c'est nécessaire. Or il y a relativement peu de chose qui rende nécessaire la définition d'une classe;s'il n'y a pas de fonctions inline, il n'y a guère que
    • hériter de cette classe
    • la présence de membres de cette classe
    pour que la déclaration:ne suffise pas.

    Si je comprends bien, si j'ai 20 objets qui héritent de I et qui peuvent potentiellement être utilisés par ma classe C, j'aurais 20 includes dans C.cpp?
    Tout dépend de ce que tu entends pas être utilisés. Si la classe C construit des objets de ces types ou appelle des membres, oui, une déclaration dy type ne suffira pas et il faudra la définition, donc l'include qui va bien. Si on peut simplement lui passer des objets pour qu'ils soient stockés mais que l'interface I suffit aux manipulations à faire, ce ne sera normalement pas nécessaire.

  8. #8
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut

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

Discussions similaires

  1. [Conception] Hiérarchie de classes et maintenance
    Par olivier1978 dans le forum C++
    Réponses: 15
    Dernier message: 04/10/2007, 22h52
  2. Aide conception diagramme de classes Projet Web
    Par alves.seb dans le forum Diagrammes de Classes
    Réponses: 9
    Dernier message: 12/06/2007, 14h29
  3. vecteur de classe
    Par mohamed amine dans le forum Langage
    Réponses: 21
    Dernier message: 08/12/2006, 12h05
  4. [CONCEPTION] vector de classes heritées
    Par A-S-H dans le forum SL & STL
    Réponses: 9
    Dernier message: 28/12/2005, 09h50
  5. Conception d'une classe parente
    Par VincentB dans le forum Langage
    Réponses: 9
    Dernier message: 24/06/2003, 17h28

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