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 :

Membres privés et membres publics


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 28
    Par défaut Membres privés et membres publics
    Bonsoir je fais de la programmation en c++ et j'aimerais savoir quel est le but de definir des membres privés dans une classe
    On me repond toujours que c'est pour proteger tes membres .........
    Mais en faisant appel a un mutateur ces meme membres pourront etre changés
    Si quelqu'un pourrait bien m'expliquer les raisons
    Merci

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 4
    Par défaut
    Ceci permet d'avoir plus de contrôle sur la modification.
    Si tu laisses l'attribut public, n'importe quelle méthode d'une autre classe
    pourra modifier l'attribut d'une façon qui pourrait ne pas te plaire.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class Eleve{
    private :    
        int moyenne;
    public : 
        void fixe_moyenne(int m){
            if(m>20 || m<0){
                 cout << "Moyenne inadéquate" << endl;
            }else{
                moyenne = m;
            }
        };
    }
    Ainsi, tu l'utilisateur ne pourra fixer une moyenne en dehors de [0,20].

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Citation Envoyé par Samaie Voir le message
    Mais en faisant appel a un mutateur ces meme membres pourront etre changés
    C'est pour ça qu'on est supposé mettre le moins de mutateurs possibles (certains dont je suis diront même de ne jamais en mettre).

    MAT.

  4. #4
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 28
    Par défaut
    alors ds ce cas la ou ne pourra pas changer du tout nos membres privés??

  5. #5
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Si au travers de fonctions dédiées, qui incidemment altèreront l'état interne de l'objet. Mais ça, c'est leur problème à elles. Pas celui des clients.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  6. #6
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    On encapsule un comportement, pas des propriétés.
    De ce fait, dans une bonne architecture objet les accesseurs,mutateurs devrait être interdit (suis-je trop extrémiste ?) ou tou du moins limité au possible.

    Un bon article la dessus :
    http://blog.emmanueldeloget.com/inde...-encapsulation
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  7. #7
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Le gros problème, quand tu laisse les membres publics, c'est que n'importe qui peut décider de les modifier n'importe où.

    Si, pour une raison ou une autre, tu décide de "réorganiser" tes membres (par exemple, en remplaçant les trois valeurs "séparées" représentant les coordonnées X, Y et Z d'un point trois dimensions en un tableau contenant les trois valeurs), tu devra parcourir l'ensemble de ton code (ou du moins de toutes les fonctions qui utilisent ta classe) pour t'assurer de répercuter la modification partout, et cela peut rapidement devenir ingérable.

    Si tu rend les membres privés, et que tu y adjoint des mutateurs/accesseurs, le seul moyen de récupérer la valeur (ou de la modifier) passe par... ces derniers

    Si, donc tu décide, pour une raison ou une autre, de réorganiser la manière dont les membres seront maintenus en mémoire, tu sera sur que la seule chose à laquelle il te faudra veiller sera... d'adapter le comportement des mutateurs/accesseurs, tout le reste du code ne subissant absolument aucune contrainte due au changement

    De la même manière, si tu veux modifier le comportement des mutateurs/accesseurs (par exemple en rajoutant un test de cohérence quelconque), tu peux parfaitement apporter les modifications de manière tout à fait transparente pour l'utilisateur de ta classe.

    Au final, tu gagne, en tant que concepteur de la classe, en liberté de mouvement (comprend: en facilité de modification au sein de la classe), et en tant qu'utilisateur de la classe en pérennité de ton code et en compatibilité entre versions différentes.

    Bref, tu es gagnant sur tous les tableaux

    C'est la raison pour laquelle, bien qu'il soit toujours conseillé de s'interroger sur l'utilité d'avoir un mutateur ou un accesseur, il est toujours plus sage de préférer une visibilité restrictive sur les différents membres

    Le tout se faisant dans un seul et unique but: t'inciter à considérer ta classe comme un objet capable de rendre certains services en émettant ou en réagissant à des messages, et non plus comme la somme de l'ensemble de ses données.

    Encore une fois, on se rend compte que la classe représente au final bien plus que la somme de ses composants
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. Réponses: 6
    Dernier message: 22/08/2007, 06h19
  2. reccupérer un membre privé d'une classe
    Par ouinih dans le forum C++
    Réponses: 10
    Dernier message: 16/08/2007, 11h37
  3. Des membres privés
    Par Gruik dans le forum C
    Réponses: 6
    Dernier message: 06/12/2006, 22h13
  4. Heritage et membre privé
    Par b Oo dans le forum C++
    Réponses: 5
    Dernier message: 27/11/2006, 22h20
  5. acces au membres privés
    Par le y@m's dans le forum Langage
    Réponses: 6
    Dernier message: 22/09/2005, 15h52

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