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 :

probleme de conception


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 86
    Par défaut probleme de conception
    Bonjour,

    Je suis en traine de developer une clase de base ( classe abstraite) pou heriter de ce classe deux classes types.

    mon clase de base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    classe CBase
    {
       public :
            void fct1();
            void fct2();
       protected :
            void fct3();
            void fct4() = 0 ;
            CBase() // afin d'initialiser des membres privées.
      private:
     
           socket_TCP  socket_ // socket juste pour dire que je definis une socket
    }
    Jusqu'a la je n'ai pas de soucis tout va bien ; j'herite et je definis ma fonction fct4() qui differe d'une classe a l'autre.

    Les deux fonctions public ( fct1 et fct2) utilise le membre privé socket_, jusqu'a la je n'ai pas de problemes.

    Apres que j'ai developper une classe B qui herite de CBAse, je voulais heriter une deuxieme class C, et c'est la que j'ai vu que j'ai un probleme de conception :
    Le classe B utilise un socket de type TCP (socket_TCP), alors que mon class C le type de scoket est SSL .

    L'idée de faire de faire une classe de base et heriter parceque les deux classes B et C differe juste de la fonction virtuelle pure (fct4) , mais apres je me suis rendu comptes qu'il differe aussi de type de socket.

    J'ai pensé a deux solutions :
    1. De rendre mon class CBase template , dans ce cas mon classe CBase devient :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    template <typename T>
    classe CBase
    {
       public :
            void fct1();
            void fct2();
       protected :
            void fct3();
            void fct4() = 0 ;
            CBase() // afin d'initialiser des membres privées.
      private:
     
           T  socket_ // socket juste pour dire que je definis une socket
    }
     
     
    //et puis :
     
    class B : public CBase <socket_TCP>
    {
    .....
    };
     
    class C : public CBAse <socket_SSL>
     {
    .....
    };
    2. De changer completement le design, et de developper un seul class template et de specialiser la fonction fct4 (qui differe d'une classe a l'autre)


    Pouriez vous m'indiquer si j'ai le bon resolution, si non quelles sont vos suggerations ?


    Merci en avance

  2. #2
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 86
    Par défaut
    Citation Envoyé par kass28 Voir le message
    Bonjour,

    Je suis en traine de developer une clase de base ( classe abstraite) pou heriter de ce classe deux classes types.

    mon clase de base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    classe CBase
    {
       public :
            void fct1();
            void fct2();
       protected :
            void fct3();
            void fct4() = 0 ;
            CBase() // afin d'initialiser des membres privées.
      private:
     
           socket_TCP  socket_ // socket juste pour dire que je definis une socket
    }
    Jusqu'a la je n'ai pas de soucis tout va bien ; j'herite et je definis ma fonction fct4() qui differe d'une classe a l'autre.

    Les deux fonctions public ( fct1 et fct2) utilise le membre privé socket_, jusqu'a la je n'ai pas de problemes.

    Apres que j'ai developper une classe B qui herite de CBAse, je voulais heriter une deuxieme class C, et c'est la que j'ai vu que j'ai un probleme de conception :
    Le classe B utilise un socket de type TCP (socket_TCP), alors que mon class C le type de scoket est SSL .

    L'idée de faire de faire une classe de base et heriter parceque les deux classes B et C differe juste de la fonction virtuelle pure (fct4) , mais apres je me suis rendu comptes qu'il differe aussi de type de socket.

    J'ai pensé a deux solutions :
    1. De rendre mon class CBase template , dans ce cas mon classe CBase devient :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    template <typename T>
    classe CBase
    {
       public :
            void fct1();
            void fct2();
       protected :
            void fct3();
            void fct4() = 0 ;
            CBase() // afin d'initialiser des membres privées.
      private:
     
           T  socket_ // socket juste pour dire que je definis une socket
    }
     
     
    //et puis :
     
    class B : public CBase <socket_TCP>
    {
    .....
    };
     
    class C : public CBAse <socket_SSL>
     {
    .....
    };
    2. De changer completement le design, et de developper un seul class template et de specialiser la fonction fct4 (qui differe d'une classe a l'autre)


    Pouriez vous m'indiquer si j'ai le bon resolution, si non quelles sont vos suggerations ?


    Merci en avance
    alors, personne a une idée ?

    Merci

  3. #3
    Membre éclairé
    Avatar de Le Barde
    Homme Profil pro
    Chanteur
    Inscrit en
    Juillet 2007
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chanteur

    Informations forums :
    Inscription : Juillet 2007
    Messages : 343
    Par défaut
    Ben avec les maigres connaissances que j'ai, un template me paraît une bonne solution... Si tu tenais simplement à être rassuré, je crois que ceci peut être une solution correcte.

  4. #4
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Par défaut
    Moi je dirais pareil.

    Vu que ton architecture ne presente pas une complexité énorme, le template me parait tout indiqué.

    Il existe une autre solution, en faisant une classe abstraite cGenericSocket dont dérivent socket_TCP et socket_SSL et de ne pas déclarer le membre socket_

    A la place, par exemple, tu peux déclarer trois méthodes virtuelles (qui renvoient NULL par défaut) dans la classe cBase :

    - getSocketGeneric()
    - getSocketSSL()
    - getSocketTCP()

    Et dans la classe B :

    - getSocketGeneric() renvoit this, casté en cSocketGeneric
    - getSocketSSL() renvoit NULL
    - getSocketTCP() renvoit this

    Et dans la classe C :

    - getSocketGeneric() renvoit this, casté en cSocketGeneric
    - getSocketSSL() renvoit this
    - getSocketTCP() renvoit NULL


    Ensuite, dans la classe mère CBase et ses dérivées, tu n'utilises pas le membre socket_ qui n'est pas déclaré mais les fonctions virtuelles getSocketGeneric(), getSocketSSL() et getSocketTCP().

    Doit y avoir moyen de faire un truc dans ce genre si les template ne s'applique pas (j'ai déjà eu des soucis avec les templates quand les règles d'héritages sont un peu trop nombreuses) mais je suis pas sûr que ce soit l'idéal, pour moi, c'est plus du "bricolage"

    En plus, avec les template, toutes tes fonctions/données (et leur type exact) sont connues à la compilation, donc le compilo n'utilisera que très peu les fonctions virtuelles, et tu gagnera en performances (même si ce n'est surement pas significatif...)

  5. #5
    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 kass28 Voir le message
    Pouriez vous m'indiquer si j'ai le bon resolution, si non quelles sont vos suggerations ?
    Comment veux-tu qu'on puisse le faire? A nouveau, une conception se fait dans le cadre d'une utilisation cible. (Je sais, ca disqualifie au moins les 3/4 des conceptions faites au cour, dans les tutoriels sur le net et les bouquins) Sans connaitre celle-ci, c'est difficile de juger. On peut bien deviner des utilisations, ou commencer a analyser les cas possibles. Mais plus tu demanderas de travail a ceux qui voudraient te repondre, moins tu as des chances d'avoir des reponses, et plus il y a de risques que les reponses ne conviennent en fait pas.

Discussions similaires

  1. problème de conception : cycle
    Par FarookFreeman dans le forum Diagrammes de Classes
    Réponses: 13
    Dernier message: 20/10/2005, 10h15
  2. Probleme de conception pour un update Oracle!
    Par vempiria dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/09/2005, 10h28
  3. [Language]Problème de conception
    Par lautre dans le forum Langage
    Réponses: 5
    Dernier message: 26/09/2005, 07h56
  4. [Evenement]Probleme de conception
    Par le Daoud dans le forum Interfaces Graphiques en Java
    Réponses: 5
    Dernier message: 26/05/2005, 14h12
  5. probleme de conception de classe
    Par NhyMbuS dans le forum C++
    Réponses: 2
    Dernier message: 08/05/2005, 17h10

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