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 :

Interrogation sur ma structure des informations : héritage ?


Sujet :

C++

  1. #1
    Membre actif
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Points : 234
    Points
    234
    Par défaut Interrogation sur ma structure des informations : héritage ?
    Bonour,

    Comme indiqué dans le titre, je me pose la question de savoir si j'ai fais le bon choix.
    Voici comment j'ai fais ma structuration.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    class C1
    { friend system; ...}
    typedef std::list<C1> TC1List;
     
    class C2
    { friend system; ...}
    typedef std::list<C2> TC2List;
     
    class C3
    { friend system; ...}
    typedef std::list<C3> TC2List;
     
    class System
    {
    TC1List   m_MaListeDeC1;
    TC2List   m_MaListeDeC2;
    TC3List   m_MaListeDeC3;
    ...
    }
    Les "Friend" servent à utiliser les membres et methodes de chaque classe dans ma classe System sans faire d'héritage.

    Je me demande si quelque chose ne m'échape pas sur la notion d'héritage :
    J'ai voulu éviter l'héritage parceque je ne voulais pas que à chaque instance de "System" soit également instancié chacune des classes et pour gérer mes liste d'objets dynamiquement.
    Mais est ce que c'est vraiment ce qui se passe ?
    Et est ce que il ne vaut mieux pas faire d'héritage. ? Je pose cette question parceque maintenant ma classe System commence à devenir dangereusement grosse et je voudrais la fractionner, mais comment faire ? L'utilisation des "friend", je le sens pas !

    Merci d'avance de me donner votre avis sur mon problême.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Pourquoi ne pas tout simplement déclarer comme publics les membres utilisés par ta classe System?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre actif
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Points : 234
    Points
    234
    Par défaut
    Bonjour Medinoc,
    Pas de membre public car je veux faire de l'encapsulation : je veux que les utilisateurs passe exclusivement par la classe system pour proteger et gerer l'integrite des infos.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Dans ce cas, tu te retrouves confronté à un manque de pratiquement tous les langages orientés objet: Tu ne peux pas déclarer des membres qui sont "public pour une certaine classe, privés pour toutes les autres" tout en gardant des membres privés auxquels la classe en question n'accèdera pas...

    Sauf bien sûr si tu utilises une délimitation plus "physique", comme les packages Java, les assemblys .Net, ou les DLLs C++...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par kase74 Voir le message
    Je me demande si quelque chose ne m'échape pas sur la notion d'héritage :
    En toute franchise, j'ai un peu de mal à cerner vraiment ton problème
    Citation Envoyé par kase74 Voir le message
    J'ai voulu éviter l'héritage parceque je ne voulais pas que à chaque instance de "System" soit également instancié chacune des classes et pour gérer mes liste d'objets dynamiquement.
    Tel que tu l'as écris, à chaque instance de "System", tu auras une instance pour chacune de tes listes.
    Citation Envoyé par kase74 Voir le message
    Et est ce que il ne vaut mieux pas faire d'héritage. ?
    Réponse en deux temps:
    1. Si System a un héritage multiple sur chacune de tes listes, ça va devenir coton à gérer!
    2. La vrai question à te poser est de savoir si ça un sens d'hériter.

    Citation Envoyé par kase74 Voir le message
    Je pose cette question parceque maintenant ma classe System commence à devenir dangereusement grosse et je voudrais la fractionner, mais comment faire ? L'utilisation des "friend", je le sens pas !

    Merci d'avance de me donner votre avis sur mon problême.
    Peut-être que ta classe system en fait 'trop'. Elle signifie beaucoup de chose à la fois, donc tu te retrouves avec une classe énorme. Je pense que c'est plus un problème de conception que d'implémentation, et à fortiori de C++.
    A mon avis, commence par réfléchir à ta conception.

  6. #6
    Membre actif
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Points : 234
    Points
    234
    Par défaut
    Tu as raison 3DArchi, ma classe system aurait pu et aurait du être fractionnée. Je me suis fais piéger parceque le CDC n'était pas complet et je n'avais donc pas une vision global du problème ! C'est pas facile tous les jours ...

Discussions similaires

  1. Interrogation sur le fonctionnement des sessions
    Par mdordenart dans le forum Windows Communication Foundation
    Réponses: 2
    Dernier message: 10/03/2009, 09h02
  2. [Conception] Confirmation sur la structure des tables de ma bdd
    Par Strauss dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 04/07/2007, 13h54
  3. [Bonne pratique] Précisions sur la structure des répertoires ?
    Par jeoff dans le forum Subversion
    Réponses: 1
    Dernier message: 05/01/2007, 17h41
  4. Réponses: 4
    Dernier message: 21/11/2006, 13h37

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