El antiguo pero siempre actual concepto de separación interfaz-implementación


En este escrito te explico en que consiste la separación interfaz-implementación. Primero te presento un diagrama explicándote el concepto, para luego pasar al mapa conceptual y finalmente mediante diagramas, te cuento una de las consecuencias del concepto: el impacto que se tiene en un sistema hecho con muchos módulos interdependientes hecho con y sin separación.

La separación interfaz-implementación es uno de los conceptos más poderosos que se tiene en teoría de sistemas y es muy usado en los sistemas de información. También es uno de los conceptos más antiguos y tiene muchas encarnaciones, como en los TAD (Tipo Abstracto de Datos) en SOA y muchos otros.

El concepto es muy sencillo y lo puedes ver representado en la siguiente imagen.

Diagrama de la Separación Interfaz-Implementación

Diagrama de la Separación Interfaz-Implementación

En el diagrama anterior tenemos un módulo (el azul claro) que tiene dos partes: la interfaz y la implementación. Como puedes ver, las entradas y la salidas del módulo se hacen por intermedio de la interfaz, esa es su razón de ser; pero, la implementación no debe tener entradas o salidas, solo debe implementar el módulo.

Desde afuera del módulo solo se puede conocer la interfaz, mientras que la implementación permanece oculta. Este es el principio de caja negra, y se llama así por que su funcionamiento interno es opaco a los sistemas que están fuera del módulo. Te lo explico de otra forma, con un mapa conceptual.

Mapa conceptual de la Separación Interfaz-Implementación

Mapa conceptual de la Separación Interfaz-Implementación

En la separación interfaz-implementación, la interfaz es única, mientras que la implementación puede ser múltiple. Este es lo que sustenta la sobrecarga de operaciones en programación orientada a objetos. La sobrecarga es precisamente eso, una sólo interfaz,  el encabezado de la operación, pero con muchas implementaciones. Un ejemplo, el operador + está sobrecargado en la mayoría de los lenguajes de programación, pues se tiene una suma para enteros y otra para números flotantes, diferente implementación para cada tipo de dato, pero la misma interfaz, el +.

Por otro lado, la interfaz es pública, mientras que la implementación es oculta. En nuestro ejemplo del operador +, la forma en como se hacen las sumas de los número flotantes no la conocemos, o no nos importa; pero lo que si nos importa es como hacer una suma de dos números con el operador +, sólo conocemos su interfaz.

Para ver la potencia de la separación entre interfaz e implementación veamos el siguiente sistema.

Separación Interfaz-Implementación: Modificación de un módulo sin separación

Separación Interfaz-Implementación: Modificación de un módulo sin separación

En él podemos ver un sistema de muchos módulos, los rectángulos azules y rojo; y podemos ver las comunicaciones entre ellos que son las flechas. Imagínate por un momento que vamos a modificar el módulo rojo ¿Cuál seria el impacto sobre los otros módulos del sistema? Para ello voy a presentarte el mismo sistema pero con los mulos pintados de acuerdo al impacto: los módulos rojo claro son los que hay que cambiar mucho, los amarillos los que hay que cambiar poco y los verdes los que no hay que cambiar para nada. Veamos el sistema con estos colores.

Separación Interfaz-Implementación: Impacto de la modificación de un módulo sin separación

Separación Interfaz-Implementación: Impacto de la modificación de un módulo sin separación

¡No hay ningún módulo verde! Hay que cambiarlos todos. El impacto de cambiar un módulo en un sistema cuyos módulo no separan interfaz de implementación es alto. Imagínate por un momento que este sistema fuera un  programa de computador, prácticamente tocaría reescribir código en todo los módulos del sistema. Imagínate cuantos nuevos errores aparecerían.

Pero en cambio, piensa en el anterior sistema pero con cada uno de los módulos con separación de interfaz de implementación, como vez a continuación.

Separación Interfaz-Implementación: Modificación de la implementación de un módulo

Separación Interfaz-Implementación: Modificación de la implementación de un módulo

Ahora imagínate otra vez que cambiamos implementación del módulo central ¿Como impactaría al sistema? Pues muy poco, por que los demás módulos no dependen de la implementación del módulo central, sólo dependen de su interfazs.

¿Pero, te estarás preguntando,  si cambio la interfaz del módulo? Pues ese es uno de los problemas de la separación interfaz-implementación, la interfaz tiene que estar muy bien definida y cambiar lo menos posible.

La separación interfaz-implementación es tan poderosa que se usa en muchas formas. Por ejemplo, en los Tipos de Datos Abstractos o TDA, Esta es una forma de ver las estructuras de datos en la cual, precisamente, se separa interfaz de implementación. Otro ejemplo es en SOA, del que he escrito el artículo Conceptos clave de SOA, aunque no es necesario que te lo leas (aunque te lo recomiendo) para saber que el concepto que hace poderoso a SOA es precisamente la separación de interfaz e implementación.

Dicen que la informática, la computación o como quieras llamar cambia mucho en el tiempo, pero conceptos como la separación interfaz-implementación se están usando desde sus inicios hasta ahora y se seguirán usando.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: