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

avec Java Discussion :

A quoi servent les getter et setter ?


Sujet :

avec Java

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2010
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 221
    Points : 61
    Points
    61
    Par défaut A quoi servent les getter et setter ?
    Salut !
    J'ai une question bête peut être mais que je comprends toujours pas, voila c'est a propos des getter et setter, j'arrive pas a voir leurs utilité, c'est pour rendre les attributs privé OK, mais pourquoi le faire tant que on pourra quand même accéder a cet attribut avec ces méthodes la, en bref j'arrive pas a voir leurs utilités.
    Merci

  2. #2
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 159
    Points : 2 323
    Points
    2 323
    Par défaut
    Bonsoir,

    Pour ma part je les vois comme des clefs pour accéder à une classe non apparenté à celle-ci. Prend ta classe comme ton compte en banque ta variable c'est ton argent, ta carte bleu c'est ton getter, si ta variable est publique tout le monde y a accès. Sa permet d'autoriser que la lecture ou que l'écriture.

    Sa oblige à connaitre la classe pour utiliser la variable c'est un principe de développement après les règles sont la pour être violées ^_^°. Mais un standard permet à la personne qui passe derrière toi de s'y retrouver un peu. Le nombre de stage en informatique pour les DUT qui sont dans la réécriture propre de site web ou d'application, quand j'ai fais ce stage j'ai été surpris.
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ben, les getters et les setters, ce sont des méthodes. Les variables, ce sont des attributs. Une méthode peut être redéfinie, un attribut ne le peut pas. L'un est plus souple que l'autre.
    Même sans parler de redéfinir, un getter ou un setter permet d'associer une action chaque fois qu'il est appelé. Ce n'est pas le cas de la lecture ou écriture d'un attribut.
    On dit souvent qu'un getter ou un setter ne devrait pas faire autre que juste lire ou modifier l'attribut. C'est un peu vrai, il vaut mieux pas, mais si besoin c'est en tout cas possible. Sans getter ou sans setter, ce n'est pas possible.

    Par ailleurs, ça a pris un côté cargo cult. À présent, tout le monde utilise les getters et setters. Et donc, tout le monde considère que tout le monde le fait. Les outils se basent là-dessus et pas sur autre chose. Mettre des getters et setters ne coûte rien. Donc ne pas en mettre, n'a aucun avantage et ne peut attirer que des ennuis.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Points : 2 657
    Points
    2 657
    Par défaut
    En mettre peut avoir un avantage, c'est de pouvoir rapidement tracer toutes les lectures-écritures d'une variable.
    Dans un contexte ou tu as besoin de traces, cela te facilite bien la vie.

  5. #5
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    C'est une bonne question car il y a confusion totale au niveau des "conventions de beans".
    Un bon exemple vaut mieux qu'un long discours:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class CompteEnBanque {
        private Valeur découvertAutorisé ;
        private Valeur solde ;
        private List<Operation> historique ;
       // autres champs
    }
    Ici on va distinguer les manipulations de ces instances lors d'opérations "normales" (c.a.d lors du fonctionnement d'un code "métier") et lors d'opérations de reconstitution (depuis une base de données par exemple).

    En opération métier:
    - on peut avoir un get et un set sur découvertAutorisé
    - on peut avoir un get sur solde mais pas un set ! celà violerait l'encapsulation! (seules les opérations "dépot" et "retrait" locales au code modifient le solde).
    - idem sur historique et de plus le get est très particulier car il doit rendre une liste non modifiable!

    en opération de reconstitution on peut avoir les "set" manquants (mais ils doivent être non public!)
    mettre partout des set et des get sans analyser leur rôle est une grave erreur (malheureusement beaucoup de frameworks ont mal digéré les raisons d'être des conventions de beans et poussent au crime !)
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par professeur shadoko Voir le message
    (malheureusement beaucoup de frameworks ont mal digéré les raisons d'être des conventions de beans et poussent au crime !)
    Dans le cas présent, c'est surtout que de la logique métier n'a rien à faire dans un bean de ce sens-là du terme. Ils appellent "bean" tout ce qui n'est qu'une manière de représenter des données, totalement mutable ou totalement immutable. Ce qui est entre les deux, ça contient de la logique et n'est pas un bean à leur sens du terme.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 803
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 803
    Points : 32 058
    Points
    32 058
    Par défaut
    Je dirais moi aussi que c'est le fonctionnel qui permet de jouer avec ça.

    Mais comme je débute moi aussi, je vais poser la question autrement : je suis en train de faire un mini-RPG(sans graphismes, hein, je débute en Java). J'ai donc un objet "EtreVivant"(dont héritent les personnages ou les monstres) qui contient(entre autres) les points de vie courants - et les points de vie max.

    Bon. J'ai un getter standard sur les points de vie courants. Mais pas de setter standard : j'ai mis 3 setters : guérison complète, guérison sur x points de vie, et perte de x points de vie. Mais pas de setters direct standard à "x" points de vie, parceque ça n'a pas, à mon sens, de sens fonctionnel.

    Et pareil pour la propriété "EstMort" : je n'ai pas de setter, seulement un getter qui renvoie true pour un total nul ou négatif.

    C'est criminel? C'est futé? C'est futé mais c'est pas comme ça qu'il faut faire? C'est idiot? Ca m'a paru futé, mais bon, hein, je ne suis pas un expert objet...
    Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
    1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
    2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
    3)le temps de comprendre toutes les exigences, le projet est terminé
    4)le temps de terminer le projet, les exigences ont changé
    Et le serment de non-allégiance :
    Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par el_slapper Voir le message
    C'est criminel? C'est futé? C'est futé mais c'est pas comme ça qu'il faut faire? C'est idiot? Ca m'a paru futé, mais bon, hein, je ne suis pas un expert objet...
    C'est juste ce qu'il faut. On peut comprendre que tu ne mettes pas un setter pour quelque chose qui relève de la logique métier (mais bon, les personnages auraient pu être de simples données sans logique métier, et le réglage de leur point de vie la responsabilité des divers contrôleurs de jeu. Ça marcherait sans doute mieux.) Et c'est bien de ne pas mettre les attributs publics.
    Pour la présence de getters, elle est évidente, il faut bien récupérer les données d'une manière ou d'une autre.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 803
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 803
    Points : 32 058
    Points
    32 058
    Par défaut
    'Merci.
    Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
    1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
    2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
    3)le temps de comprendre toutes les exigences, le projet est terminé
    4)le temps de terminer le projet, les exigences ont changé
    Et le serment de non-allégiance :
    Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.

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

Discussions similaires

  1. à quoi servent les .dsm ?
    Par fidji dans le forum Delphi
    Réponses: 4
    Dernier message: 14/06/2006, 19h37
  2. [MySQL] A quoi servent les réferences entre les tables??
    Par Alain15 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 18/02/2006, 16h19
  3. A quoi servent les index dans une BDD ?
    Par Melvine dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 25/10/2005, 12h14
  4. [CR 10] A quoi servent les Templates Fields ?
    Par caviar dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 10/11/2004, 10h52
  5. [C#] A quoi servent les interfaces???
    Par sof_nns dans le forum Windows Forms
    Réponses: 8
    Dernier message: 28/10/2004, 20h51

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