Pregunta

¿Puedes decirme cuál es la diferencia entre abstracción y 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 de ocultación de los resúmenes de detalles completos de algo.

Actualizar: Encontré una buena respuesta para estos tres conceptos. Vea la respuesta separada a continuación para varias citas tomadas de allá.

¿Fue útil?

Solución

¡Ve 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 a través de la ocultación de información, que es el proceso de ocultar todos los secretos de los objetos 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 el marco .NET, el System.Text.StringBuilder La clase proporciona una abstracción sobre un búfer de cadena.Esta abstracción del 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ómo StringBuilder Internamente realiza un seguimiento de cosas como el puntero al búfer y la gestión de la memoria cuando el búfer se llena (lo que hace con la encapsulación mediante la ocultación de información).

rp

Otros consejos

El OP actualizó su pregunta con varias citas que había encontrado, concretamente en un Artículo de Eduardo 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 entidad.La abstracción, como proceso, denota la extracción de los detalles esenciales sobre un artículo o un grupo de artículos, ignorando los detalles no esenciales.La abstracción, como entidad, denota un modelo, una vista o alguna otra representación enfocada de 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 se puede […] utilizar como técnica para identificar qué información debe ocultarse".

"Puede surgir confusión cuando las personas no logran distinguir entre ocultar 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, alrededor de una colección de cosas". — [Wirfs-Brock et al, 1990]

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

"Si la encapsulación fuera 'lo mismo que la información escondida', 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 altamente 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 ocultarse.La encapsulación es entonces la técnica para empaquetar la información de tal manera que se oculte lo que debería estar oculto y se haga visible lo que se pretende que sea visible".

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

Information Hiding está ocultando los datos que se ven afectados por esa implementación.Uso de private y public viene bajo esto.Por ejemplo, ocultar las variables de las clases.

Encapsulation es simplemente poner todos los datos y funciones similares en un grupo, por ejemplo Class en programación; Packet en redes.

Mediante el uso de Clases, implementamos los tres conceptos: Abstraction, Information Hiding y Encapsulation

Por favor, no complique conceptos simples.

Encapsulación :La encapsulación de datos y métodos en una sola unidad se denomina encapsulación (p. ej.Clase)

Abstracción :Es un acto de representar sólo lo esencial sin incluir detalles de fondo.(p.ej.Interfaz)

PARA EJEMPLOS Y MÁS INFORMACIÓN IR A :

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 leímos en la clase 11;)

El significado de abstracción dado por el Oxford English Dictionary (OED) más cercano al significado aquí propuesto 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".

El ocultamiento de información es el principio de que los usuarios de un componente de software (como una clase) necesitan conocer sólo 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 la proceso de decidir qué partes de la implementación deben ser oculto.

Por lo tanto, no se trata de una abstracción VERSUS la ocultación de información.Es información que oculta la abstracción VIA.

Abstracción

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

Encapsulación

La encapsulación explica cómo vincular los miembros de datos y los métodos en una sola unidad.El ocultamiento 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 y protegido.Las variables de los miembros de la clase se hacen privadas para que no puedan ser accesibles directamente desde el mundo exterior.La encapsulación se centra en la visión interior.En otras palabras, la encapsulación es una técnica utilizada para proteger la información de un objeto de otro objeto.

La abstracción oculta detalles de la implementación como usted la expresa.

Abstraes algo hasta un punto lo suficientemente alto como para que solo tengas 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.Puedes tener muchas cosas con las que lidiar y manejar.Puede haber variables que desee o necesite seguir de cerca.Ocultar información garantiza que nadie rompa algo accidentalmente al usar una variable o método que usted expuso públicamente.

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

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 encerrar datos y funciones manipulando estos datos en una sola unidad.

Abstracción y Encapsulación son conceptos relacionados pero complementarios.

  1. La abstracción es el proceso.La encapsulación es el mecanismo mediante 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.

Ocultación de información - Es el proceso de ocultar los detalles de implementación de un objeto.Es el resultado de la encapsulación.

Encapsulación:unir los miembros de datos y las funciones miembro se llama encapsulación.la encapsulación se realiza a través de la clase.abstracción:Ocultar los detalles de implementación del uso o de la vista se llama abstracción.ex:intx;No sabemos cómo funcionará int internamente.pero sabemos que int funcionará.eso es abstracción.

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

Ocultación de información : Es complementario a la Abstracción, ya que a través del ocultamiento de información se logra la Abstracción.Ocultando todo lo demás excepto la vista externa.

Encapsulación: Es la unión de datos y funciones relacionadas en una unidad.Facilita la abstracción y el ocultamiento de información.Permitir que funciones como el acceso de miembros se apliquen en la unidad para lograr la abstracción y la ocultación de información.

Vea la publicación de Joel sobre la ley de las abstracciones con fugas.

joelonsoftware

Básicamente, abstraer te da la libertad de pensar en conceptos de nivel superior.Una analogía sin programación es que la mayoría de nosotros no sabemos de dónde provienen nuestros alimentos ni cómo se producen, pero el hecho de que (normalmente) no tengamos que preocuparnos por ellos nos libera para hacer otras cosas, como programación.

En cuanto a ocultar información, estoy de acuerdo con bloquear.

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 clusters y fragmentación.(La abstracción normalmente aparece como clases o subrutinas).

Ocultar información consiste en proteger sus abstracciones de usuarios malintencionados/incompetentes.Al restringir el control de algún estado (asignaciones de discos duros, por ejemplo) al desarrollador original, grandes cantidades de manejo de errores se vuelven redundantes.Si nadie más, además del 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 private y protected palabras clave en idiomas OO.)

Para abstraer algo necesitamos ocultar el detalle o para ocultar el detalle de algo necesitamos abstraerlo.Pero ambos se pueden lograr mediante encapsulación.

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

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 que los detalles de implementación de ese software no se muestran (se hacen invisibles).Encapsulación es la técnica en la que un paquete contiene uno o más elementos y, por lo tanto, parte de la información (particularmente los detalles del programa) se vuelve visible y otra no para el usuario, por lo que la encapsulación se logra ocultando la información.En resumen. Abstracción es para comportamiento observable (externamente) y la encapsulación es para invisibilidad (internamente), pero estos dos son realmente complementarios.

Solo estoy agregando más detalles sobre Ocultación de información, encontró Este enlace es realmente una buena fuente con ejemplos.

Ocultación de información es la idea de que una decisión de diseño debe ocultarse al resto del sistema para evitar un acoplamiento involuntario.La ocultación de información es un principio de diseño. Ocultación de información debe informar la forma en que encapsular cosas, pero por supuesto no tiene por qué.

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

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, me quedó claro 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.

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 un trabajo, 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 ocultar detalles de estado, pero extender el concepto de tipo de datos de 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.

referencia wiki

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

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

Encapsulación: imponer el acceso a los datos internos de forma controlada o impedir el acceso directo a los miembros.

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

Entendamos 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 la abstracción, defina un método al que solo se puede acceder y el usuario no sabe 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 utilice el método anterior, simplemente obtendrá el área, no 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.abstracción vs encapsulación

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 supresión de 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 evita 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 quede oculta a otros módulos.

encapsulación

  1. Técnica de desarrollo de software que consiste en aislar una función del sistema o un conjunto de datos y operaciones sobre 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 distinto de su interior, que tiene una interfaz externa y una implementación interna
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top