Estilos Particulares de Componentes y Conectores
Patrones de Arquitectura de Software Arquitectura de Software - Estilos de Componentes y Conectores Patrones de Arquitectura de Software La definición de patrones en arquitectura de software intenta: formalizar la forma en que se comunica y reusa la experiencia de diseño, capturar la experiencia probada de diseño de software, describir problemas recurrentes que surgen en determinados contextos, describir esquemas de soluciones probados, disponer de herramientas para los no expertos, ir un paso más hacia la ingeniería de software: permitir que gente común haga cosas que antes requerían virtuosismo.
Patrones de Arquitectura Arquitectura de Software - Estilos de Componentes y Conectores Patrones de Arquitectura Un patrón de arquitectura de software es: un esquema genérico probado para solucionar un problema particular recurrente que surge en un cierto contexto. Este esquema se especifica describiendo: las componentes, sus responsabilidades, relaciones, y las formas en que colaboran.
¿Qué es un Patrón? Patrón Contexto Problema Solución Arquitectura de Software - Estilos de Componentes y Conectores ¿Qué es un Patrón? Patrón Contexto Situación de diseño que da lugar al problema. Problema Conjunto de fuerzas que surgen del contexto. Solución Configuración para balancear las fuerzas: Componentes y relaciones, Comportamiento dinámico.
Descripción de un Patrón Arquitectura de Software - Estilos de Componentes y Conectores Descripción de un Patrón No existe un formalismo estándar para describir patrones.
Distintas Tipos de Estilos de Componentes y Conectores Arquitectura de Software - Estilos de Componentes y Conectores Distintas Tipos de Estilos de Componentes y Conectores Arquitecturas de flujo de datos Arquitecturas centradas en datos Arquitecturas de llamada-retorno Arquitecturas de componentes independientes Estilos heterogéneos Cada clase tiene a su vez subclases y una misma arquitectura puede verse como perteneciente a más de un estilo.
Arquitecturas de Flujo de Datos Arquitectura de Software - Estilos de Componentes y Conectores Arquitecturas de Flujo de Datos El sistema se percibe como una sucesión de transformaciones que sufre una serie de datos de entrada a través del sistema. Los datos ingresan al sistema y fluyen a través de las componentes una a una hasta que se asignan a un destino final: salida o almacenamiento. Son típicos casos de arquitecturas que promueven la reusabilidad y la modificabilidad. Existen dos subestilos: secuencial por lotes tubos y filtros
Arquitectura Secuencial por Lotes Arquitectura de Software - Estilos de Componentes y Conectores Arquitectura Secuencial por Lotes Validar Sort Actualizar Reportar Es la estructura típica de un sistema de procesamiento de datos tradicional por lotes (batch). Cada proceso se ejecuta completamente antes de comenzar la ejecución del siguiente.
Arquitectura de Tubos y Filtros Arquitectura de Software - Estilos de Componentes y Conectores Arquitectura de Tubos y Filtros Enfatiza la transformación incremental de los datos a través de las sucesivas componentes. Cada componente (filtro) es un traductor que procesa los datos de entrada usa poca información de contexto no retiene información de estado Leer Traducir al inglés Escribir inglés Traducir al chino Escribir chino
Tubos y Filtros como un Patrón de Arquitectura
Ejemplo: Compilador Portable de Mocha Arquitectura de Software - Estilos de Componentes y Conectores Ejemplo: Compilador Portable de Mocha Mocha (Modular Object Computation with Hypothetical Algorithms). AuLait (Another Universal Language for Intermediate Translation) corre en una máquina virtual CUP (Concurent Uniform Processor) Intel SPARC Intérprete MIPS Análisis Lexicográfico/ Scanner Sintáctico/Parser Semántico Generación de Código Intermedio Optimización texto ASCII (programa) secuencia de tokens árbol sintáctico abstracto árbol sintáctico abstracto aumentado programa AuLait programa AuLait optimizado
Tubos y Filtros: Contexto Arquitectura de Software - Estilos de Componentes y Conectores Tubos y Filtros: Contexto Procesamiento de flujos de datos. Problema descompuesto en una serie de actividades. Las actividades transforman uno o más flujos de datos de entrada en uno o más flujos de datos de salida, en forma incremental. Cada actividad es un filtro. Los filtros se comunican solamente a través de tubos: operación que envía una secuencia de datos de un proceso a otro.
Tubos y Filtros: Problema Arquitectura de Software - Estilos de Componentes y Conectores Tubos y Filtros: Problema El sistema es una secuencia de transformaciones de los datos. La aplicación debe descomponerse en varias partes. Las transformaciones son: bien ordenadas sin estado interno independientes Fuerzas: Futuros cambios intercambiando algunos filtros. Pequeñas transformaciones son más fácilmente reutilizadas. Los datos pueden tener diferentes formatos.
Tubos y Filtros: Solución Arquitectura de Software - Estilos de Componentes y Conectores Tubos y Filtros: Solución Shaw: modelo de sistema flujo de datos entre componentes componentes filtros (transformaciones, procesamiento local, asíncrono) conectores tubos (streams) estructura de control flujo de datos. Buschmann: el sistema se divide en varios pasos secuenciales de procesamiento los pasos se conectan con flujos de datos cada filtro consume y procesa sus datos en forma incremental el origen de los datos, el destino y los filtros se conectan con tubos que implementan el flujo de datos entre pasos de procesamiento.
Tubos y Filtros: Estructura Arquitectura de Software - Estilos de Componentes y Conectores Tubos y Filtros: Estructura Filtros: unidades de procesamiento en las arquitecturas de tubos y filtros. enriquece, refina y/o transforma los datos. el procesamiento se inicia: el elemento siguiente solicita datos (pull) el elemento anterior envía datos (push) el filtro tiene un ciclo interno que solicita datos del filtro anterior y envía datos al siguiente (filtro activo). los filtros no comparten estado. los filtros no saben de la existencia o identidad de otros filtros.
Tubos y Filtros: Estructura Arquitectura de Software - Estilos de Componentes y Conectores Tubos y Filtros: Estructura Tubos: conectan origen-filtro, filtro-filtro, filtro-destino transferencia de datos con un buffer First-In-First-Out si dos filtros activos se comunican con un tubo, éste los sincroniza
Tubos y Filtros: Estructura Arquitectura de Software - Estilos de Componentes y Conectores Tubos y Filtros: Estructura Origen de datos: input del sistema brinda al sistema una serie de datos con la misma estructura o tipo ejemplos: archivo de líneas de texto, sensor pueden también ser activos (push) o pasivos. Destino de datos: a él llegan los resultados del procesamiento del sistema existen destinos activos (pull) y pasivos
El Ejemplo Input Scanner Parser Analizador Semántico Generador Arquitectura de Software - Estilos de Componentes y Conectores El Ejemplo Input int getchar() Scanner token yylex() Parser bool yyparse() Analizador Semántico Generador de Código writeCodeByte() tubo UNIX read write Intérprete AuLait call getchar call yylex call semantic check call codgen write pipe read pipe
Tubos y Filtros: Dinámica Arquitectura de Software - Estilos de Componentes y Conectores Tubos y Filtros: Dinámica Escenario I: push pipeline. La acción se inicia “empujando” los datos hacia el siguiente filtro. Data Source push Filtro 1 push Filtro 2 push Data Sink data write f1 data write f2 data write
Tubos y Filtros: Dinámica (cont.) Arquitectura de Software - Estilos de Componentes y Conectores Tubos y Filtros: Dinámica (cont.) Escenario 2: push/pull pipeline. Origen y destino de datos pasivos. El filtro 2 juega el rol activo iniciando el proceso. Data Source Filtro 1 pull Filtro 2 pull/push Data Sink read read f1 data data f2 data write
Tubos y Filtros: Implementación Arquitectura de Software - Estilos de Componentes y Conectores Tubos y Filtros: Implementación Dividir las tareas en una secuencia de pasos de procesamiento. los procesos deben ser independientes y ordenados. Definir el formato de los datos transmitidos a través de cada pipe. flexibilidad vs. performance. Decidir implementación de cada tubo. Determinar la implementación de los filtros (activos o pasivos) Diseñar e implementar los filtros. Diseñar política de errores. Instalar el sistema.
Ejemplo: Compilador Mocha Arquitectura de Software - Estilos de Componentes y Conectores Ejemplo: Compilador Mocha Los sucesivos filtros comparten un cierto estado: la tabla de símbolos. No es una arquitectura Tubos y Filtros estricta. La implementación es un único programa. Analizador Lexicográfico/Scanner Analizador Sintáctico/Parser Tabla de Símbolos Analizador Semántico Generador de Código Intermedio
Tubos y Filtros: Consecuencias Arquitectura de Software - Estilos de Componentes y Conectores Tubos y Filtros: Consecuencias Beneficios: los archivos intermedios no son necesarios flexibilidad reutilización de filtros rápida prototipación eficiencia con procesamiento paralelo. Desventajas: compartir información de estado es caro y poco flexible ineficiencia por conversión de datos errores pueden implicar reiniciar el sistema.
Características de Tubos y Filtros Arquitectura de Software - Estilos de Componentes y Conectores Características de Tubos y Filtros Los tubos no tienen estado interno y simplemente comunican datos entre los filtros. Tubos y filtros ejecutan en forma no determinística sobre los datos hasta que éstos se acaban. Restricciones de conexión: existe una fuente de datos conectada al puerto input de un filtro; existe un destino de datos conectado al puerto output de un filtro.
Ventajas de Tubos y Filtros Arquitectura de Software - Estilos de Componentes y Conectores Ventajas de Tubos y Filtros Simplicidad: forma limitada de interacción con el ambiente; la funcionalidad es sólo la composición de funcionalidades más sencillas; no existen interacciones complejas; promueve la reutilización y simplifica el mantenimiento; composición jerárquica: una combinación de tubos y filtros puede mostrarse externamente como un único filtro; por la independencia de procesamiento de los filtros, puede hacerse ejecución paralela o distribuida aumentando la disponiblidad y la performance.
Desventajas de Tubos y Filtros Arquitectura de Software - Estilos de Componentes y Conectores Desventajas de Tubos y Filtros En general se piensa en términos de procesamiento por lotes al descomponer un problema como tubos y filtros: se pierde el paralelismo potencial y la cooperación; no es apropiado para aplicaciones interactivas; La performance suele ser baja debido a que la funcionalidad está aislada; cada filtro debe transformar los datos al formato apropiado o todos usar el que más acomode al conjunto, nunca el óptimo; si un filtro necesita contar con todo el input antes de producir el output, requiere entonces un buffer potencialmente muy grande; cada filtro actúa como proceso independiente consumiendo recursos cada vez que se lo invoca.