web-dev-qa-db-fra.com

Encapsulation vs dissimulation d'informations

Quelles sont exactement les différences entre Ecapsulation et Information Hiding?

Eh bien, je sais que rendre les champs privés, puis en définissant et en accédant, est une écapsulation. Cependant, encapsulation signifie-t-il simplement cela?

supposons que j'ai une classe comme décrit ci-dessous.

public Class IsThisEncapsulation
{
    public int age;

    public void setAge(int age)
    {
       this.age=age;
    }

    public int getAge()
    {
       return age;
    }
}

Est-ce que la classe IsThisEncapsulation est un exemple d’encapsulation?

Maintenant, en rendant le champ 'âge' dans la classe ci-dessus privée, on obtiendrait informaton en se cachant?

Pourriez-vous s'il vous plaît me donner des exemples clairs qui m'aideront à distinguer clairement ces concepts?

15
user1720616

Eh bien, je sais que rendre les champs privés, puis en définissant et en récupérant les champs, est une encapsulation. Cependant, encapsulation signifie-t-il simplement cela?

---> Encapsulation est un concept OOP dans lequel l'état d'objet (champs de classe) et son comportement (méthodes) sont encapsulés. Java fournit une encapsulation en utilisant class.

Masquage de l'information: 

-> mécanisme permettant de restreindre l'accès à certains composants de l'objet. Votre exemple ci-dessus est le cas de la dissimulation d'informations si vous rendez age privé.


Initialement, le masquage d'informations/données était considéré comme faisant partie de l'encapsulation et les définitions de l'encapsulation seraient les suivantes:

  • Un mécanisme de langage pour restreindre l'accès à certains composants de l'objet.
  • Une construction de langage qui facilite le regroupement de données avec les méthodes (ou d’autres fonctions) opérant sur ces données.

la deuxième définition est motivée par le fait que, dans de nombreux OOP langages, le masquage de composants n'est pas automatique ou peut être ignoré; ainsi, la dissimulation d'informations est définie comme une notion distincte par ceux qui préfèrent la deuxième définition.

Référence: wikipage

15
Nandkumar Tekale

De abstraction-vs-information-masquage-vs-encapsulation

L'abstraction et l'encapsulation sont des concepts complémentaires: l'abstraction est centrée sur le comportement observable d'un objet ... l'encapsulation est centrée sur la mise en oeuvre à l'origine de ce comportement ... l'encapsulation est le plus souvent réalisée par la dissimulation d'informations, processus consistant à les secrets d'objet qui ne contribuent pas à ses caractéristiques essentielles.

Cacher des informations:

"Son interface ou sa définition a été choisie pour en révéler le moins possible sur son fonctionnement interne." - [Parnas, 1972b]

"L'abstraction peut être […] utilisée comme une technique permettant d'identifier quelle information doit être cachée."

"Une confusion peut survenir lorsque les utilisateurs ne font pas la distinction entre le masquage d'informations et une technique (par exemple, l'abstraction) utilisée pour identifier les informations à masquer."

Encapsulation: 

"Il s'agit de construire une capsule, en l'occurrence une barrière conceptuelle, autour d'un ensemble de choses." - [Wirfs-Brock et al, 1990]

"En tant que processus, encapsulation signifie l'acte consistant à inclure un ou plusieurs éléments dans un conteneur […]. L'encapsulation, en tant qu'entité, fait référence à un package ou à une enceinte qui contient (contient, entoure) un ou plusieurs éléments."

"Si l'encapsulation était" la même chose que la dissimulation d'informations ", on pourrait alors soutenir que" tout ce qui était encapsulé était également caché ". Ce n'est évidemment pas vrai. "

8
Sumit Singh

Il y a une différence subtile entre ceux-ci, j'aime la description du livre "Des logiciels orientés objet orientés guidés par des tests" écrit par Steve Freeman et Nat Pryce:

Ce qui dit:

Encapsulation

Garantit que le comportement d'un objet ne peut être affecté que par son API . Il nous permet de contrôler l'impact d'une modification sur un objet sur d'autres parties du système En veillant à ce qu'il n'y ait pas de dépendances inattendues entre .__ composants non liés.

Cacher des informations

Cache la manière dont un objet implémente ses fonctionnalités derrière l'abstraction De son API. Cela nous permet de travailler avec des abstractions plus élevées en ignorant les détails de niveau inférieur Qui ne sont pas liés à la tâche à accomplir.

5
Eds

il suffit de voir leur signification littérale… .. L’encapsulation consiste simplement à mettre des choses dans un sac… ... c'est-à-dire que le fait de placer tous les attributs et les méthodes dans une classe permet d'obtenir l'encapsulation.

1
Harit Vishwakarma

C'est ce qui se produit lorsque vous n'implémentez pas la dissimulation d'informations, l'encapsulation ou ce qu'elle appelle. De mauvaises choses se produisent lorsque vous modifiez quelque chose dans un coin que vous pensez indépendant. Deuxièmement, lorsque vous souhaitez modifier une bibliothèque tierce utilisée dans votre système, vous découvrez qu'il existe des références partout dans le système que vous ne pouvez pas déplacer sans tout refactoriser. Par exemple, vous souhaitez mettre à niveau votre version de la bibliothèque d'accès aux données (j'ai rencontré ce problème lorsque je voulais mettre à jour la version d'ODP.net), vous estimez que le travail pense que vous souhaitez modifier la classe DataAccess supposée avoir une référence à la base de données. bibliothèque client. Mais vous découvrez que chaque classe professionnelle a créé une référence pour la bibliothèque du client DB. Vous devez maintenant mettre à jour les références de 60 assemblys au lieu d’un: ( Fuite d’informations

La même chose se produit lorsque vous exposez la logique interne aux clients. Par exemple, vous avez une fonction EnrollMember (indicateur de chaîne) que vous acceptez "A", "B" comme indicateurs valides et que vous créez une logique dans la fonction. Lorsque vous souhaitez modifier cette fonction ultérieurement, vous ne pouvez pas le faire sans en informer les clients. 

0
Manjula Liyanage

Pour répondre à ta question:

Cacher des informations: Cacher les parties essentielles de l’objet qui expose la façon dont il est implémenté en interne et expose des abstractions plus élevées. Par exemple : Dans une télécommande de téléviseur, nous n’exposons que les touches pour interagir avec le téléviseur, nous ne savons pas ce qui se passe à l’intérieur.

Encapsulation: Encapsulation combine des données et des méthodes et permet d'accéder aux données internes par des méthodes publiques. Donc, oui, si dans votre classe, vous faites de la variable age, private, vous obtiendrez l'encapsulation

0
stamhaney

Un exemple simplifié:

class NoEncapsulationOrInformationHiding { 
   public ArrayList widths = new ArrayList();
}

class EncapsulationWithoutInformationHiding {
   private ArrayList widths = new ArrayList();
   public ArrayList getWidths(){
    return widths;
  }
}

class InformationHidingWithoutEncapsulation {
   public List widths = new ArrayList();
}

class EncapsulationAndInformationHiding{
  private ArrayList widths = new ArrayList();
  public List getWidths(){
    return widths;
  }
}

Encapsulation vous permet de vérifier l'accès à vos propres entrailles et de fournir des méthodes spécifiques pour effectuer cet accès. Il ne traite pas spécifiquement des détails d'implémentation qui fuient; Bien que vous puissiez contrôler l'accès à cette variable, vous ne pouvez plus contrôler le fait que le client sait que vous utilisez une ArrayList, même si vous décidez ultérieurement d'utiliser LinkedList.

Information Cacher cache en revanche le fait que vous utilisez un ArrayList pour implémenter vos largeurs. Bien que le client puisse toujours savoir comment vous l'implémentez (InformationHidingIsNotInformationErasing), vous n'êtes plus responsable du support de cette implémentation . Lire plus ici