Diseño de interfaces

Diseño de interfaces

Un objetivo importante tanto del diseño orientado a objetos como de la arquitectura de software basada en componentes es la separación de la interfaz de la implementación. Una interfaz especifica las operaciones visibles externamente de una clase, servicio o componente sin revelar la estructura interna (implementación) de las operaciones. La interfaz puede considerarse un contrato entre el diseñador de la vista externa de la clase y el implementador de las partes internas de la clase. También es un contrato entre una clase que requiere (usa) la interfaz (es decir, invoca las operaciones proporcionadas por la interfaz) y la clase que proporciona la interfaz.

Figura 1.


Siguiendo el concepto de ocultación de información, los atributos de clase son privados y las operaciones públicas proporcionadas por una clase constituyen la interfaz. En el modelado estático que utiliza notación de diagrama de clases, la interfaz (operaciones de clase) se representa en el tercer compartimento de la clase. Un ejemplo de esto se encuentra en la Figura 1, que muestra la clase Cuenta, con dos atributos privados representados en el segundo compartimento de la clase (el signo "menos" representa privado en UML) y la interfaz que consta de las cinco operaciones públicas representadas en el tercer compartimento. compartimento de la clase (el signo "más" representa público en UML).

Debido a que la misma interfaz se puede implementar de diferentes maneras, es útil representar el diseño de la interfaz por separado del componente que realiza (es decir, implementa) la interfaz. Además, las interfaces se pueden realizar en contextos más amplios que las clases. Por lo tanto, las interfaces para subsistemas, componentes distribuidos y clases pasivas se pueden representar utilizando la misma notación de interfaz.

Una interfaz se puede representar con un nombre diferente al de la clase o componente que realiza la interfaz. Por convención, el nombre comienza con la letra "I". En UML, una interfaz se puede modelar por separado de un componente que realiza la interfaz. Una interfaz se puede representar de dos maneras: simple y expandida. En el caso simple, la interfaz se representa como un pequeño círculo con el nombre de la interfaz al lado. La clase o componente que proporciona la interfaz está conectada al círculo pequeño, como se muestra en la Figura 2a. En el caso ampliado, la interfaz se representa en un cuadro rectangular con la notación de modelado estático, como se muestra en la Figura 2b, con el estereotipo «interfaz» y el nombre de la interfaz en el primer compartimento. Las operaciones de la interfaz se representan en el tercer compartimento. El segundo compartimento se deja en blanco (tenga en cuenta que en otros textos, las interfaces a veces se representan sin el compartimento del medio). Un ejemplo de interfaz es IBasicAlarmService, que proporciona dos operaciones, una para leer datos de alarma y otra para publicar nuevas alarmas, de la siguiente manera:


Figura 2.

El componente que realiza la interfaz se llama BasicAlarmService y proporciona la implementación de la interfaz. En UML, la relación de realización se representa como se muestra en la Figura 2c (flecha discontinua con punta de flecha triangular), que muestra el componente BasicAlarmService realizando la interfaz IBasicAlarmService. Una interfaz requerida se representa con una pequeña notación de semicírculo con el nombre de la interfaz al lado. La clase o componente que requiere la interfaz está conectada al semicírculo, como se muestra en la Figura 2d. Para mostrar que un componente con una interfaz requerida utiliza un componente con una interfaz proporcionada, el semicírculo (a veces denominado zócalo) con la interfaz requerida se dibuja alrededor del círculo (a veces denominado bola) con la interfaz proporcionada, como se muestra en la figura 2e.




Comentarios

Entradas más populares de este blog

Layers of Abstraction Architectural Pattern

Antipatrones de diseño de software

Asynchronous Message Communication Pattern