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

Langages de programmation Discussion :

[POO] Pourquoi recourir aux Getters/Setters ?


Sujet :

Langages de programmation

  1. #1
    Membre actif
    Avatar de Wormus
    Inscrit en
    Septembre 2005
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 262
    Points : 276
    Points
    276
    Par défaut [POO] Pourquoi recourir aux Getters/Setters ?
    J'aimerai savoir pourquoi recourir aux getters/setters dans mes classes !
    Pourquoi ne pas laisser mon attribut en public.

    Je pose cette question parce que d'un coté on me dit tout le temps de ne pas mettre mes attribut en privé et d'un autre si je fais un getter et un setter et si je rejoute en plus une property (je travail en PYTHON) ça revient exactement au même !!!
    Bien sûr dans certaines circonstances cela peut s'avérer utile, si je veux que pouvoir avoir mon attribut en lecture (je fais donc qu'un getter) ou alors si je veux ajouter des condition (,...) sur mon setter ...

    Mais dans le cas où je fais rien de tout ça ya t-il rééllement un intérêt ?
    Est ce que je me trompe et qu'il est très fr"quent de laisser des attribut en public ?
    Bankaï !!

  2. #2
    Membre éclairé
    Avatar de MD Software
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    613
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 613
    Points : 680
    Points
    680
    Par défaut
    Tout est une histoire de maintenance. Imagine :
    Tu développes ton programme, et tu considères que tu n'as pas à contrôler l'accès à tes attributs. Tu les mets donc public. Mais lors d'une maintenance, tu te rends compte qu'il te faut modifier ta classe pour lui imposer une contrainte, par exemple qu'il est interdit de mettre 0 à un attribut. Pour faire cette modification, il te faut rajouter un setteur, et passer ton attribut en privé. Résultat : il va te falloir impacter cette modification à tous les clients de cette classe.
    Si tu avais utilisé des setteurs et getteurs dès le début, la maintenance aurait été beaucoup plus simple.
    MD Software
    ---------------------------
    F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi

  3. #3
    Membre expérimenté
    Avatar de Juju_41
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2003
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Février 2003
    Messages : 974
    Points : 1 557
    Points
    1 557
    Par défaut Re: [POO]Pk Getters/Setters
    Citation Envoyé par Wormus
    Mais dans le cas où je fais rien de tout ça ya t-il rééllement un intérêt ?
    Oui, si tu te rends compte que, la veille de rendre ton projet par exemple, une condition était nécessaire sur un attribut d'une classe, avec un setter tu corrigeras ton code rapidement alors que si tu n'en as pas mis, il va falloir en mettre un et te farcir tout le code
    Je dirais donc, pour te répondre, que mettre des accesseurs est une bonne habitude de programmation à prendre (enfin c'est mon avis)
    Avant de poster, merci de consulter les règles du forum

  4. #4
    Membre actif
    Avatar de Wormus
    Inscrit en
    Septembre 2005
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 262
    Points : 276
    Points
    276
    Par défaut
    Ah merci j'avais bizarrement pas pensé à ce point là !!
    J'ai effectivement déjà eu besoin de faire des modifications par ex de contraintes sur mes attributs mais étant donné que je mettais mes accesseurs (je connaissais pas ce terme ^^) automatiquement (même si je savais pas pk ^^), ce problème ne m'était pas apparu

    Merci beaucoup de vos réponses
    Bankaï !!

  5. #5
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 275
    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 275
    Points : 10 985
    Points
    10 985
    Par défaut
    Les accesseurs deviennent intéressants quand :
    - il te faut surveiller l'évolution d'une propriété (cf pattern observateur)
    - tu as besoin de distinguer les accès en lecture seule des accès modifiant
    - quand tu as des contraintes (comme déjà signalé)
    - Quand tu n'as pas bijection (je ne trouve pas de meilleur mot à cette heure ci) entre la propriété que tu veux exposer et l'éventuel attribut que tu utilises en interne pour la mettre en oeuvre.

    En ce qui me concerne, ils sont un moyen (et non un but) qu'il m'arrive d'utiliser quand, parmi les rôles de mes classes, il s'agit d'exposer une propriété.

    Je ne suis pas partisant d'avoir des données en R/W qui sont exposées directement. Je préfère généralement passer par des fonctions qui influeront sur l'état des attributs internes, quite à éventuellement avoir des accesseurs (pour le côté exposition de propriétés en RO). Mais si il doit vraiment y avoir un accès en R/W sans vérifications, ni rien, alors je préfère encore me passer du couple accesseur/mutateur. Pour des classes aggrégeant juste des données, je trouve que c'est un obscurantisme bien inutile.

    Ce qui est sûr, c'est que je n'ai pas de paire accesseur/mutateur pour chaque attribut. C'est même une chose à laquelle je suis farouchement opposé.

    Quant à l'argument de maintenance évoqué ... et bien cela dépend des langages/frameworks. Certains permettent d'associer de manière transparente des accesseurs et mutateurs à des propriétés qui sont alors manipulées comme si il s'agissait de simples attributs publics.


    Sujet abordé dans la FAQ C++ -- cela traite de design, non de syntaxe ou autres aspects propres au C++
    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
    Membre actif
    Avatar de Wormus
    Inscrit en
    Septembre 2005
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 262
    Points : 276
    Points
    276
    Par défaut
    Ah ba merci ! bravo
    Je savais un peu près comment j'allais faire et là .... ba je sais plus !!!

    Nan je plaisantes ! merci d'avoir répondu à mon problème même si ça va pas dans le même sens que le reste, je vais essayer de prendre en compte tout ça est de faire ce qui sera le plus adapté . Enfin je vais essayer ! ^^
    Bankaï !!

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    En fait, il semble que dans le cas précis de Python (le langage qu'utilise Wormus), il est conseillé d'accéder aux propriétés publiques directement, quitte à écrire ensuite des getters / setters et d'employer la fonction "property" qui évite de réécrire les clients :

    http://tomayko.com/articles/2005/01/...setters-fuxors

    Ecrire préventivement des getters / setters dans ce langage rendrait le code beaucoup plus lourd, ce qui est ennuyeux dans le cas de Python qui compense la quasi-absence d'IDE puissante par sa verbosité moindre.

    C'est étrange car Wormus semblait connaitre déjà la fonction "property", et donc peut-être la réponse à sa question. Je n'ai (hélas !) découvert la fonction "property" qu'aujourd'hui ! Reste à voir ce que ça donnera à l'usage...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB.NET] Génération automatique Property (getter / setter)
    Par Husqvarna dans le forum Windows Forms
    Réponses: 7
    Dernier message: 23/07/2020, 11h55
  2. POO - Comment bien faire un setter et getter
    Par tidus_6_9_2 dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 23/01/2013, 16h01
  3. [POO] Pourquoi utiliser les classes ?
    Par GregPeck dans le forum Langage
    Réponses: 7
    Dernier message: 16/12/2005, 15h18
  4. [Info]générer automatiquement les getters / setters
    Par lr dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 01/02/2005, 10h14
  5. configuration getter & setter
    Par otb82 dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 15/10/2003, 15h53

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