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 :

Pb conception


Sujet :

C++

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    114
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Par d�faut Pb conception
    Bonjour,

    j'ai un petit souci de conception et mon probl�me n'est pas forcemment complexe mais long � expliquer.C'est pourquoi j'ai d�coup� le probl�me en morceaux.

    Introduction:
    Mon objectif est d'afficher/modifier dans un controle graphique les differents champs de mes objets.
    Pour cela j'utilise un controle MFC de type EPropCtrl avec une classe IPropertyHost definie de la mani�re suivante :


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class IPropertyHost
    {
    public:
        virtual void GetProperties( EPropList& PropList ) {}
    };
     
    // mon controle graphique (ressemble a un listBox)
    class EPropCtrl
    {
        public:
        SetPropPointer( IPropertyHost* pHost);
    };

    Pratiquement si j'ai une classe simple (class Simple)
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    class Simple
    {
    protected:
        int iValue;
    };
    dont je veux afficher/modifier les propri�tes je fais la chose suivante

    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
     
    class SimpleProp : public Simple,
                       public IPropertyHost
    {
    public:
        virtual void     GetProperties( EPropList& PropList )
        {
            PropList.AddPropInt(this,_T("iValue"),&iValue, false);
        }
     
     
     
        IPropertyHost*     GetPropPointer() { return this; }
    protected:
        int iValue;
    };
    Ensuite j'appelle mon controle comme ca:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    EPropCtrl  objPropCtrl; // Objet graphique affichant des propriétes
    SimpleProp simpleProp; //Objet SimpleProp
    objPropCtrl.SetPropPointer( simpleProp.GetPropPointer() );
    //JUSQU ICI TOUT VA BIEN ET CA FONCTIONNE

    //----------------------------------------------------------------
    // maintenant considerons les objets suivants B et A encapsulant
    // l'acces a des structures imbriquees

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    typedef struct tagStructB
    {
        int        iSizeB;
        char*    szTextB;
    } StructB;
     
    typedef struct tagStructA
    {
        int        iSizeA;
        char*    szTextA;
        StructB sStructB;
    } StructA;
     
     
    class B
    {
    public:
        B(structB& refStructB) { m_refStructB = refStructB ;}
        int        GetSize() {return m_StructB.iSizeB;}
        char*    GetText() {return m_StructB.szTextB;}
     
    protected:
        structB& m_refStructB;
    };
     
     
    class A
    {
    public:
        A();
        int        GetSize() {return m_StructA.iSizeA;}
        char*    GetText() {return m_StructA.szTextA;}
        B&        GetB() { return m_B; }
     
     
    protected:
        structA m_StructA;
        B        m_B;
    };
     
    Use :
     
    A m_a;
    int iSizeA = m_A.GetSize(); // recupere la valeur du champ de ma structure A
    m_A.GetB().GetSize();
    Si je veux afficher les proprietes avec mon controle graphique et en prenant le mod�le pr�c�dent

    Je vais vouloir faire :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    class BProp: public B,
                 public IPropertyHost
    {
        public:
            virtual void     GetProperties( EPropList& PropList ) { PropList.AddPropInt(this,_T("iSizeB"),&m_refStructB.iSizeB, false);
    PropList.AddPropString(this,_T("szTextB"),&m_refStructB.szTextB, false);
     
            IPropertyHost*     GetPropPointer() { return this; }
    };
     
    class AProp: public A,
                 public IPropertyHost
    {
        public:
            virtual void     GetProperties( EPropList& PropList )
            {
     
    PropList.AddPropInt(this,_T("iSizeA"),&m_StructA.iSizea, false);
    PropList.AddPropString(this,_T("szTextA"),&m_StructA.szTextA, false);
     
    ///////////// PROBLEME /////////////////////
                m_B.GetProperties( PropList );
     
      //En effet je ne peux pas appeler GetProperties car appartient a Bprop et non pas a B
     
     
     
            }
     
     
            IPropertyHost*     GetPropPointer() { return this; }
    };
     
     
     
    EPropCtrl  objPropCtrl; // Objet graphique affichant des propriétes
    AProp        objAProp; //Objet AProp
     
    objPropCtrl.SetPropPointer( objAProp.GetPropPointer() );
    /////////////////// PROBLEME : COmment architecture mon soft
    Pour que je puisse afficher les propri�tes de mon objet A ainsi que du B a l'interieur ????

  2. #2
    Expert confirm�
    Avatar de Swo�g
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par d�faut
    En faisant h�riter Bprop de Aprop et de B...

    bien s�r, �a sous-entend que le losange d'h�ritage entre Bprop, Aprop, B et A soit virtuel.. sinon, il risque d'y avoir pas mal de bugs
    R�dacteur "�clectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les R�gles du Forum - Mon Site Web sur DVP.com (D�veloppement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne r�pondrai � aucune question technique via MP, MSN ou Skype : les Forums sont l� pour �a !!! Merci de me demander avant de m'ajouter � vos contacts sinon je bloque !
    pensez � la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    114
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Par d�faut
    Ca veut dire que je pourrais faire quoi dans AProp ?

    virtual void GetProperties( EPropList& PropList )
    {
    PropList.AddPropInt(this,_T("iSizeA"),&m__StructA.iSizeA, false);
    PropList.AddPropString(this,_T("szTextA"),&m__StructA.szTextA, false);
    m_B.GetProperties( PropList ); // <----- CANNOT WORK
    }






    Citation Envoy� par Swo�g
    En faisant h�riter Bprop de Aprop et de B...

    bien s�r, �a sous-entend que le losange d'h�ritage entre Bprop, Aprop, B et A soit virtuel.. sinon, il risque d'y avoir pas mal de bugs

  4. #4
    Expert confirm�
    Avatar de Swo�g
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par d�faut
    �a ne modifiera pas Aprop par rapport � ce que tu pouvais faire avec ta structure...

    �a modifiera seulement Bprop
    R�dacteur "�clectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les R�gles du Forum - Mon Site Web sur DVP.com (D�veloppement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne r�pondrai � aucune question technique via MP, MSN ou Skype : les Forums sont l� pour �a !!! Merci de me demander avant de m'ajouter � vos contacts sinon je bloque !
    pensez � la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    114
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Par d�faut
    Citation Envoy� par Swo�g
    �a ne modifiera pas Aprop par rapport � ce que tu pouvais faire avec ta structure...

    �a modifiera seulement Bprop
    Mon probleme est que justement je ne peux pas avoir acces a BProp en derivant juste mon AProp.

    En fait une solution a mon probleme serait de copier/coller mes classes existantes et de reecrire mon Aprop comme contenant un BProp mais je voulais eviter car ca faisait de la reecriture de code pour rien.

  6. #6
    Expert confirm�
    Avatar de Swo�g
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par d�faut
    OK... j'ai relu ton code, et je viens de comprendre ce que tu veux faire...

    pas �vident en effet... il faudrait pouvoir affecter un BProp � Aprop.m_B

    bon, oublie ma suggestion alors...

    voyons... le plus simple, je pense, serait de d�clarer dans A, m_B comme �tant un B* ou un B& et non un B, comme �a le polymorphisme fonctionnera
    R�dacteur "�clectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les R�gles du Forum - Mon Site Web sur DVP.com (D�veloppement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne r�pondrai � aucune question technique via MP, MSN ou Skype : les Forums sont l� pour �a !!! Merci de me demander avant de m'ajouter � vos contacts sinon je bloque !
    pensez � la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  7. #7
    Membre confirm�
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    114
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 114
    Par d�faut
    Et en utilisant le Pattern Visitor ???
    Car mes classes A et B sont non modifiables (enfin je prefere pas)

    Citation Envoy� par Swo�g
    OK... j'ai relu ton code, et je viens de comprendre ce que tu veux faire...

    pas �vident en effet... il faudrait pouvoir affecter un BProp � Aprop.m_B

    bon, oublie ma suggestion alors...

    voyons... le plus simple, je pense, serait de d�clarer dans A, m_B comme �tant un B* ou un B& et non un B, comme �a le polymorphisme fonctionnera

  8. #8
    Expert confirm�
    Avatar de Swo�g
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par d�faut
    Je ne suis pas s�r que le pattern visitor soit utilisable dans ce cas l�si m_B de la classe A est de type B, alors tu ne pourras, de toutes fa�ons, pas lui greffer de GetProperties puisque � l'allocation de m_B, une copie sera faite, et les possibilit�s de polymorphisme annul�es...
    R�dacteur "�clectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les R�gles du Forum - Mon Site Web sur DVP.com (D�veloppement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne r�pondrai � aucune question technique via MP, MSN ou Skype : les Forums sont l� pour �a !!! Merci de me demander avant de m'ajouter � vos contacts sinon je bloque !
    pensez � la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  9. #9
    Membre chevronn�
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Par d�faut
    Personellement, je reverrais la conception. Je trouve que c'est tr�s compliqu� et pas tr�s juste.
    Pour la d�finition d'une interface IPropertyHost, ok. Retourner la liste des propri�t�s via un param�tre plut�t que par un type de retour, pourquoi pas.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    class IPropertyHost
    {
    public:
        virtual void GetProperties( EPropList& PropList ) {}
    };
    En revanche ce qui suit me para�t plus que douteux
    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
     
    class SimpleProp : public Simple,
                       public IPropertyHost
    {
    public:
        virtual void     GetProperties( EPropList& PropList )
        {
            PropList.AddPropInt(this,_T("iValue"),&iValue, false);
        }
     
     
     
        IPropertyHost*     GetPropPointer() { return this; }
    protected:
        int iValue;
    };
    En terme de conception, en quoi SimpleProp "est un" Simple ?
    Ensuite, SimpleProp::iValue masque la d�finition de Simple::iValue je suis �tonn� que le compilateur ne donne pas au minimum un warning.
    Pour finir la fonction GetPropPointer() est une h�r�sie. Par h�ritage, une instance de SimpleProp EST UNE instance de IPropertyHost, cette fonction est donc parfaitement inutile.
    Je comprend bien que cela pose des soucis ensuite, mais au lieu d'essayer de traiter les sympt�mes, je pense que c'est beaucoup plus simple de traiter le mal � sa source.

Discussions similaires

  1. [Concept] M�tadatas ?
    Par melinda dans le forum D�cisions SGBD
    R�ponses: 5
    Dernier message: 10/11/2004, 11h56
  2. [Concept] R�plication
    Par melinda dans le forum D�cisions SGBD
    R�ponses: 4
    Dernier message: 31/03/2003, 17h29
  3. [Concept] BD ou Gestion par fichier. Int�r�t de la BD ?
    Par Cian dans le forum D�cisions SGBD
    R�ponses: 3
    Dernier message: 28/11/2002, 12h16
  4. [Concept] Curseur cot� client et curseur cot� serveur
    Par freud dans le forum D�cisions SGBD
    R�ponses: 2
    Dernier message: 13/09/2002, 22h13
  5. [Concept] Stabilit� d'une base de donn�e
    Par lassmust dans le forum D�cisions SGBD
    R�ponses: 3
    Dernier message: 03/07/2002, 16h16

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