Estoy leyendo "concurrencia de Java en la práctica" y se dice: "Afortunadamente, las mismas técnicas orientadas a objetos que te ayudan a escribir clases bien organizadas y mantenibles, como la encapsulación y la ocultación de datos, también pueden ayudarte a crear hilos seguros clases ".
El problema # 1: nunca escuché sobre la ocultación de datos y no sé de qué se trata.
El problema n. ° 2: siempre pensé que la encapsulación está usando lo privado frente a lo público, y en realidad es la ocultación de datos.
¿Puede explicar qué es la ocultación de datos y en qué se diferencia de la encapsulación?
java
design
object-oriented
dhblah
fuente
fuente
Respuestas:
La ocultación de datos e información es una noción más amplia que se encuentra en la informática y la ingeniería de software. Se refiere al hecho de que aquellas partes de un programa de computadora que pueden cambiar no deben ser accesibles desde otros módulos / clientes.
Encapsulación es un término que se encuentra en el paradigma orientado a objetos y se refiere a mantener los datos en campos privados y modificarlos solo a través de métodos.
Por lo tanto, la encapsulación puede verse como una forma de lograr el ocultamiento de datos en sistemas orientados a objetos .
fuente
Encapsulación y ocultación de datos son términos relacionados. Es importante entender que surgen en relación con la abstracción . Booch et. Alabama. en Análisis orientado a objetos y diseño con aplicaciones explica,
fuente
Crear una clase incluye el concepto de encapsulación. Cuando creas una clase, pones datos y comportamientos dentro de la clase y la clase se convierte en una unidad que llamamos un objeto. Por lo tanto, la ocultación de datos es parte de la encapsulación.
fuente
De Wikipedia :
fuente
A menudo se usan de manera intercambiable en la discusión, y a menudo creo que trabajan juntos para lograr el mismo propósito, y si bien lo siguiente puede no ser completamente exacto, puede proporcionar alguna distinción significativa, si es necesario hacer una distinción:
Cuando se habla de encapsulación, a menudo se implementa como un mecanismo de procedimiento / funcional. Hay algún tipo de protección para el estado subyacente, y el acceso a través de la protección requiere que se sigan ciertos protocolos para tener acceso (leer o cambiar el estado deseado). La encapsulación también ofrece la oportunidad de que se produzcan efectos secundarios debido al acceso (como el cambio de estado en cascada, o la notificación / aumento de un evento / emisión de una señal cuando se lee o cambia la cosa de interés) para que se puedan iniciar acciones de seguimiento. Nuevamente, a menudo pienso en la encapsulación como un concepto que se implementa como un procedimiento.
Veo que el concepto de ocultar datos es similar en propósito a la encapsulación; sin embargo, el mecanismo es estructural y opera a un nivel diferente. En la práctica, en lugar de proporcionar un mecanismo de protección y efectos secundarios a través del procedimiento, el estado se protege y se ve afectado a través de mecanismos estructurales del lenguaje y el tiempo de ejecución. Estos tipos de guardias serían cláusulas de visibilidad, definiciones de tipo, herencia y similares. Los efectos secundarios que puede aprovechar de los objetos estructuralmente protegidos son nuevamente algo que depende del lenguaje y el tiempo de ejecución: tal vez la activación de objetos, el recuento de referencias o algo por el estilo.
fuente
A menudo, quizás generalmente, se usan indistintamente. Pero tenga en cuenta que la cita de Booch anterior dice: "La encapsulación se logra con mayor frecuencia mediante la ocultación de información ...", es decir, con mayor frecuencia, pero no siempre en todos los casos.
Tenga en cuenta que Python permite acumular datos en clases, pero no permite variables privadas. Entonces podría decirse que Python proporciona encapsulación sin ocultar datos.
Podrías hacer lo mismo en Java haciendo todas tus variables miembro
public
, pero además de dar a todos un ataque cardíaco, perderías el beneficio de ocultar datos ... es decir, preservar la semántica de un objeto al restringir el acceso a su estado.fuente
En OO, la encapsulación es donde se mantiene la información dentro de un objeto. Por ejemplo, a
Person
tiene unaname
y los clientes de Persona (es decir, usted) saben que la Persona tiene un nombre, ya sea a través de campos públicos o métodos de acceso. Y, con suerte, no es necesario que también contenga los nombres en una serie global de nombres, etc. Así que este es un gran paso para evitar el código de espagueti inmanejable. Pero el cliente aún necesita saber algo sobre cómo la persona maneja los nombres: por ejemplo, ¿espacio o coma delimitada?La ocultación de datos es donde
Person
tiene un campo de nombre, pero, al menos en teoría, nadie lo sabe . El campo es privado sin métodos de acceso público. Los clientes pueden pasar un nombre de un registro de base de datos, XML, HTTP POST, lo que sea, pero el funcionamiento interno de cómo la persona maneja el nombre es un "recuadro negro". Las futuras implementaciones de persona es libre de cambiar, por ejemplo, para cambiar a tener unafirstName
y unalastName
.En un mundo ideal, la ocultación de datos es superior a la encapsulación, pero no todos los mundos son ideales. :-)
fuente