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

Langage Java Discussion :

Est-ce qu'il y a une différence entre setter et un getter ?


Sujet :

Langage Java

  1. #1
    Membre régulier
    Homme Profil pro
    Analyste IP + Programmation
    Inscrit en
    Février 2016
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste IP + Programmation
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2016
    Messages : 59
    Points : 72
    Points
    72
    Par défaut Est-ce qu'il y a une différence entre setter et un getter ?
    Bonjour,

    Dans le cadre de l'utilisation de variables «private» d'une class Peuimporte, nous devons utiliser des getter et setter en méthode pour attribuer des valeurs à ces variables...

    En faisant plusieurs tests, je n'arrives pas à voir la différence entre get et set , car on dirait que les deux font le même travail au final...

    Exemple :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public byte getDefinition_cycle()
        {
            cycle_etude = clavier.nextByte();
            setDefinition_cycle(); // Appel de cette méthode pour déterminer le nom du cycle en question
            return cycle_etude;
        }
    Que j'utilise set ou get, ça revient à la même chose on dirait...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        public String setDefinition_cycle()
        {        
            switch (cycle_etude)
            {
                case 1 : nom_cycle = "Baccalauriat"; break;
                case 2 : nom_cycle = "Maitrise"; break;
                case 3 : nom_cycle = "Doctorat"; break;
                default : nom_cycle = "Niveau de cycle inconnu";
            } 
            return nom_cycle;
        }
    Quelqu'un a une petite idée la dessus ?

    Bonne programmation les amis


    PS : Dans le cadre de mon cours de programmation I :
    Acquérir une méthode de développement de solutions logicielles dans le cadre du paradigme orienté-objet: analyse du problème, conception simplifiée, codage et test d'une solution.
    Sensibiliser au développement de programmes de qualité : fiables, faciles à utiliser, à comprendre et à modifier.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Un setter (ou mutateur) est une méthode destinée à modifier un attribut. On utilise par convention la notation set suivi du nom de l'attribut (avec la première lettre en majuscule) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class Truc {
         private int variable;
         public void setVariable(int valeur) {
              variable=valeur;
         }
    }
    Un getter (ou accesseur) est une méthode destinée à récupérer la valeur d'un attribut. On utilise par convention la notation get suivi du nom de l'attribut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class Truc {
         private int variable;
         public int getVariable() {
              return variable;
         }
    }
    Rien n'empêche de faire une méthode dont le nom commence par set, mais ça n'en fait pas forcément un setter. En l'occurence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public int setVariable() {
        return variable=0;
    }
    n'a rien à voir avec un setter. Une méthode d'initialisation éventuellement. Et on devrait l'appeler resetVariable() pour éviter toute confusion.

    Dans ton cas , la méthode public setDefinition_cycle pose différents problèmes :
    1. ce n'est pas un setter
    2. risque d'incohérence dans la mesure où son résultat se base sur la valeur d'un autre attribut donc est conditionnée à l'ordre d'appel des méthodes (et à l'appel ou non-appel). Une classe devrait être une boite noire sans état intermédiaire : on devrait pouvoir appeler les méthodes dans l'ordre qu'on veut sans se poser de question sur le fait qu'on puisse ou doive les appeler à certains moments (on appelle une méthode uniquement quand on a besoin de l'appeler)
    3. le nom ne respecte pas les conventions (présence d'un underscore)


    Quant à la méthode getDefinition_cycle, ce n'est pas un getter non plus : la lecture d'une valeur au clavier, ou dans un fichier, ou tout autre source n'a rien à voir avec un getter. Il vaut mieux découpler entrées et stockage, ce qui permet une meilleure modulabilité (changer le mode de saisie quand on veux sans modifier le code de la classe du modèle, voire combiner plusieurs modes d'entrées/sorties pour une même classe). On devrait donc faire la lecture du clavier dans une méthode dédiée, et appeler un setter pour affecter la valeur à l'attribut (ou le faire par les paramètres du constructeur éventuellement).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre régulier
    Homme Profil pro
    Analyste IP + Programmation
    Inscrit en
    Février 2016
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste IP + Programmation
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2016
    Messages : 59
    Points : 72
    Points
    72
    Par défaut
    Merci beaucoup de cette réponse

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/10/2013, 15h26
  2. Ou est l'erreur - ou une différence entre une fonction et une macro ?
    Par Daranc dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/12/2009, 07h35
  3. faire une différence entre deux tables
    Par geay dans le forum Langage SQL
    Réponses: 1
    Dernier message: 04/09/2006, 15h33
  4. [Dates] Calcul d'une différence entre deux heures
    Par loreleï85 dans le forum Langage
    Réponses: 12
    Dernier message: 28/06/2006, 11h43
  5. Réponses: 1
    Dernier message: 14/06/2006, 14h25

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