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

Java Discussion :

Ambiguïté concernant l'utilité des accesseurs


Sujet :

Java

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 95
    Par défaut Ambiguïté concernant l'utilité des accesseurs
    bonjour,

    J ai une ambiguïté concernant les accesseurs ,en fait je ne vois pas la différence entre déclarer une variable private et creer un accesseur vers celle-ci et entre la déclarer public, je ne vois pas donc l intéret des accessures.

  2. #2
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Citation Envoyé par phenomeno Voir le message
    bonjour,

    J ai une ambiguïté concernant les accesseurs ,en fait je ne vois pas la différence entre déclarer une variable private et creer un accesseur vers celle-ci et entre la déclarer public, je ne vois pas donc l intéret des accessures.
    La différence est que le fait d'utiliser des accesseurs permet de cacher l'implémentation interne. En plus de cela, cela améliore l'extensibilité de ta classe, car tu peux rajouter du code dans les méthodes ou alors retourner une autre variable ou une constante. Ce que tu ne peux pas faire avec l'accès à une variable interne.

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 95
    Par défaut
    Merci pour la réponse, mais, en fait, je n ai pas bien compris .

    D aprés mes connaissances (assez modestes) cacher l implémentation revient a ne pas voir le code, mais si une variable est public on ne peut pas forcement voir le code d une methode de la classe (si la methode est private) .

    Pour l extensibilité , je pense que meme si une variable est public on peut toujours rajouter du code dans n importe quelle methode .

    Je pense que ,si c est possible, un exemple avec et sans les accessurs me servira plus pour voir la différence.

    Et merci encore.

  4. #4
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Bien sûr que même avec une variable publique tu peux modifier du code, mais tu ne peux pas modifier le code d'accès à la variable.

    par exemple tu as :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public int v1 = 12;
    private int v2 = 10;
     
    public int getV2(){
       return v2;
    }
     
    public void setV2(int v2){
       this.v2 = v2;
    }
    Dans une classe.

    Si tu veux avertir une autre classe chaque fois que v2 change, c'est très simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void setV2(int v2){
       int oldValue = this.v2;
       avertOtherClass(v2, oldValue);
       this.v2 = v2;
    }
    Mais si tu veux avertir les autres classes chaque fois que v1 change, ce n'est pas possible. Tu serais obligé de rajouter des accesseurs, de passer ta variable private et de modifier tout le code utilisant cette variable. C'est ça l'extensibilité.

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 95
    Par défaut
    Merci d abord,

    Maintenant je vois une différence , avec une variable publique on peut modifier la variable ,mais on ne peut pas avertir les autres classes ,chose qu on peut faire a l aide des accesseurs (et faire beaucoup de choses relatives a la modification de la variable) ce qui rend le programme plus extensible, mais je me demande si c est la différence principale

  6. #6
    Membre émérite Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Par défaut
    Bonjour,
    D'autres exemples d'intérêts en vrac:
    - dans tes setBidule, tu peux rajouter des vérifications fonctionelles (si tu veux par exemple interdire de mettre un âge inférieur à 0...)
    - dans les getBidule, ce qui m'a sauvé la vie une fois: j'avais une variable X dans une classe, précisée par l'utilisateur. Un jour on m'a dit: cette variable n'a plus de raison d'être, elle doit être déduite de deux autres variables Y et Z. De plus, on veut garder un historique des changements.

    Si j'étais passé par un attribut "public", j'aurai du repasser sur tout le code de mon application.
    Grâce aux getters/setters, je me suis contenté de rendre inopérant le setter, et de faire l'évaluation de ma variable X dans le getter, en fonction de Y et Z.


    Tout est question de contrôle: tu n'as aucun pouvoir sur l'accès à une variable publique. En revanche tu contrôle ce que tu fais dans une méthode.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 81
    Par défaut
    Dans de nombreux développements Java, on utilise les JavaBeans.

    Il existe des conventions SUN pour les utiliser. Une de celles-ci est de mettre les propriétés en private et d'avoir des getters et setters associés en public.

    Les propriétés (dans la majorité des cas) doivent être en minuscule, les getters et setters doivent avoir la première lettre de la propriété en majuscule et le reste en minuscule.

    En respectant ces conventions, de nombreux "applicatifs" (struts par exemple) arrive à lire et à écrire dans nos beans de façon générique en utilisant l'introspection.

    Arnaud

  8. #8
    Membre confirmé
    Inscrit en
    Juillet 2009
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 95
    Par défaut
    Merci d'abord,

    Pour Jidefix, tes exemples m'ont servi beaucoup pour mieux comprendre la différence.
    Pour Coulon Arnaud: Etant débutant en java je n'ai pas compris ton intervention, mais merci quand meme.

Discussions similaires

  1. Utilité des types OpenGL GLint, GLfloat, GLvoid, etc.
    Par Djakisback dans le forum OpenGL
    Réponses: 17
    Dernier message: 14/12/2005, 12h35
  2. utilité des tables ??
    Par shadowmoon dans le forum Langage SQL
    Réponses: 6
    Dernier message: 02/06/2005, 09h43
  3. Utilité des schemas sous Postgresql?
    Par sessime dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 18/03/2005, 15h45
  4. Utilité des logos Xiti ?
    Par KibitO dans le forum Evolutions du club
    Réponses: 5
    Dernier message: 20/02/2005, 17h42
  5. utilité des DbControl
    Par portu dans le forum Bases de données
    Réponses: 6
    Dernier message: 02/07/2004, 05h41

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