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é
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    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.
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  2. #2
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    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.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  3. #3
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    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!
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    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é
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    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?
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

  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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    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 éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    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.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  8. #8
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    tech lead c++ linux
    Inscrit en
    Août 2004
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : tech lead c++ linux

    Informations forums :
    Inscription : Août 2004
    Messages : 4 262
    Points : 6 680
    Points
    6 680
    Billets dans le blog
    2
    Par défaut
    « L'effort par lequel toute chose tend à persévérer dans son être n'est rien de plus que l'essence actuelle de cette chose. »
    Spinoza — Éthique III, Proposition VII

+ 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