Sei sulla pagina 1di 11

ARQUITECTURA DE SOFTWARE: DISEÑO Y PATRONES

por: Lira Arreola Nadia

Arquitectura software

La arquitectura de software nos proporciona una visión global del sistema, identifica
los elementos y las relaciones entre estos, lo que permite entender el sistema,
organizar su desarrollo, plantear una posible reutilización del software.

La arquitectura de software no se refiere únicamente a requisitos estructurales, sino


que debe de incluir aspectos de rendimiento, usabilidad, reutilización, restricciones
económicas y tecnológicas, e incluso cuestiones estéticas.

Actualmente existen muchas metodologías de desarrollo de software por lo que es


muy difícil sacar una visión unificada sobre los principios para identificar y diseñar
una arquitectura.

El uso de la metodología tradicional de desarrollo muchas veces no permite visualizar


el problema de una manera integral, ya que generalmente se centra en los requisitos
y en la estructura que deberá tener nuestro sistema olvidándose en muchos casos
de otros factores importantes.

El modelado es la parte central de todas las actividades que conducen a la


producción de un buen software y el uso de patrones ofrece una visión alternativa
de metodología que sirve para comunicar la estructura y el comportamiento del
sistema.

“Identificar el tipo de sistema a construir nos permite examinar la arquitectura de


sistemas ya construidos, comprender los requisitos a los que se enfrentan, y
contrastarlos con los nuestros. Si tenemos en cuenta que en cualquier tipo de
sistema existen necesidades similares, muchos de los componentes que se usan en
su desarrollo suelen ser los mismos” (Díaz, 2010).

Basados en la experiencia es común que desde el inicio del desarrollo de una


aplicación, se pueda buscar componentes que implementen tecnologías o ciertas
funcionalidades propuestas por otros integrando la búsqueda de componentes y su
uso dentro del proceso de desarrollo de software; bajo esta metodología construir
una arquitectura implica no desarrollar ideas nuevas sino que representa una
oportunidad de usar la experiencia acumulada por otros.

¿Qué es un patrón?

Los expertos normalmente no crean nuevas soluciones para cada problema que se
presenta, sino que se basan en su experiencia para ajustar soluciones de problemas
anteriores (patrones) aplicando estás en los nuevos problemas.

Se puede decir que los patrones capturan el conocimiento de experiencias anteriores


y pueden utilizarse en crear nuevas soluciones en contextos similares, los patrones
tienen en esencia una base empírica ya que se basan en la experiencia,
generalmente no son creados sino detectados, por lo que la principal fuente para la
identificación de patrones es la aportación de expertos y el proceso inductivo de los
diseñadores.

Según el arquitecto Christopher Alexander, “cada patrón describe un problema que


se da continuamente en nuestro entorno, describiendo la solución base o nuclear a
ese problema, de manera tal que puedes usar esa solución un millón de veces sin
utilizar dos veces el mismo modo” Alexander (1977).
FRACTAL

Otros autores señalan que los patrones son relaciones estructurales entre
componentes de un sistema que acarrea un equilibrio de demandas en el sistema,
Bergin (2000) y que es un modo de generar conductas complejas desde reglas
simples.

Bergin señala que los patrones capturan las practicas de los expertos, comunican
este conocimiento a otros volviéndose una herramienta para los no expertos,
resuelven problemas a problemas recurrentes, es un vocabulario de soluciones,
equilibra un conjunto de fuerzas y pueden trabajar con otros patrones.

Los objetivos que ofrecen los patrones son los siguientes:


 Reducción de tiempos
 Disminución del esfuerzo de mantenimiento
 Aumentar la eficiencia
 Asegurar la consistencia
 Aumentar la fiabilidad
 Proteger la inversión en desarrollos
Según Ochoa (2005) los patrones tienen las siguientes características:
• Atacan problemas recurrentes que ocurren en situaciones específicas y dan
una solución.
• Documentan experiencias de diseño existentes y bien probadas.
• Identifican y especifican abstracciones de alto nivel.
• Proveen un vocabulario común y comprensible.
• Son una forma de documentar la arquitectura del software.
• Facilitan la construcción de software con propiedades definidas (propiedades
particulares).
• Ayudan a construir arquitecturas heterogéneas y complejas.

El enfoque del uso de patrones dentro de la ingeniería de software se ha extendido


cada día más, a tal grado que se han creado y se siguen creando catálogos de
patrones para solucionar problemas en el desarrollo de software a distintos niveles
de abstracción.

Entre la gran diversidad de patrones propuestos destacan patrones de arquitectura,


patrones de procesos, patrones de interfaces y patrones de diseño de software;
éstos últimos favorecen a la reutilización del software capturando la experiencia de
los diseños exitosos de sistemas creados bajo el paradigma orientado a objetos y
presentarlo en forma de catalogo de patrones.

Todo tipo de patrones tienen un formato bien definido donde se especifica de


manera general:
• Nombre del patrón
• Contexto: Describe el escenario donde se da el problema.
• Problema que resuelve: Conjunto de fuerzas que surgen del contexto
• Solución propuesta: Configuración para balancear las fuerzas
• Ejemplo
El ser humano en su constante búsqueda de conocimiento busca de manera casi
intuitiva el reconocimiento de patrones de imágenes, de hechos y de
comportamiento, que le ayuden en su vida cotidiana lo que los ha convertido en
fuente de aprendizaje.

Un patrón es, pues, una solución útil, usable y reutilizable de forma eficiente. Los
patrones y los correspondientes lenguajes de patrones son, pues formas de describir
métodos excelentes y buenos diseños.

Patrones de Arquitectura

Ochoa (2005) señala que los patrones arquitectónicos proporcionan una alternativa
(genérica) sobre cómo resolver algunos de los problemas arquitectónicos más
comunes. Y proporciona la siguiente clasificación:

Patrones Simples
El patrón de arquitectura de layers o capas ayuda a estructurar aplicaciones que pueden
descomponerse en grupos de subtareas con diferentes niveles de abstracción.
El patrón de arquitectura de pipes y filtros provee una estructura para procesar flujos de
datos. Cada paso de procesamiento se encapsula en un filtro. Los datos se pasan usando los
“pipes” entre filtros adyacentes. Recombinando los filtros pueden construirse distintas
familias de sistemas relacionados.
El patrón de arquitectura de pizarrón es útil para problemas en que no se conoce una
estrategia determinística para calcular la solución. Varios subsistemas especializados reúnen
su conocimiento para construir una solución parcial aproximada.

Sistemas Interactivos
El patrón de arquitectura de modelo-view-controlador (MVC) divide una aplicación interactiva
en tres partes. El modelo contiene los datos y la funcionalidad esencial. Las views despliegan
la información al usuario. Los controladores manejan el input. Las views y los controladores
juntos componen la interfaz con el usuario. El mecanismo de cambio-propagación asegura la
consistencia de la interfaz con el modelo.
El patrón de arquitectura PAC define una estructura jerárquica de agentes cooperativos. Cada
agente es responsable de un aspecto específico de la funcionalidad de la aplicación y está
compuesto por tres componentes: presentación-abstracción-control. Esta subdivisión separa
los aspectos de HCI de los agentes, del núcleo funcional de cada uno y de los mecanismos
de comunicación con otros agentes.

Patrones Adaptables
MicroKernel: Es usado en sistemas de software que deben adaptarse a los cambios en los
requisitos. Este separa el núcleo funcional, la funcionalidad extendida y los aspectos relativos
al cliente.
Reflexión: Provee un mecanismo para cambiar la estructura y el comportamiento de un
sistema de software, en forma dinámica.
Este patrón divide a una aplicación en dos partes: un meta nivel que provee información
acerca de las propiedades del subsistema seleccionado, y un nivel base que provee la lógica
de la aplicación.

Cubic Space Filling, M.C. Escher

El tipo de patrón de arquitectura que debe de usarse depende del tipo de sistema
que se quiera construir y de la prioridad de los requisitos en cuanto a desempeño,
seguridad, protección, disponibilidad y mantenibilidad.

Como puede apreciarse el uso de patrones ayuda a disminuir los riesgos


arquitectónicos del proyecto y a que estos estén mucho más controlados,
fomentando un enfoque orientado a componentes reutilizables implica muchas
ventajas como la reducción de costos y ahorro de tiempo.

La arquitectura de cualquier sistema está muy relacionada con lo que dicho sistema
tiene que hacer es por eso que el uso de patrones nos permite obtener de una forma
sencilla la arquitectura base que buscamos durante la fase de diseño arquitectónico.

Patrones de Diseño
En el desarrollo software el patrón de diseño describe las clases y objetos que se
comunicarán entre sí de manera que puedan resolver un problema general de
diseño en un contexto particular.

La clasificación de los patrones de diseño en este contexto atiende a dos


características como son:
 Atendiendo a su propósito
 Creacionales: Resuelven problemas relativos a la creación de objetos
 Estructurales: Resuelven problemas relativos a la composición de
objetos
 De Comportamiento: Resuelven problemas relativos a la interacción
entre objetos.
 Atendiendo a su ámbito
 Clases: Relaciones estáticas entre clases
 Objetos: Relaciones dinámicas entre objetos

Los patrones de diseño deben de comprimir experiencias que nos permitan mejorar
la calidad del diseño de un sistema, determinando elementos que soporten roles
útiles en dicho contexto, encapsulando complejidad, y haciéndolo más flexible.

Por esta razón los sistemas con objetivos similares comparten también una
arquitectura común (patrones de arquitectura), unos procesos bien definidos, y un
conjunto de elementos similares (patrones de diseño).

Patrones de Interacción
Un patrón de interacción modela un aspecto referente a la interfaz de un SI en
función de los requerimientos del usuario.
En comparación con los patrones de diseño de la ingeniería de software, el estudio
de patrones de interacción en el campo de la Interacción Humano-Computadora es
reciente.

Este tipo de patrones tienen que ver con la representación de la información


conforme a las necesidades del usuario, son de gran importancia pues su uso
favorece la satisfacción, eficiencia y aceptabilidad que sienten los usuarios al utilizar
los productos software que requieren.

Los patrones de interacción ayudan a diseñar sistemas fáciles de usar para las
personas por lo que una de las principales características generales es el de respetar
uno o más criterios de usabilidad provenientes de la ergonomía de interfaces del
usuario.

A continuación se presenta el formato de patrón de interacción para facilitar la


comunicación entre los diseñadores y la retroalimentación visual (Welie, 2000, citado
en Muñoz).

 Nombre del patrón: el cual debe ser representativo, claro y conciso del
concepto a comunicar.
 Problema: Una descripción del problema desde el punto de vista del usuario
 Principios de usabilidad: Describe los principios o criterios ergonómicos en
los cuales se basa el patrón.
 Contexto: Una descripción de la situación en la cual puede usarse el patrón,
cuales son las características del contexto, en términos de las tareas, del
usuario.
 Fuerza: aspectos del contexto que necesitan ser optimizados.
 Solución: Descripción clara de la solución propuesta (otros patrones pueden
ser necesarios para completar la solución completa del problema)
 Consecuencias: Describe los resultados de aplicar el patrón.
 Ejemplo: Una muestra ilustrativa de una solución exitosa.

Lenguajes de patrones

El lenguaje de patrón se define como "La especificación de una serie de elementos


(patrones) y sus relaciones (con otros patrones) de modo que nos permiten describir
buenas soluciones a los diferentes problemas que aparecen en un contexto
específico." (Díaz, 2010)
Si bien notaciones como UML o los diagramas de flujo ayudan a explicar un
determinado patrón, no constituyen un lenguaje de patrones.

Desafortunadamente los lenguajes de patrones presentan muchas lagunas ya que


no existe todavía ninguna estandarización sobre cómo abordar el desarrollo de estos
lenguajes, ni ninguna clasificación que los relacione.

Un posible ejemplo de lenguaje de patrones es el siguiente:


 Características básicas que lo definen y diferencian.
 Definición de los actores principales que participan en dicho sistema así como
sus casos de uso básicos, descritos evidentemente de forma genérica.
 Especificación de los principales componentes funcionales del sistema así
como las relaciones entre ellos.
 Arquitectura lógica y flujos de información, que estructuran los diferentes
subsistemas, el intercambio de información de los mismos, etc.
 Arquitectura de componentes. Consiste en mapear los componentes
funcionales en la arquitectura lógica de la aplicación.
 Arquitectura física. Especificación del despliegue de los componentes.

Describir un patrón de forma genérica es algo difícil muchas veces lo que se hace es
documentar la implementación de patrones existentes, para esto se tienen que
realizar diversas versiones de éstos patrones de manera que la versión final del
patrón se pueda utilizar en diferentes contextos.

Al identificar nuestro sistema como de cierto tipo, es muy útil consultar lenguajes de
patrones que nos sirva como referencia conceptual del dominio del problema, ya
que generalmente éstos parten como solución a un conjunto de casos de uso, e
interacciones con actores específicos.

Constituyen además un marco conceptual en el diseño de la arquitectura de nuestros


sistemas, ya que sintetizan soluciones arquitectónicas y estructurales bien probadas
y muy útiles dentro del tipo de problemas que modelan.

Finalmente el conocer y utilizar patrones favorece la fase de diseño y permite la


reutilización y las ventajas que esto conlleva, es decir permite crear software de
calidad, en menor tiempo y a menor costo.
Referencia Bibliográfica

Alexander, C. , Ishikawa, S., Silverstein, M., Jacobson, M., Fiksdahl-King, I., and
Angel, S., Oxford University Press, New York , 1977.

Bergin, J. (2000) EuroPLoP , Fifth European Conference on Pattern Languages of


Programs. Consultado en: http://www.coldewey.com/europlop2000/

Díaz Toledano, M.D. (n.d.). Cómo desarrollar una arquitectura software: los
lenguajes de patrones. Consultado en:
http://www.moisesdaniel.com/es/wri/ComoDesArqSoft.htm

Dürsteler, J. (abril 2001). Lenguajes de patrones. No reinventes la rueda.


Consultado en:
http://www.infovis.net/printMag.php?num=40&lang=1

Muñoz Arteaga, J. y Rodríguez Gómez, G. (n.d.). Instituto Nacional de Astrofísica


Óptica y Electrónica (INAOE). Departamento de Ciencias Computacionales. México.
Consultado en:
http://www.willydev.net/descargas/willydev_interapatterntocic.pdf

Ochoa Sergio. 2005. “Introducción a los Patrones (Diseño y Arquitectura)”


Clases 12 y 13 Consultado en:
https://www.u-cursos.cl/ingenieria/2005/2/CC51A/1/.../76454

Welie, v. M. and Trctteberg, H. (2000) "Interaction Patterns in User Interfaces".

Potrebbero piacerti anche