Diseño de Componentes 1
Objetivos Estudiar los principales patrones para diseño de interfaces Estudiar los principales patrones para diseño de componentes Estudiar los principales estilos arquitectónicos utilizados en arquitecturas de componentes Estudiar los principales tipos de conectores 2
Diseño de Interfaces 3
Interfaces Componentes - Interfaces Responsabilidades del componente Servicios ofrecidos Protocolos utilizados / requeridos 4
Interfaces Retos Responsabilidades del componente Especificación de contratos Bajo acoplamiento y estabilidad Distribución de componentes Heterogeneidad Atributos de calidad Expresividad y simplicidad 5
Interfaces Patrones Explicit Interfase Extension Interfase Introspective Interface Dynamic Invocation Business Delegate Proxy Facade Combined Method Iterator Enumeration Method Batch Method 6
Interfaces Explicit Interface Pattern Separa el uso del componente de los detalles de implementación Los clientes depende solo del contrato Los clientes no deben conocer Diseño interno Detalles de implementación Sincronización 7
Interfaces Extension Interface Pattern Permite exponer varias interfaces por parte de un componente De forma estable para los clientes ante cambios y evolución en el componente Interfaces con roles en el componente 8
Interfaces Instrospective Interface Pattern Ofrece una interfaz suplementaria Permite al cliente conocer el interior del componente Facilita el monitoreo y control del componente 9
Interfases Dynamic Invocation Pattern Ofrece una interfaz sumplementaria Permite a los clientes invocar métodos del componentes de forma dinámica En tiempo de ejecución 10
Interfaces Business Delegate Pattern Hace transparente a los clientes de un componente Localización del componente Lookup Balanceo de carga Manejo de error 11
Interfaces Proxy Los clientes de un componente se comunican con un emisario en lugar del componente mismo Seguridad Localización Remota 12
Interfaces Facade Un punto único de acceso para el cliente Varios componentes involucrados 13
Interfaces Combined Method El cliente debe realizar la invocación de métodos en un orden particular muchas veces No facilita su utilización Promueve la inyección de defectos 14
Interfaces Iterator Se requiere visitar elementos en un componente agregado El cliente no quiere depender de la estructura interna El componente no quiere revelar su estructura 15
Interfaces Enumeration Method Se requiere iterar sobre elementos de un componente agregado Se quiere invocar una acción en cada elemento No siempre Iterator funciona (Grafos, Arboles) 16
Interfaces Batch Method Se requiere visitar un subconjunto de componentes Acceder a la colección es costoso Remoto / Concurrente Se define un único método en batch Retornar un arreglo con los resultados 17
Componentes Niveles de granularidad y composición Alta Dificulta entendimiento, evolución y mantenimiento Baja Se requiere mayor integración y pegante entre los componentes 18
Componentes Patrones Encapsulated Implementation Replicated Component Whole-part Composite Master-Slave Half Object 19
Componentes Encapsulated Implementation Esconde completamente los detalles de implementación La implementación encapsulada puede evolucionar 20
Components Whole-Part Un componente agrupa mucha funcionalidad No es práctico / apropiado construir un solo componente Se particiona el componente en un elemento único que encapsula y orquesta partes independientes Este único elemento define las interfaces de acceso al componente 21
Componentes Composite Composición de partes recursiva Objetos que soportan la misma interfaz Se desea utilizar toda la jerarquía como si fuera una sola entidad Se utiliza un componente interfaz con la funcionalidad común a todas las partes 22
Componentes Master-Slave Requerimientos de calidad altos Imposibles de cumplir en un solo hilo de ejecución Se subdivide el componente en tareas internas, ejecutadas en paralelo 23
Componentes Half-Object plus Protocol Se requiere utilizar componentes que residen en espacios de direcciones diferentes Alto costo en transporte y latencia Se divide el componente en varios half object en cada sitio local, solo con la lógica y datos requeridos 24
Componentes Replicated Component Group Se requiere garantiza alta disponibilidad de un componente Se provee un grupo de componentes Se instancian en diferentes nodos de ejecución Un requerimiento es enviado a todo el grupo Se utiliza la primer respuesta obtenida 25
Estilos Arquitectónicos 26
Estilos Layered (Virtual Machine) 27
Estilos Layered (Virtual Machine) 28
Estilos Layered (Virtual Machine) 29
Estilos Layered (Client-Server) 30
Estilos Layered (Client-Server) 31
Estilos Dataflow (Batch-Sequential) 32
Estilos Dataflow (Batch-Sequential) 33
Estilos Dataflow (Pipe-and-Filter) 34
Estilos Dataflow (Pipe-and-Filter) 35
Estilos Shared Memory (BlackBoard) 36
Estilos Shared Memory (BlackBoard) 37
Estilos Shared Memory (Rule-Based) 38
Estilos Shared Memory (Rule-Based) 39
Estilos Interpreter (Interpreter) 40
Estilos Interpreter (Interpreter) 41
Estilos Interpreter (Mobile code) 42
Estilos Interpreter (Mobile code) 43
Estilos Implicit Invocation (Publish-subscribe) 44
Estilos Implicit Invocation (Publish-subscribe) 45
Estilos Implicit Invocation (Event-based) 46
Estilos Implicit Invocation (Event-based) 47
Estilos Peer-to-Peer 48
Estilos Peer-to-Peer 49
Estilos C2 50
Estilos C2 51
Estilos C2 52
Conectores 53
Conectores Realizan transferencia de control y datos entre componentes Proveen servicios Persistencia Invocación Mensajería Transaccionalidad Normalmente considerados Componentes 54
Conectores Roles Principales Comunicación Coordinación Conversión Facilitadores 55
Conectores Tipos de Conectores Procedure Call Event Data access Linkage Stream Arbitrator Adaptor Distributor 56
Conectores Procedure Call Connectors Modela el flujo de control entre componentes (Coordinador) Flujo de datos - Parámetros (Comunicación) 57
Conectores 58
Conectores Event Connectors Coordinan el flujo de control Basado en la ocurrencia de un evento y la generación de mensajes Usados en aplicaciones distribuidas 59
Conectores 60
Conectores Data Access Connectors Permite a los componentes acceder información que reside en un componente de almacenamiento Puede almacenar datos de manera persistente o temporal 61
Conectores 62
Conectores Linkage Connectors Facilitan la creación de canales de comunicación y coordinación Utilizados por conectores de mas alto nivel 63
Conectores 64
Conectores Stream Connectors Utilizados para transmitir grandes cantidades de datos entre procesos autónomos Utilizados con otros conectores para acceso a BD y archivos 65
Conectores 66
Conectores Arbitrator Connectors Ayudan en situaciones donde no se sabe el estado de los componentes Ejemplo:Sincronización y concurrencia Ayudan en la negociación de niveles de servicio Ejemplo: Scheduling, Load Balancing 67
Conectores 68
Conectores Adaptor Connectors Proveen facilidades para soportar interacción entre componentes No diseñados para interoperar Proveen servicios de conversión 69
Conectores 70
Conectores Distributor Connectors Realizan la identificación e interacción de caminos y rutas de comunicación y coordinación entre componentes Ejemplo: DNS, Routing, Switching 71
Plan de Trabajo Lo que sigue Documento Arquitectura Escenarios Operacionales - Casos Uso Punto de Vista Funcional Diagrama de Componentes Identificación / Documentación Servicios Preparación para el desarrollo Tutoriales Spring/OSGI Ambiente de desarrollo y producción 72
Referencias Software Architecture: Foundations, Theory and Practice. Richard Taylor, Nenad Medvidovic, and Eric Dashofy Patter-Oriented Software Architecture, Volume 4. Frank Buschman 73