Abstracción VS Ocultación de información VS Encapsulación

167

¿Me puede decir cuál es la diferencia entre la abstracción y la ocultación de información en el desarrollo de software?

Estoy confundido. La abstracción oculta la implementación de detalles y la información oculta los resúmenes de detalles completos de algo.

Actualización: encontré una buena respuesta para estos tres conceptos. Vea la respuesta separada a continuación para varias citas tomadas de allí .

popopome
fuente
"La encapsulación es, entonces, la técnica para empaquetar la información de manera que se oculte lo que se debe ocultar y hacer visible lo que se pretende que sea visible". ; recordando que la encapsulación se logra a través de la ocultación de información.
wulfgarpro
citación torcida
Rishi Dua

Respuestas:

152

Ir a la fuente! Grady Booch dice (en Análisis y Diseño Orientado a Objetos, página 49, segunda edición):

La abstracción y la encapsulación son conceptos complementarios: la abstracción se centra en el comportamiento observable de un objeto ... la encapsulación se centra en la implementación que da lugar a este comportamiento ... la encapsulación se logra con mayor frecuencia mediante el ocultamiento de información, que es el proceso de ocultar todo Los secretos del objeto que no contribuyen a sus características esenciales.

En otras palabras: abstracción = el objeto externamente; encapsulación (lograda mediante la ocultación de información) = el objeto internamente,

Ejemplo: en .NET Framework, la System.Text.StringBuilderclase proporciona una abstracción sobre un búfer de cadena. Esta abstracción de búfer le permite trabajar con el búfer sin tener en cuenta su implementación. Por lo tanto, puede agregar cadenas al búfer sin tener en cuenta cómoStringBuilder interno realiza un seguimiento de cosas como el puntero al búfer y la administración de memoria cuando el búfer se llena (lo que hace con la encapsulación a través de la ocultación de información).

rp

rp.
fuente
55
¿Diría usted que, de la misma manera que la abstracción y la encapsulación son complementarias, la encapsulación y la ocultación de información también son complementarias? Claro, la encapsulación se logra a través de la ocultación de información, pero ... ¿no es la encapsulación el mecanismo a través del cual se realiza la ocultación de información?
wulfgarpro
Otro ejemplo del mundo real para la definición de Booch está disponible aquí
lifebalance
¿Podría decirme si sería correcto decir que la abstracción se entiende mejor a través de la perspectiva del código del cliente, mientras que la encapsulación se entiende mejor desde la perspectiva del código de servicio (es decir, la propia clase encapsulada)?
user1338998
El ejemplo del mundo real para la definición anterior se explica aquí: stackoverflow.com/a/635755/3181500
user3181500 el
84

El OP actualizó su pregunta con varias citas que había encontrado, concretamente en un artículo de Edward V. Berard titulado "Abstracción, encapsulación y ocultación de información". . Estoy volviendo a publicar una versión ligeramente ampliada y reformateada de la actualización del OP, ya que debería ser una respuesta por derecho propio.

(Todas las citas están tomadas del artículo mencionado anteriormente).

Abstracción:

"Un punto de confusión con respecto a la abstracción es su uso como proceso y como entidad. La abstracción, como proceso, denota la extracción de los detalles esenciales sobre un elemento, o un grupo de elementos, mientras se ignoran los detalles no esenciales. La abstracción, como un entidad, denota un modelo, una vista o alguna otra representación enfocada para un elemento real ".

Ocultación de información:

"Su interfaz o definición fue elegida para revelar lo menos posible sobre su funcionamiento interno".- [Parnas, 1972b]

"La abstracción puede usarse [...] como una técnica para identificar qué información debe ocultarse".

"La confusión puede ocurrir cuando las personas no logran distinguir entre la ocultación de información y una técnica (por ejemplo, abstracción) que se utiliza para ayudar a identificar qué información se debe ocultar".

Encapsulación:

"[...] se refiere a construir una cápsula, en el caso de una barrera conceptual, en torno a alguna colección de cosas". - [Wirfs-Brock y otros, 1990]

"Como proceso, la encapsulación significa el acto de encerrar uno o más elementos dentro de un [...] contenedor. La encapsulación, como entidad, se refiere a un paquete o un recinto que contiene (contiene, encierra) uno o más elementos".

"Si la encapsulación era 'lo mismo que ocultar información', entonces uno podría argumentar que 'todo lo que estaba encapsulado también estaba oculto'. Esto obviamente no es verdad."

Conclusión:

"La abstracción, la ocultación de información y la encapsulación son conceptos muy diferentes, pero muy relacionados. Se podría argumentar que la abstracción es una técnica que nos ayuda a identificar qué información específica debería ser visible y qué información debería estar oculta. La encapsulación es entonces la técnica para empaquetar la información de tal manera que oculte lo que debería estar oculto y haga visible lo que se pretende que sea visible ".

stakx
fuente
Gran explicación prácticamente. Sería genial proporcionar ejemplos concretos en Java. me parece que el setter / getter en java oculta la implementación, por lo tanto, logra Information Hiding(o oculta la implementación), mientras que un genérico classlogra la encapsulación y la abstracción se logra a través del privateacceso
abarik
57

Abstraction está ocultando los detalles de implementación al proporcionar una capa sobre la funcionalidad básica.

Information Hidingestá ocultando los datos que están siendo afectados por esa implementación. Uso de privatey publicviene debajo de esto. Por ejemplo, ocultar las variables de las clases.

Encapsulationes simplemente poner todos los datos y funciones similares en un grupo, por ejemplo, Classen programación; Packeten redes.

Mediante el uso de clases, implementamos los tres conceptos Abstraction, Information HidingyEncapsulation

Shashwat
fuente
33

Por favor no compliques conceptos simples.

Encapsulación : la recopilación de datos y métodos en una sola unidad es la encapsulación (por ejemplo, clase)

Abstracción : es un acto de representar solo las cosas esenciales sin incluir detalles de fondo. (por ejemplo, interfaz)

PARA EJEMPLOS Y MÁS INFORMACIÓN GOTO:

http://thecodekey.com/C_VB_Codes/Encapsulation.aspx

http://thecodekey.com/C_VB_Codes/Abstraction.aspx

Definiciones aprobadas aquí

PD: También recuerdo la definición de un libro llamado C ++ de Sumita Arora que leemos en la clase 11;)

Rashy
fuente
6

El significado de abstracción dado por el Oxford English Dictionary (OED) más cercano al significado que se pretende aquí es 'El acto de separar en el pensamiento'. Una mejor definición podría ser 'Representar las características esenciales de algo sin incluir antecedentes o detalles no esenciales'.

La ocultación de información es el principio de que los usuarios de un componente de software (como una clase) solo necesitan conocer los detalles esenciales de cómo inicializar y acceder al componente, y no necesitan conocer los detalles de la implementación.

Editar : me parece que la abstracción es el proceso de decidir qué partes de la implementación deben ocultarse .

Entonces no es abstracción VERSUS ocultación de información. Es información que oculta VIA abstracción.

atascamiento
fuente
4

Abstracción

La abstracción es un acto de representar detalles esenciales sin incluir los detalles de fondo. Una clase abstracta solo tiene firmas de método y la clase de implementación puede tener su propia implementación, de esta manera los detalles complejos se ocultarán al usuario. La abstracción se centra en la vista exterior. En otras palabras, la abstracción es la separación de las interfaces de la implementación real.

Encapsulamiento

La encapsulación explica la vinculación de los miembros y métodos de datos en una sola unidad. La ocultación de información es el objetivo principal de la encapsulación. La encapsulación se logra mediante el uso de especificadores de acceso como privado, público, protegido. Las variables de miembro de clase se hacen privadas para que no puedan ser accesibles directamente al mundo exterior. La encapsulación se centra en la vista interior. En otras palabras, la encapsulación es una técnica utilizada para proteger la información en un objeto del otro objeto.

Harleen
fuente
3

La abstracción está ocultando detalles de la implementación tal como la pones.

Abstrae algo a un punto lo suficientemente alto como para que solo tenga que hacer algo muy simple para realizar una acción.

Ocultar información es ocultar detalles de implementación. La programación es difícil. Puede tener muchas cosas con las que lidiar y manejar. Puede haber variables que desee / necesite tener muy en cuenta. Ocultar información asegura que nadie rompa accidentalmente algo mediante el uso de una variable o método que usted expuso públicamente.

Estos 2 conceptos están muy unidos en la programación orientada a objetos.

Dan Herbert
fuente
3

Abstracción : es el proceso de identificar las características esenciales de un objeto sin incluir los detalles irrelevantes y tediosos.

Encapsulación : es el proceso de incluir datos y funciones que manipulan estos datos en una sola unidad.

La abstracción y la encapsulación son conceptos relacionados pero complementarios.

  1. La abstracción es el proceso. La encapsulación es el mecanismo por el cual se implementa la abstracción.

  2. La abstracción se centra en el comportamiento observable de un objeto. La encapsulación se centra en la implementación que da lugar a este comportamiento.

Ocultar información : es el proceso de ocultar los detalles de implementación de un objeto. Es el resultado de la encapsulación.

Agarwal Aatish
fuente
2

Encapsulación: la unión de los miembros de datos y las funciones de los miembros se denomina encapsulación. La encapsulación se realiza a través de la clase. abstracción: ocultar los detalles de implementación del uso del formulario o de la vista se llama abstracción. ej .: int x; no sabemos cómo funcionará int internamente. pero sabemos que int funcionará. Eso es abstracción.

Siva Prasad
fuente
2

Abstracción: La abstracción es el concepto / técnica utilizada para identificar lo que debería ser la vista externa de un objeto. Hacer que solo esté disponible la interfaz requerida.

Ocultación de información: es complementaria a la abstracción, ya que a través de la ocultación de información se logra la abstracción. Ocultando todo lo demás excepto la vista externa.

Encapsulación: es un enlace de datos y funciones relacionadas en una unidad. Facilita la abstracción y el ocultamiento de información. Permitir que características como el acceso de miembros se apliquen en la unidad para lograr la abstracción y el ocultamiento de información

Vikram
fuente
2

Ver la publicación de Joel sobre la Ley de las abstracciones permeables

JoelOnsoftware

Básicamente, el resumen te da la libertad de pensar en conceptos de nivel superior. Una analogía no programada es que la mayoría de nosotros no sabemos de dónde proviene nuestra comida o cómo se produce, pero el hecho de que (generalmente) no tengamos que preocuparnos por eso nos libera para hacer otras cosas, como programación.

En cuanto a la ocultación de información, estoy de acuerdo con la interferencia.

Jason Z
fuente
2

En muy corto

Encapsulación : - Ocultar información

Abstracción : - Implementación oculta

Abstractionte permite concentrarte what the object doesmientras que Encapsulación significahow an object works

Rahul Sharma
fuente
1

La abstracción le permite tratar un proceso complejo como un proceso simple. Por ejemplo, la abstracción estándar de "archivo" trata los archivos como una matriz contigua de bytes. El usuario / desarrollador ni siquiera tiene que pensar en cuestiones de clústeres y fragmentación. (La abstracción normalmente aparece como clases o subrutinas).

La ocultación de información se trata de proteger sus abstracciones de usuarios maliciosos / incompetentes. Al restringir el control de algún estado (asignaciones de disco duro, por ejemplo) al desarrollador original, grandes cantidades de manejo de errores se vuelven redundantes. Si nadie más que el controlador del sistema de archivos puede escribir en el disco duro, entonces el controlador del sistema de archivos sabe exactamente qué se ha escrito en el disco duro y dónde. (La manifestación habitual de este concepto es privatey protectedpalabras clave en los idiomas OO).

Zooba
fuente
1

Para abstraer algo, necesitamos ocultar el detalle u ocultar el detalle de algo, necesitamos abstraerlo. Pero, ambos pueden lograrse mediante encapsulación.

Entonces, la ocultación de información es un objetivo, la abstracción es un proceso y la encapsulación es una técnica.

Selo
fuente
¿Puedes proporcionar un ejemplo de Java para lo mismo?
Chinmay
1

La abstracción simplemente significa la técnica en la que solo los detalles esenciales del software se hacen visibles para el usuario para ayudarlo a usar u operar con el software, por lo tanto, los detalles de implementación de ese software no se muestran (se hacen invisibles). La encapsulación es la técnica que tiene un paquete que contiene uno o más elementos y, por lo tanto, parte de la información (particularmente los detalles del programa) se hizo visible y otra no visible para el usuario, por lo que la encapsulación se logra a través de la ocultación de la información. En resumen. La abstracción es para el comportamiento observable (externamente) y la encapsulación es para la invisibilidad (internamente), pero estos dos son realmente complementarios.

MOBITI MAHENGE
fuente
1

Simplemente agregue más detalles sobre InformationHiding , encontrado Este enlace es una fuente realmente buena con ejemplos

Ocultación de información es la idea de que una decisión de diseño debe ocultarse del resto del sistema para evitar el acoplamiento involuntario. InformationHiding es un principio de diseño. InformationHiding debe informar la forma en que encapsula las cosas, pero , por supuesto, no tiene que hacerlo .

La encapsulación es una característica del lenguaje de programación.

Abhijeet
fuente
1

Tanto la abstracción como la encapsulación son dos de los cuatro conceptos básicos de OOP que le permiten modelar cosas del mundo real en objetos para que pueda implementarlas en su programa y código. Muchos principiantes se confunden entre abstracción y encapsulación porque ambos se ven muy similares. Si le preguntas a alguien qué es Abstracción, él te dirá que es un concepto de OOP que se enfoca en información relevante al ocultar detalles innecesarios, y cuando preguntas sobre Encapsulación, muchos te dirán que es otro concepto de OOP que oculta datos del mundo exterior. Las definiciones no son incorrectas, ya que tanto la abstracción como la encapsulación ocultan algo, pero la diferencia clave está en la intención.

La abstracción oculta la complejidad al darle una imagen más abstracta, una especie de vista de 10,000 pies, mientras que la Encapsulación oculta el trabajo interno para que pueda cambiarlo más tarde. En otras palabras, Abstracción oculta detalles a nivel de diseño, mientras que Encapsulación oculta detalles a nivel de implementación.

Charith Perera
fuente
0

Después de leer todas las respuestas anteriores una por una, no puedo evitar publicar eso

la abstracción implica la facilidad de definir objetos que representan "actores" abstractos que pueden realizar trabajos, informar y cambiar su estado, y "comunicarse" con otros objetos en el sistema.

Sin embargo, la encapsulación es bastante clara desde arriba ->

El término encapsulación se refiere a la ocultación de detalles de estado, pero extender el concepto de tipo de datos de los lenguajes de programación anteriores para asociar el comportamiento más fuertemente con los datos, y estandarizar la forma en que interactúan los diferentes tipos de datos, es el comienzo de la abstracción.

wiki de referencia

usuario666
fuente
0

Yo también estaba muy confundido acerca de los dos conceptos de abstracción y encapsulación. Pero cuando vi el artículo de abstracción en myjavatrainer.com, se me hizo evidente que la abstracción y la encapsulación son manzanas y naranjas, realmente no se pueden comparar porque ambas son necesarias.

La encapsulación es cómo se crea el objeto, y la abstracción es cómo se ve el objeto en el mundo exterior.

Navin Israni
fuente
0

Encapsulación: datos vinculantes y los métodos que actúan sobre ellos. Esto permite ocultar datos de todos los demás métodos en otras clases. ejemplo: MyListclase que puede agregar un elemento y eliminar un elemento, y eliminar todos los elementos del métodos add, removey removeAllacto en la lista (una matriz privada) que no se puede acceder directamente desde el exterior.

Abstracción: está ocultando el comportamiento y los datos no relevantes. La forma en que se almacenan, agregan o eliminan los elementos está oculta (abstraída). Mis datos pueden mantenerse en una matriz simple, ArrayList, LinkedList, etc. Además, la forma en que se implementan los métodos está oculta desde el exterior.

Ammar Samater
fuente
0

Encapsulación: imponiendo el acceso a los datos internos de manera controlada o evitando el acceso directo a los miembros.

Abstracción: ocultar los detalles de implementación de ciertos métodos se conoce como abstracción

Comprendamos con la ayuda de un ejemplo: -

class Rectangle
{
private int length;
private int breadth;// see the word private that means they cant be accesed from 
outside world.
 //now to make them accessed indirectly define getters and setters methods
void setLength(int length)
{  
// we are adding this condition to prevent users to make any irrelevent changes 
  that is why we have made length private so that they should be set according to 
   certain restrictions
if(length!=0)
{
 this.length=length
 }
void getLength()
{
 return length;
 }
 // same do for breadth
}

ahora para abstracción, defina un método al que solo se pueda acceder y el usuario no sepa cuál es el cuerpo del método y cómo funciona. Consideremos el ejemplo anterior, podemos definir un área de método que calcule el área del rectángulo.

 public int area()
 {
  return length*breadth;
 }

Ahora, cada vez que un usuario utiliza el método anterior, obtendrá el área, no de la forma en que se calcula. Podemos considerar un ejemplo del método println () solo sabemos que se usa para imprimir y no sabemos cómo imprime los datos. He escrito un blog en detalle. Puedes ver el siguiente enlace para obtener más información sobre abstracción y encapsulación.

Rohan Sharma
fuente
0

Vale la pena señalar que estos términos tienen definiciones IEEE estandarizadas, que se pueden buscar en https://pascal.computer.org/ .

abstracción

  1. Vista de un objeto que se centra en la información relevante para un propósito particular e ignora el resto de la información
  2. proceso de formular una vista
  3. proceso de suprimir detalles irrelevantes para establecer un modelo simplificado, o el resultado de ese proceso

ocultación de información

  1. técnica de desarrollo de software en la que las interfaces de cada módulo revelan lo menos posible sobre el funcionamiento interno del módulo y se impide que otros módulos utilicen información sobre el módulo que no está en la especificación de la interfaz del módulo
  2. contención de una decisión de diseño o implementación en un solo módulo para que la decisión esté oculta de otros módulos

encapsulamiento

  1. técnica de desarrollo de software que consiste en aislar una función del sistema o un conjunto de datos y operaciones en esos datos dentro de un módulo y proporcionar especificaciones precisas para el módulo
  2. concepto de que el acceso a los nombres, significados y valores de las responsabilidades de una clase está completamente separado del acceso a su realización
  3. idea de que un módulo tiene un exterior que es distinto de su interior, que tiene una interfaz externa y una implementación interna
jaco0646
fuente