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 :

Les Getters et Setters en Java


Sujet :

avec Java

  1. #1
    Inscrit
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    992
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 992
    Points : 217
    Points
    217
    Par défaut Les Getters et Setters en Java
    Bonjour,
    En faite j'ai vu pas mal de fois
    dans des programmes Eclipse, des méthodes get et set,

    et je voulais vous demander c"était quoi leurs rôle et
    comment on les utilises.

    Merci pour vôtre aide.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Si tu as dans une classe un champ "maVariable", pour donner accès à cette variable depuis l'extérieur de ta classe, tu peux grosso-modo :
    • mettre le champ public => accès libre par n'importe qui, et donc possibilité pour les tierces parties de faire n'importe quoi (ex : mettre la variable dans un état "incohérent" par rapport au traitement que tu comptes en faire plus tard)
    • conserver le champ privé, définir des méthodes publiques getMaVariable et setMaVariable => un peu plus lourd, mais possibilité de définir un get mais pas le set (-> lecture seule), contrôle total des actions effectuées sur la valeur de la variable (ex simple : contrôle valeur non nulle), possibilité de définir des actions supplémentaires par rapport à la "simple" lecture ou écriture (ex vraiment à la con : incrémentation d'un compteur)...

  3. #3
    Membre éprouvé
    Avatar de kmdkaci
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 560
    Points : 950
    Points
    950
    Par défaut Les Getters et Setters en Java
    Bonjour,
    J'ajoute ceci : Ces classes sert surtout pour les beans
    Voici une classe qui donne à peu prêt, une classe chanson.
    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
    public class Chanson {
     
        private String Titre = " ";
        private String Artiste = " ";
        private String Duree = "";
     
          public void setArtiste(String Artiste)
          {
            this.Artiste = Artiste;
          }
     
          public String getArtiste()
          {
            return Artiste;
          }        
          public void setTitre(String Titre)
          {
            this.Titre = Titre;
          }
     
          public String getTitre()
          {
            return Titre;
          }
     
     
          public void setDuree(String Duree)
          {
            this.Duree = Duree;
          }
     
          public String getDuree()
          {
            return Duree;
          }
     
    }
    Dans notre cas pour récupérer le titre de la chanson, on fait appel à la méthode getTitre()

  4. #4
    Membre habitué Avatar de sewatech
    Inscrit en
    Février 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Février 2007
    Messages : 141
    Points : 166
    Points
    166
    Par défaut
    Attention kmdkaci, ce que ta classe Chanson ne respecte pas les conventions : tes champs et méthodes doivent commencer par des minuscules.

  5. #5
    Membre éprouvé
    Avatar de kmdkaci
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 560
    Points : 950
    Points
    950
    Par défaut Les Getters et Setters en Java
    ouuhhhh autant pour moi.... C'est pare ce que je viens de l'écrire sans le tester. Je vais le modifier.
    Merci sewatech pour ta remarque

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2
    Points : 5
    Points
    5
    Par défaut Get et Set
    Les getters et les Setters sont respéctivement des accésseurs en lecture et en écriture.
    get pour lire : accéder aux valeurs des variables d'instance
    set pour alterer modifier les valeurs de variables d'instance

  7. #7
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 445
    Points
    3 445
    Par défaut
    Je pense que principalement, le rôle de ces méthodes est de suivre une convention particulière liée aux JavaBeans ( "pojos" ) et ainsi de garder une cohérence dans les apis et les programmes.

    De fait, certains framework se basent sur ces getters setters via l'introspection pour accéder aux champs d'un bean. ( notamment Spring )

    Je te conseille de te renseigner sur le concept d'encapsulation, qui est un concept de base dans les languages objets.

    Dernière chose : contrairement à ce qui a été dit plus haut, je ne conseille pas d'utiliser les getters/setters pour autre chose que ce que leur nom suggère. Il est dangereux de cacher des traitements dans ces méthodes, car ça peut vite devenir un enfer en maintenance.

    A+

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Citation Envoyé par KiLVaiDeN Voir le message
    Dernière chose : contrairement à ce qui a été dit plus haut, je ne conseille pas d'utiliser les getters/setters pour autre chose que ce que leur nom suggère. Il est dangereux de cacher des traitements dans ces méthodes, car ça peut vite devenir un enfer en maintenance.
    Oui, il est possible d'ajouter des traitements dans un getter ou un setter (comme dans n'importe quel autre méthode...) mais il faut faire très attention.
    En effet quand on appelle un "getTruc" ou un "setTruc" on s'attend à ce que l'action réalisée derrière soit un simple accès en lecture ou en écriture à la variable truc, donc on ne s'attend pas à déclencher de grands traitements...
    Pour donner des exemples :
    - sur setTruc ou getTruc, logguer des messages de débug, y'a pas de problème
    - sur getTruc, incrémenter un compteur interne qui compte le nombre d'accès à truc, ça va (bon c'est pas forcément super utile par contre )
    - sur setTruc, commencer par vérifier que la valeur passée en paramètre vérifie certains critères, et éventuellement lever une exception, ça va
    - sur setTruc, en profiter pour mettre à jour également une variable privée qui est censée rester cohérente avec truc, ça peut aller
    - sur getTruc, modifier la valeur de truc ou modifier de manière intrinsèque l'état de ta classe, ça va pas ! parce qu'on s'attend à lire une valeur, pas à modifier quoique ce soit, et le fait que deux appels successifs à getTruc() renvoient des valeurs différentes n'est pas super intuitif...
    - sur getTruc, se mettre à reconstruire une liste à partir d'une base de données, ça va pas ! parce qu'on s'attend à un accès simple et immédiat à une variable locale, donc l'utilisateur de ta classe va peut-être parsemer son code de getTruc sans se rendre compte de la lourdeur des traitements enclenchés... appeler la méthode en question extractTrucFromDatabase aura le mérite d'être beaucoup plus clair
    - etc
    Bref, ajouter des traitements supplémentaires, c'est théoriquement possible, mais il faut en user avec précaution...


    Précision :
    Tout ce que je dis concerne l'utilisation des getter/setter dans le seul but de renforcer le contrôle de l'accès aux champs d'une classe.
    Il ne s'agit pas de leur utilisation dans le cadre des Beans.

  9. #9
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 860
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 860
    Points : 3 445
    Points
    3 445
    Par défaut
    Astartee : je suis d'accord avec la plupart des choses que tu dis, cependant, j'ai pour habitude de séparer les traitements dits de validation dans un endroit centralisé, plutôt que de devoir aller piocher à gauche ou à droite pour savoir ce qu'il se passe vraiment quand on fait un set ou un get.

    A la rigueur, si le programme plante parce qu'on a fait un set d'une valeur primitive de type boolean avec un object Boolean NULL par exemple, ça me permet de relever un cas qui n'avait pas été prévu et de corriger ça dans les classes métier et/ou au moment de la validation.

    Le principe du pojo est justement de rendre ces objets totalement vierges de traitement, afin qu'ils n'agissent que comme des conteneurs simple, dont le comportement est toujours défini pour tous les développeurs.

    Je pense qu'au final ça doit être une question de goût

    A+

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Points : 909
    Points
    909
    Par défaut
    Citation Envoyé par KiLVaiDeN Voir le message
    Je pense qu'au final ça doit être une question de goût
    Comme souvent dès qu'on demande "à quoi ça sert ?"



    Par exemple, moi, écrire juste
    private int truc
    public int getTruc() { return truc; }
    public void setTruc(int t) {truc = t; }
    je trouve que ça ne sert pas à grand chose... sinon peut-être à homogénéiser le code parce qu'à côté on aura d'autres variables sur lesquelles seul le getter aura été défini ?
    bref, des goûts et des couleurs


    EDIT
    Ah tiens si, j'ai trouvé un autre avantage des getter et setter, et pas des moindres : on peut les définir dans une interface !
    (ça doit être en C#, où l'utilisation de getter/setter est implicite, que je pouvais définir directement des "champs" dans les interfaces )

  11. #11
    Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2012
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2012
    Messages : 35
    Points : 55
    Points
    55
    Par défaut
    Juste pour information, les getter et les setters sous eclipse on peut les générer automatiquement il suffit de faire:
    Dans le menu Source==> choisir l'option Generate Getters and Setters
    c'est cool non?

Discussions similaires

  1. A quoi servent les getter et setter ?
    Par khadi8 dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 02/05/2012, 11h09
  2. Changer le refactor pour les getters and setters
    Par chezlui dans le forum NetBeans
    Réponses: 2
    Dernier message: 05/12/2011, 10h21
  3. Réponses: 1
    Dernier message: 03/12/2010, 22h00
  4. Réponses: 5
    Dernier message: 01/03/2010, 16h01
  5. [Postsharp] Manager les getter et setter d'une propriété
    Par anthyme dans le forum Framework .NET
    Réponses: 4
    Dernier message: 13/01/2009, 11h19

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