Patrones de arquitectura de software

El concepto de Arquitectura de Software tiene mucho tiempo de antigüedad, pero no fue hasta la década de los 90 que comenzó a utilizarse de manera formal; del mismo modo, analizando los sistemas se observó que existen patrones que se repiten conformando lo que se conoce como estilos arquitectónicos (un patrón es un modelo que podemos seguir para realizar algo, surgen de la experiencia de seres humanos de tratar de lograr ciertos objetivos).

Un patrón de arquitectura de software describe un problema particular y recurrente del diseño, que surge en un contexto específico, y presenta un esquema genérico y probado de su solución.

Un estilo arquitectónico define un conjunto de familias de patrones de software con una determinada estructura y restricciones.

Por otro lado, con frecuencia se dice que la función define a la forma, es decir, que la estructura o la arquitectura de cualquier sistema está muy relacionada con lo que dicho sistema tiene que hacer.

Esta es la razón por la que los sistemas con objetivos similares comparten también una arquitectura común, unos procesos bien definidos, y un conjunto de elementos similares (patrones de diseño). Similar funcionalidad y servicio, similar estructura.

Al desarrollar un sistema que se encuadra dentro de cierto tipo, es muy útil consultar lenguajes de patrones que traten el dominio en el que estamos. Un lenguaje de patrones nos sirve como referencia conceptual del dominio del problema, ya que éstos parten como solución a un conjunto de casos de uso, e interacciones con actores específicos.

Además constituyen también un marco conceptual en el diseño de la arquitectura de nuestros sistemas, ya que como la función define a la forma, sintetizan por lo general soluciones arquitectónicas y estructurales bien probadas y muy útiles dentro del tipo de problemas que modelan.

De alguna forma, los patrones permiten identificar y completar los casos de uso básicos expuestos por el cliente, comprender la arquitectura del sistema a construir así como su problemática, y buscar componentes ya desarrollados que cumplan con los requisitos del tipo de sistema a construir (es decir, permiten obtener de una forma sencilla la arquitectura base que se busca durante la fase de diseño arquitectónico).

Sin embargo, los lenguajes de patrones tampoco son la panacea y presentan muchas lagunas. Sobre todo, hay que recordar que todo este movimiento de documentación de diseño se origina a mediados de los noventa y que aun siendo mucho el trabajo realizado, no existe todavía ninguna estandarización sobre cómo abordar el desarrollo de estos lenguajes.

Estos lenguajes deberían, además, tener una visión orientada a la construcción de software y a constituirse como elementos integrables en el proceso de desarrollo de las aplicaciones.

Generalmente los patrones de diseño y arquitectura definen soluciones para medios repetitivos.

En este momento, podemos ver la arquitectura de software como una abstracción del sistema que nos permite observar su estructura y sus relaciones. Para el desarrollo del diseño arquitectónico se recomiendan seguir los siguientes pasos:

a) Estructuración del sistema
b) Modelado de control
c) Descomposición modular

Por otro lado, existen diferentes estilos arquitectónicos, a continuación mencionaremos algunos de ellos.

La Arquitectura de Flujo de Datos parte del DFD para obtener una arquitectura del sistema:

– Se establece el tipo de flujo de información Se indican los límites del flujo
– Se convierte el DFD en una estructura del programa
– Se define la jerarquía de control mediante particionamiento.
– Se refina la estructura resultante utilizando heurísticas de diseño.

La arquitectura centrada en datos tiene como componente principal un repositorio, del cual surgen los demás componentes.

Las arquitecturas estratificadas son de las más utilizadas en la actualidad, dado que dividen las actividades y responsabilidades de sistemas por capas. El software más elaborado como los sistemas operativos, software de base, sistemas distribuidos y otros maneja variantes de esta arquitectura.

El diseño se debe refinar realizando cada uno de los siguientes pasos:

a) Desarrollar una descripción del procedimiento para cada módulo.
b) Desarrollar una descripción de la interfaz para cada módulo.
c) Se definen las estructuras de datos generales y globales.
d) Se anotan todas las limitaciones/restricciones del sistema.

Se debe refinar el diseño hasta que esté completo. Se recomienda completar la arquitectura con el diseño de interfaces.

Los patrones de diseño, también nos ayudarán a especificar las interfaces, identificando los elementos claves en las interfaces y las relaciones existentes entre distintas interfaces.

El diseño de interfaces se refiere al estudio de las relaciones entre los usuarios y las computadoras para que un sistema se pueda ejecutar. El diseño de una interfaz puede definir el éxito de cualquier proyecto, ya que la utilización de cualquier interfaz de usuario depende de factores humanos.

Existen algunas reglas de oro para el buen diseño de interfaces de usuario, éstas son:

– dar el control al usuario;
– reducir la carga de memoria del usuario;
– y, construir una interfaz consecuente.

Fuente: Informática I de la facultad de contaduría y administración, UNAM.