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++

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 162
    Par défaut Probleme de conception
    Bonjour,

    Voila j'ai une classe Widget qui contient une liste d'objets de type Data par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class Widget
    {
    public:
    ...
    list<Data>& getList() const { return myList; }
     
     
    private:
    list<Data> myList;
    };
    En fait, je voudrais modifier le contenu de myList dans une autre classe qui appellerait widget.getList();
    Mais partout dans différents codes source ou je vois des getters, ils sont const, alors comment faire pour modifier ma liste a l'extérieur de Widget ?
    Il faut que je mette mutable devant myList ?
    Je sais que ca brise l'encapsulation mais comment faire sachant que le code et l'algo de modification de cette liste sont compliques et n'ont pas à se trouver dans la classe Widget ?

    Merci de vos réponses.

  2. #2
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    La modification à l'extérieur de la classe est-il indispensable?
    Parce que sinon tu peux proposer une méthode publique de ta classe, avec des paramètre adéquats, qui effectuerait directement le traitement sur la liste de la classe (privée).

  3. #3
    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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class Widget
    {
    public:
    ...
    const list<Data>& getList() const { return myList; }
    list<Data>& getList() { return myList; }
     
     
    private:
    list<Data> myList;
    };
    Mais Spout a raison. Si tu dois modifier myList en dehors, pourquoi ne pas ajouter la méthode adéquate dans ta classe Widget?

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Oui car conceptuellement, c'est Widget qui est responsable de cette liste. Si tu la proposes à l'extérieur pour modification, n'importe qui peut faire n'importe quoi avec cette liste et Widget ne peux plus en assurer le contenu, donc assumer ses responsabilités.

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 162
    Par défaut
    La modif se fait a l'exterieur car elle implique enormement de classes et d'objets qui n'ont rien a faire et n'ont pas a etre couples a la classe Widget.
    Ca me semblait plus propre de faire la modif a l'exterieur mais c'est vrai que ca donne acces a myList a n'importe qui ...

  6. #6
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Citation Envoyé par vandamme Voir le message
    Ca me semblait plus propre de faire la modif a l'exterieur mais c'est vrai que ca donne acces a myList a n'importe qui ...
    Du coup, là, tu es devant un mur, et pour y remédier tu devras faire quelque chose d'encore plus moche.
    Et personnellement, je trouve que c'est une meilleure conception de modifier l'objet en interne que de le faire faire à l'extérieur...

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Mais nan mais tu rajoutes un Widget::Add(Data&) qu'utilisera l'extérieur.

    Comme ça tu augmentes la cohésion et de se fait, ça diminue le couplage. Widget encapsule bien "Data"...

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Il faudrait peut être revoir les relations entre:
    1. la liste
    2. l'algorithme de modification
    3. "widget".

    Si c'est l'algorithme qui 'maintien' la liste pourquoi l'inclure dans "widget"?
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre éclairé
    Homme Profil pro
    Game Graphics Programmer
    Inscrit en
    Août 2006
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Game Graphics Programmer
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 408
    Par défaut
    Et si tu passais un foncteur à ta class Widget pour faire les modifications sur la liste?
    Du coup, ca te découplerait le Widget, l'algo de modification et la liste resterait privée...

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