Pregunta

¿Cómo ayuda la ocultación de información a desacoplar los módulos que componen un sistema?

¿Fue útil?

Solución

La encapsulación (ocultación de información) le permite exponer el mínimo absoluto al mundo exterior. Esto significa que puede cambiar los bits no expuestos al contenido de su corazón sin afectar a los clientes.

Un caso en cuestión. Supongamos que ha implementado una estructura de datos que contiene cadenas en una matriz. Si expone la matriz, los usuarios de su estructura de datos pueden usar str [7] para obtener la cadena en la posición 7.

Ahora, ¿qué sucede si decide volver a implementar su estructura de datos como un árbol equilibrado para acelerar las búsquedas de cadenas? Para ello, mueva las cadenas a un árbol y cambie su matriz para que sea, no cadenas, sino punteros a ubicaciones dentro del árbol.

Eso romperá a sus clientes, porque esperarán cadenas, no punteros. Cada cliente tendría que cambiar para obtener los punteros de la matriz y luego buscarlos en el árbol.

Sin embargo, si hubiera ocultado totalmente la implementación y solo hubiera proporcionado una función:

String getStringAt (int n);

simplemente cambiaría la estructura de datos y la función para seguir siendo compatible.

Los clientes no se rompen porque su interfaz de programación de aplicaciones (API) no ha cambiado.

Una de las reglas más importantes que sigo con las clases es apuntar a máxima coherencia, mínimo acoplamiento . En otras palabras, una sola clase debería tener todo lo que necesita (nada más) y debería compartir la menor cantidad de información posible con el mundo exterior.

Eso significa todo que los clientes pueden hacer es llamar a la API. Sin exponer métodos que no sean API o permitir el acceso sin restricciones a variables públicas: todo se debe hacer con setters y getters.

Otros consejos

Ocultación de datos, no desacopla tanto los módulos, que ayuda a limitar el acoplamiento entre ellos.
Esto se debe a que ninguno de los elementos ocultos puede ser utilizado por ningún otro módulo que no sea el que están definidos, lo que limita los posibles vínculos / dependencias / call-it-what-you-may que '' pareja '' los módulos juntos.

En otras palabras, limita los intercambios entre módulos a estos que están específicamente definidos en la API , y este hecho ayuda mucho cuando se modifica la implementación de un módulo dado, porque tanto tiempo Como la API permanece igual, la interoperabilidad del módulo funcionará. (No es necesario explorar el código para encontrar si de alguna manera el módulo A, usó la variable x del Módulo B (si B oculta x, ¡es el único que lo usa!)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top