stringtranslate.com

Ocultación de información

En informática , el ocultamiento de información es el principio de segregación de las decisiones de diseño en un programa de computadora que tienen más probabilidades de cambiar, protegiendo así otras partes del programa de modificaciones extensas si se cambia la decisión de diseño. La protección implica proporcionar una interfaz estable que proteja el resto del programa de la implementación (cuyos detalles probablemente cambien). Escrito de otra manera, el ocultamiento de información es la capacidad de evitar que ciertos aspectos de una clase o componente de software sean accesibles para sus clientes , utilizando características del lenguaje de programación (como variables privadas) o una política de exportación explícita.

Descripción general

El término encapsulación se utiliza a menudo indistintamente con ocultamiento de información. Sin embargo, no todos están de acuerdo en las distinciones entre los dos; Se puede pensar que la ocultación de información es el principio y la encapsulación la técnica. Un módulo de software oculta información encapsulándola en un módulo u otra construcción que presenta una interfaz. [1]

Un uso común de la ocultación de información es ocultar el diseño de almacenamiento físico de los datos de modo que, si se cambia, el cambio se restrinja a un pequeño subconjunto del programa total. Por ejemplo, si un punto tridimensional ( x , y , z ) se representa en un programa con tres variables escalares de punto flotante y posteriores, la representación se cambia a una única variable de matriz de tamaño tres, un módulo diseñado con información oculta en mente protegería el resto del programa de tal cambio.

En la programación orientada a objetos , el ocultamiento de información (mediante anidamiento de tipos) reduce el riesgo de desarrollo de software al trasladar la dependencia del código de una implementación incierta (decisión de diseño) a una interfaz bien definida . Los clientes de la interfaz realizan operaciones únicamente a través de la interfaz, por lo que, si la implementación cambia, los clientes no tienen que cambiar.

Encapsulación

En su libro sobre diseño orientado a objetos , Grady Booch definió la encapsulación como "el proceso de compartimentar los elementos de una abstracción que constituyen su estructura y comportamiento; la encapsulación sirve para separar la interfaz contractual de una abstracción y su implementación". [2]

El propósito es lograr el potencial de cambio: los mecanismos internos del componente se pueden mejorar sin impacto en otros componentes, o el componente se puede reemplazar por uno diferente que admita la misma interfaz pública. La encapsulación también protege la integridad del componente, al evitar que los usuarios establezcan los datos internos del componente en un estado no válido o inconsistente. Otro beneficio de la encapsulación es que reduce la complejidad del sistema y, por tanto, aumenta la robustez, al limitar las interdependencias entre los componentes del software. [2]

En este sentido, la idea de encapsulación es más general que su aplicación en la programación orientada a objetos. Por ejemplo, una base de datos relacional está encapsulada en el sentido de que su única interfaz pública es un lenguaje de consulta (como SQL ), que oculta toda la maquinaria interna y las estructuras de datos del sistema de gestión de la base de datos. Como tal, la encapsulación es un principio fundamental de una buena arquitectura de software, en todos los niveles de granularidad.

Encapsular software detrás de una interfaz permite la construcción de objetos que imitan el comportamiento y las interacciones de los objetos en el mundo real. Por ejemplo, un simple reloj despertador digital es un objeto del mundo real que un profano (no experto) puede utilizar y comprender. Pueden comprender qué hace el despertador y cómo usarlo a través de la interfaz proporcionada (botones y pantalla), sin tener que comprender cada parte del interior del reloj. Del mismo modo, si el reloj fuera reemplazado por un modelo diferente, el profano podría seguir usándolo de la misma manera, siempre que la interfaz funcione igual.

En el entorno más concreto de un lenguaje de programación orientado a objetos, la noción se utiliza para referirse a un mecanismo de ocultación de información, un mecanismo de agrupación o la combinación de ambos. (Consulte Encapsulación (programación orientada a objetos) para obtener más detalles).

Historia

El concepto de ocultación de información fue descrito por primera vez por David Parnas en 1972. [3] [4] Antes de eso, Richard Gauthier y Stephen Pont discutieron la modularidad en su libro de 1970 Designing Systems Programs , aunque la programación modular en sí se había utilizado en muchos sitios comerciales. durante muchos años antes, especialmente en subsistemas de E/S y bibliotecas de software , sin adquirir la etiqueta de 'ocultación de información', pero por razones similares, así como por la razón más obvia de reutilización de código . [ se necesita aclaración ]

Ejemplo

El ocultamiento de información sirve como un criterio eficaz para dividir cualquier equipo, software o hardware en módulos de funcionalidad. Por ejemplo, un automóvil es un equipo complejo. Para que el diseño, la fabricación y el mantenimiento de un automóvil sean razonables, el complejo equipo se divide en módulos con interfaces particulares que ocultan las decisiones de diseño. Al diseñar un automóvil de esta manera, un fabricante de automóviles también puede ofrecer varias opciones sin dejar de tener un vehículo que sea económico de fabricar.

Por ejemplo, un fabricante de automóviles puede tener una versión de lujo del automóvil además de una versión estándar. La versión de lujo viene con un motor más potente que la versión estándar. Los ingenieros que diseñan los dos motores diferentes, uno para la versión de lujo y otro para la versión estándar, proporcionan la misma interfaz para ambos motores. Ambos motores encajan en el compartimento motor del coche, que es el mismo en ambas versiones. Ambos motores cuentan con la misma transmisión, los mismos soportes de motor y los mismos controles. Las diferencias en los motores son que la versión de lujo más potente tiene una mayor cilindrada con un sistema de inyección de combustible que está programado para proporcionar la mezcla de aire y combustible que requiere el motor de mayor cilindrada.

Además del motor más potente, la versión de lujo también puede ofrecer otras opciones como una mejor radio con reproductor de CD, asientos más cómodos, un mejor sistema de suspensión con neumáticos más anchos y diferentes colores de pintura. Con todos estos cambios, la mayor parte del coche es igual entre la versión estándar y la versión de lujo. La radio con reproductor de CD es un módulo que sustituye a la radio estándar, también módulo, en el modelo de lujo. Los asientos más cómodos se instalan en los mismos soportes que los tipos de asientos estándar. No importa si los asientos son de cuero o plástico, si ofrecen soporte lumbar o no.

Los ingenieros diseñan el coche dividiendo la tarea en partes de trabajo que se asignan a los equipos. Luego, cada equipo diseña su componente según un estándar o interfaz particular que le permite al equipo flexibilidad en el diseño del componente y al mismo tiempo garantiza que todos los componentes encajen entre sí.

Los fabricantes de vehículos de motor suelen utilizar la misma estructura central para varios modelos diferentes, en parte como medida de control de costos. Una " plataforma " de este tipo también constituye un ejemplo de ocultación de información, ya que el plano se puede construir sin saber si se va a utilizar en un sedán o en un hatchback.

Como puede verse en este ejemplo, la ocultación de información proporciona flexibilidad. Esta flexibilidad permite a un programador modificar la funcionalidad de un programa de computadora durante la evolución normal a medida que el programa de computadora cambia para adaptarse mejor a las necesidades de los usuarios. Cuando un programa de computadora está bien diseñado, descomponiendo la solución del código fuente en módulos utilizando el principio de ocultación de información, los cambios evolutivos son mucho más fáciles porque los cambios suelen ser locales en lugar de globales.

Los automóviles proporcionan otro ejemplo de esto en la forma en que interactúan con los conductores. Presentan una interfaz estándar (pedales, volante, palanca de cambios, señales, medidores, etc.) en la que las personas reciben capacitación y licencia. Así, la gente sólo tiene que aprender a conducir un coche; no necesitan aprender una forma completamente diferente de conducir cada vez que conducen un modelo nuevo. (Por supuesto, existen transmisiones manuales y automáticas y otras diferencias similares, pero en general, los automóviles mantienen una interfaz unificada).

Ver también

Notas

  1. ^ Rogers, Wm. Pablo (18 de mayo de 2001). "La encapsulación no es ocultar información". Mundo Java . Consultado el 20 de julio de 2020 .
  2. ^ ab Booch, Grady (2007). Análisis y Diseño Orientado a Objetos con Aplicaciones . Addison-Wesley. págs. 51–52. ISBN 978-0-201-89551-3.
  3. ^ Parnas, David L. (1972). "Sobre los criterios que se utilizarán para descomponer sistemas en módulos". Comunicaciones de la ACM . 15 (12): 1053–58. doi : 10.1145/361598.361623 . S2CID  53856438.
  4. ^ Scott, Michael L. (2009) [2000]. Broy, Manfredo; Denert, Ernst (eds.). Pragmática del lenguaje de programación (Tercera ed.). Editores Morgan Kaufmann. pag. 173.doi : 10.1007 /978-3-642-59412-0. ISBN 978-3-540-43081-0. S2CID  2698265.

Referencias