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 :

Encapsulation vs. Accès direct


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Ingénieur d'études et développement JAVA
    Inscrit en
    Mai 2008
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 202
    Par défaut Encapsulation vs. Accès direct
    Bonjour tous le monde,

    J'aimerai savoir c'est quoi la vrai utilité d'utilisé l'encapsulation OO (accès indirect )en java, au lieu d’accéder directement au variable d'instance.
    Est ce que ça permet (encapsulation )tous d'abord la réutilisation, et le faite de changer la structure de donnée en cas de besoins.Si c'est oui, veuillez me donner un exemple concret.
    Et bien sur s'il a d'autre avantage je suis preneur.

    Merci d'avance pour votre aide.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 281
    Par défaut
    L'encapsulation, sert à rendre impossible la modification d'une variable si l'auteur d'une classe ne veut pas que cela soit possible.

    C'est très pratique pour les projets à plusieurs.

  3. #3
    zo1odMSQr5Fy
    Invité(e)
    Par défaut
    Citation Envoyé par naou18 Voir le message
    Bonjour tous le monde,

    J'aimerai savoir c'est quoi la vrai utilité d'utilisé l'encapsulation OO (accès indirect )en java, au lieu d’accéder directement au variable d'instance.
    Est ce que ça permet (encapsulation )tous d'abord la réutilisation, et le faite de changer la structure de donnée en cas de besoins.Si c'est oui, veuillez me donner un exemple concret.
    Et bien sur s'il a d'autre avantage je suis preneur.

    Merci d'avance pour votre aide.
    Regarde l'intérêt des mots clés : private, protected

    L'encapsulation peut te permettre d'accéder en lecture à des données ( private) et à les modifier( public et protected selon certaines conditions )

  4. #4
    Membre éclairé
    Profil pro
    Ingénieur d'études et développement JAVA
    Inscrit en
    Mai 2008
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 202
    Par défaut
    Merci pour vos réponse,

    @druzy:
    l'encapsulation ne sert pas à rendre impossible la modification d'une variable, en fait tu peux le faire à l'aide d'un setter setAttribut(Type paramètre).

    @TheBear: je connais l'utilité de ces mots clés:

    Je veux savoir quelle est l'avantage concrètement d’utilisé l'encapsulation.

    Merci.

  5. #5
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    S'assurer que les attributs d'une classe seront modifiées de la façon attendue, et uniquement de cette façon.
    En effet dans la méthode set tu peux appliquer de contrôles, des calculs, générer des évènements et ainsi de suite à chaque appel. Alors qu'en laissant l'accès direct à ta variable, tu ne peux avoir aucune idée de ce qui va être fait. De fait c'est une dès règles de bases en design d'API objet.

  6. #6
    Membre éclairé
    Profil pro
    Ingénieur d'études et développement JAVA
    Inscrit en
    Mai 2008
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 202
    Par défaut
    Merci pour vos réponse:

    @sinok: c'est tout à fait ce que je recherche .
    Est ce que je peux avoir un exemple concret auquel on applique des contrôles ou calcule à la méthode set.

  7. #7
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 096
    Par défaut
    Tu pourrais faire par exemple quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Class formeRect{
    double x,y,w,h;
    double poidsenNewton;
     
    double setPoidsEnKilo(double poidsenKilo) throw new Exception
    {
    if  (poidsenKilo>5000) throw Exception("Poids trop elevé");
    poidsenNewton=poidsenKilo/9.81;
     
    }
     
    }
    (bon c'est un exemple idiot je sais ...)

    En gros tu passes un variable a une methode set, et dedans tu regarde une condition et tu envoye une exception (dans ce cas ci) pour avertir.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Ca sert aussi quand tu sous classe. Impossible de modifier le comportement d'un champ, par contre il est possible de modifier le comportement d'un getter / setter.

    Par exemple, quelle que soit la classe de base concernée. Si tu n'a pas protégé les champs, impossible de lui appliquer par la suite la pattern "wrapper". Et par expérience, je peux te dire que dans 99.9% des cas ou t'as besoin d'appliquer la pattern wrapper, tu n'en avais aucunement l'intention quand tu a démarré la classe de base. Bref, c'est aussi une question de politesse par rapport aux utilisateurs de ta classe Ca permet de leur laisser le champ libre, ce que tu ne peux pas faire avec des champs publics.

  9. #9
    Membre Expert
    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 : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    exemple stupide (mais a but pédagogique)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class UneDate { //version 1
        private int jour;
        private int mois ;
        private int annéé ;
       public UneDate(int jour, int mois, int année) {
          // controles et initialisations
       }
     
      public int getJour()  { /*ce qu'il faut */ }
      public int getMois()  ..... /etc.
    }
    bon on change d'avis au niveau de l'implantation ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class UneDate { //version 2
        private long time ;
       public UneDate(int jour, int mois, int année) {
          // controles et initialisations
       }
     
      public int getJour()  { /*ce qu'il faut */ }
      public int getMois()  ..... /etc.
    }
    ceux qui utilisent ce code ont-ils besoin de modifier leur code si tu changes d'avis avec la version 2? réponse non!
    tu changes ton code mais pas le contrat qui te lie à ceux qui l'utilisent!

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

Discussions similaires

  1. Seveur MySQL accées direct ?
    Par Didier100 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 30/09/2005, 21h35
  2. [TOMCAT] Comment empêcher l'accès direct aux fichiers
    Par thomine dans le forum Tomcat et TomEE
    Réponses: 17
    Dernier message: 14/04/2005, 10h19
  3. Empêcher l'accès direct avec squid
    Par Amélie Ladoque dans le forum Réseau
    Réponses: 6
    Dernier message: 11/04/2005, 14h49
  4. Accès séquentiel/Accès direct etc... kesako ?
    Par da_cruz dans le forum Décisions SGBD
    Réponses: 6
    Dernier message: 10/09/2003, 11h22
  5. Accès direct au disque dur
    Par Berdo dans le forum x86 16-bits
    Réponses: 4
    Dernier message: 12/01/2003, 16h21

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