En informática , la ocultación de información es el principio de segregación de las decisiones de diseño de un programa informático 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. Esta protección implica proporcionar una interfaz estable que proteja el resto del programa de la implementación (cuyos detalles son susceptibles de cambiar). Dicho de otro modo, la ocultación de información es la capacidad de impedir 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 usa a menudo indistintamente con el de ocultación de información. Sin embargo, no todos coinciden en las diferencias entre ambos; se puede considerar la ocultación de información como el principio y la encapsulación como la técnica. Un módulo de software oculta información al encapsularla en otro módulo u otra estructura que presenta una interfaz. [ 1 ]
Un uso común del ocultamiento de información consiste en ocultar la disposición física del almacenamiento de datos, de modo que si se modifica, el cambio se limite 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 posteriormente se cambia la representación a una única variable de matriz de tamaño tres, un módulo diseñado con el ocultamiento de información en mente protegería el resto del programa de dicho cambio.
En la programación orientada a objetos , la ocultación de información (mediante el anidamiento de tipos) reduce el riesgo en el 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 exclusivamente a través de ella, 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 objetivo es lograr el potencial de cambio: los mecanismos internos del componente pueden mejorarse sin afectar a otros componentes, o bien el componente puede reemplazarse por otro que admita la misma interfaz pública. La encapsulación también protege la integridad del componente, al impedir que los usuarios establezcan los datos internos del componente en un estado inválido o inconsistente. Otro beneficio de la encapsulación es que reduce la complejidad del sistema y, por lo tanto, aumenta la robustez, al limitar las interdependencias entre los componentes de 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 bases de datos. De este modo, la encapsulación es un principio fundamental de una buena arquitectura de software, en todos los niveles de granularidad.
Encapsular el software tras una interfaz permite construir objetos que imitan el comportamiento y las interacciones de los objetos del mundo real. Por ejemplo, un simple reloj despertador digital es un objeto real que cualquier persona puede usar y comprender. Puede entender qué hace el reloj y cómo usarlo a través de la interfaz proporcionada (botones y pantalla), sin necesidad de comprender cada componente interno. Del mismo modo, si el reloj se sustituyera por otro modelo, la persona podría seguir usándolo de la misma manera, siempre que la interfaz funcione igual.
En el contexto más concreto de un lenguaje de programación orientado a objetos, el término se utiliza para referirse a un mecanismo de ocultación de información, un mecanismo de agrupación o una combinación de ambos. (Véase Encapsulación (programación orientada a objetos) para 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í misma 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 .
Ejemplo
La ocultación de información sirve como criterio eficaz para dividir cualquier equipo, software o hardware en módulos funcionales. Por ejemplo, un automóvil es un equipo complejo. Para que su diseño, fabricación y mantenimiento sean razonables, este equipo se divide en módulos con interfaces específicas que ocultan las decisiones de diseño. Al diseñar un automóvil de esta manera, un fabricante puede ofrecer diversas opciones sin dejar de producir un vehículo económico.
Por ejemplo, un fabricante de automóviles puede ofrecer una versión de lujo y 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 ambos motores, uno para la versión de lujo y otro para la estándar, proporcionan la misma interfaz para ambos. Ambos motores se alojan en el mismo compartimento del motor, que es idéntico para ambas versiones. Ambos motores son compatibles con la misma transmisión, los mismos soportes y los mismos controles. La diferencia radica en que la versión de lujo, más potente, tiene una mayor cilindrada y un sistema de inyección de combustible programado para proporcionar la mezcla aire-combustible que requiere este 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 sistema de suspensión mejorado con neumáticos más anchos y diferentes colores de pintura. A pesar de estos cambios, la mayor parte del coche es igual entre la versión estándar y la de lujo. La radio con reproductor de CD es un módulo que reemplaza a la radio estándar, también un módulo, en el modelo de lujo. Los asientos más cómodos se instalan en los mismos soportes que los asientos estándar. El material de los asientos, ya sea cuero o plástico, o si ofrecen soporte lumbar o no, no influye en la calidad.
Los ingenieros diseñan el automóvil dividiendo la tarea en partes que se asignan a equipos. Cada equipo diseña su componente según un estándar o interfaz específicos, lo que les brinda flexibilidad en el diseño y, al mismo tiempo, garantiza que todos los componentes encajen correctamente.
Los fabricantes de automóviles suelen utilizar la misma estructura básica para varios modelos diferentes, en parte como medida de control de costes. Esta " plataforma " también constituye un ejemplo de ocultación de información, ya que la distribución interior puede diseñarse sin saber si se utilizará en un sedán o en un hatchback.
Como se puede apreciar en este ejemplo, la ocultación de información proporciona flexibilidad. Esta flexibilidad permite al programador modificar la funcionalidad de un programa informático durante su evolución normal, a medida que este se adapta mejor a las necesidades de los usuarios. Cuando un programa informático está bien diseñado, descomponiendo la solución del código fuente en módulos mediante el principio de ocultación de información, los cambios evolutivos son mucho más sencillos, ya que suelen ser cambios locales en lugar de globales.
Los automóviles son otro ejemplo de esto en su interacción con los conductores. Presentan una interfaz estándar (pedales, volante, palanca de cambios, intermitentes, indicadores, etc.) sobre la cual las personas reciben capacitación y obtienen su licencia. Por lo tanto, solo necesitan aprender a conducir un automóvil; no es necesario aprender una forma de conducción completamente diferente cada vez que se conduce un modelo nuevo. (Si bien existen transmisiones manuales y automáticas, entre otras diferencias, en general, los automóviles mantienen una interfaz unificada).
Véase también
Notas
- ↑ Rogers, Wm. Paul (18 de mayo de 2001). "La encapsulación no es ocultar información" . JavaWorld . Recuperado el 20 de julio de 2020 .
- 1 2 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.
- ↑ Parnas, David L. (1972). "Sobre los criterios que se deben usar para descomponer sistemas en módulos" . Communications of the ACM . 15 (12): 1053– 58. doi : 10.1145/361598.361623 . S2CID 53856438 .
- ↑ Scott, Michael L. (2009) [2000]. Broy, Manfred; Denert, Ernst (eds.). Pragmática del lenguaje de programación (Tercera ed.). Morgan Kaufmann Publishers. p. 173. doi : 10.1007/978-3-642-59412-0 . ISBN 978-3-540-43081-0. S2CID 2698265 .
Referencias
- Parnas, David L. (1971). "Aspectos de distribución de información de la metodología de diseño" (PDF) . En Charles V. Freiman y John E. Griffith y Jack L. Rosenfeld (eds.). Procesamiento de la información, Actas del Congreso IFIP 1971, Volumen 1 - Fundamentos y sistemas, Ljubljana, Yugoslavia, 23-28 de agosto de 1971. Congreso IFIP 1971. Vol. 1. North-Holland. pp. 339–344 . doi : 10.1184/R1/6606470.V1 .
- Parnas, David L. (2002). «La historia secreta de la ocultación de información». En Manfred Broy y Ernst Denert (eds.). Pioneros del software . Springer-Verlag Berlín Heidelberg. ISBN 978-0-12-374514-9.
- Programación orientada a objetos
- Principios de programación
