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 :

problème sur la notion d'encapsulation


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2016
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2016
    Messages : 19
    Par défaut problème sur la notion d'encapsulation
    Salut à tous,

    Je me pose une question sur la notion d'encapsulation, je ne suis pas sûr d'avoir bien saisi

    J'ai cru comprendre que l'encapsulation permettait de masquer les détails d'implémentation, on n'a donc accès à l'objet qu'à partir de la partie visible (l'interface). Par exemple on peut accéder aux attributs seulement à partir de méthodes.

    Or parfois je vois le mot "encapsuler" dans d'autres contextes. Par exemple :
    un flux peut encapsuler d'autres flux : BufferedReader bf = new BufferedReader(new FileReader(monFichier));

    S'agit t il d'une relation de composition (un BufferedReader "a un" fileReader comme attribut) ? Pourquoi utilise t on le mot "encapsuler" ? Je ne vois pas dans ce contexte le rapport avec le fait de déclarer les attributs private et méthodes publiques

    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 156
    Par défaut
    J'ai cru comprendre que l'encapsulation permettait de masquer les détails d'implémentation
    Tout est là. Et c'est la même notion pour les streams. Quand tu branche un stream en tant que consommateur ou producteur sur un autre stream, tu le "masque" complètement. Dans le code que tu donnes en exemple tu utilises un BufferedReader. Tu n'as pas la moindre idée d'où il lit ses données, tout comme l'encapsulation dans une classe masque l'endroit d'où les données sont lues/écrites.

    Après tu peux avoir plusieurs utilisations de cette notion d'encapsulation. Pour les streams ça te permet de chainer des opérations en ne te préoccupant que de la dernière mais pour des classes l'encapsulation protège l'accès à leur implémentation interne et garantis leur cohérence. Imagine que tu ais une classe Foo avec un attribut "bar" de type entier et une règle métier qui interdise d'écrire des nombres négatifs. Tu fais tout ton code en supposant que "bar" va être un entier positif. Mais qu'est ce qui empêche un développeur qui utilisera ta classe Foo de faire et de faire planter ton code? Si le dev qui utilise ta classe ne voit pas ton attribut "bar" et est obligé de passer par une méthode setBar(), cette méthode peut renvoyer une exception pour indiquer que la valeur est invalide et protéger ainsi la cohérence de Foo.

Discussions similaires

  1. Problème sur la recherche fulltext en v4 !
    Par poppa dans le forum Requêtes
    Réponses: 3
    Dernier message: 13/05/2004, 23h06
  2. Problème sur fiche MDIchild
    Par nivet dans le forum Composants VCL
    Réponses: 6
    Dernier message: 23/01/2004, 08h07
  3. Problème sur GetPrivateProfileString ???
    Par Bordelique dans le forum Langage
    Réponses: 7
    Dernier message: 25/06/2003, 22h15
  4. Problème sur une requête INSERT
    Par Marion dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/06/2003, 08h45
  5. problème sur une requête!!!!!
    Par Mcgrady_01 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/06/2003, 01h17

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