Arquitectura de Software (Estilos Arquitectónicos) Universidad de los Andes Demián Gutierrez Mayo 2011 1 Diseño Arquitectónico Arquitectura del Software Diseño Arquitectónico Estilos Arquitectónicos Frameworks (Marcos) Patrones de Diseño Bibliotecas / Componentes Clases / Funciones 2 Diseño Arquitectónico ¿Qué es un estilo? ¿Qué es un estilo arquitectónico? 3 Estilos Arquitectónicos Deconstructivismo Art Deco 4 Estilos Arquitectónicos Los ingenieros civiles, cuando tienen que construir un puente generalmente seleccionan un tipo de puente determinado que se adapte a las necesidades del contexto y del problema a resolver... 5 Estilos Arquitectónicos Un estilo arquitectónico define una familia de sistemas (cierto tipo de sistemas) en términos de patrones estructurales, de control, de comunicación, etcétera La arquitectura de un sistema de software puede basarse en uno (o en varios) modelos o estilos arquitectónicos bien conocidos Fuente: Sommerville (Cap 11) 6 Estilos Arquitectónicos Un estilo arquitectónico describe: Un conjunto de componentes (con sus responsabilidades) Un conjunto de conectores entre componentes (comunicación, coordinación, cooperación, etcétera) Restricciones que definen cómo se integran los componentes para formar el sistema Modelos que permiten comprender las propiedades de un sistema general en función de las propiedades conocidas de las partes que lo integran Fuente: Pressman (Cap 10) 7 Estilos Arquitectónicos Para todas las arquitecturas (estilos arquitectónicos) mostrados a continuación es necesario preguntarse: ¿Qué ventajas tiene el estilo? ¿Qué desventajas tiene? ¿En qué contextos aplica? 8 ¿Otros aspectos de la gestión de proyectos? Una reflexión final sobre lo profundo del abismo Seguridad Confiabilidad Mantenibilidad Portabilidad Eficiencia (memoria, ejecución) Disponibilidad Modificabilidad Rendimiento Facilidad de Prueba Reusabilidad Extensibilidad Usabilidad Escalabilidad otras... ¿De qué forma impacta el uso un estilo en las propiedades del sistema? 9 Estilos Arquitectónicos Una arquitectura monolítica describe una aplicación en la que toda la funcionalidad del sistema (ej. acceso a datos, interfaz de usuario, lógica, etcétera) está implementada y mezclada en una sola capa. Esto, en la gran mayoría de los casos, no es una buena idea... ¿Por qué? ¿Tip: Recuerdan el ejemplo del sistema de empaquetamiento de Sommerville y la discusión subsecuente? Sistema (TODO EL SISTEMA) Fuente: http://en.wikipedia.org/wiki/Monolithic_application 10 Estilos Arquitectónicos (Repositorio / Pizarrón) Aplicación / Modulo 1 Aplicación / Modulo 2 Aplicación / Modulo 3 Repositorio (Base de Datos, Sistema de Archivos, Memoria Compartida, etcétera) Aplicación / Modulo 4 ... Aplicación / Modulo N Repositorio / Pizarron 11 Estilos Arquitectónicos (Cliente / Servidor) Petición Respuesta Cliente 1 Red Cliente 2 ... Internet, LAN, WAN Servidor 1 ... Servidor N Cliente N Cliente Servidor 12 Estilos Arquitectónicos (Cliente / Servidor) Petición Respuesta Red Cliente Servidor Liviano: Lógica de la Aplicación solamente del lado del servidor Pesado: Lógica de la Aplicación parcial o totalmente del lado del cliente Cliente “Liviano” vs Cliente Pesado 13 Estilos Arquitectónicos (Cliente / Servidor - WEB) Fuente Imagen: http://www.mailxmail.com/curso-php-mysql-sql-8/arquitectura-base-datos-web 14 Estilos Arquitectónicos (Cliente / Servidor - WEB) Fuente Imagen: http://www.mailxmail.com/curso-php-mysql-sql-8/arquitectura-base-datos-web 15 Estilos Arquitectónicos (Tuberías y Filtros) Filtros (Transformación de Datos / Información) Tuberías (Flujo de Datos / Información) Filtro 3 Filtro 1 Filtro 4 Filtro 5 Filtro 2 Tuberías y Filtros 16 Estilos Arquitectónicos (Tuberías y Filtros) Tuberías y Filtros 17 Estilos Arquitectónicos (Tuberías y Filtros) Tuberías y Filtros 18 Arquitectura (Ejemplo) API Mas Seguridad / Protección Menos Abstracción Capa 1 (Application programming interface) Interfaz Capa 2 ... Capa N Arquitectura por Capas 19 Arquitectura (Ejemplo) Capa de Presentación (Interfaz Gráfica de Usuario) (HTML, Swing, Qt, GTK, etcétera) Capa de Proceso / Negocio (Lógica / Reglas de Negocio) Capa de Persistencia BD Arquitectura a tres Capas (Muy utilizado en aplicaciones empresariales) 20 Arquitectura (Ejemplo con más detalle) Servlets Aplicación Navegador WEB MVC CledaMVC (Struts1) o Echo2 CledaCore Documentos JDBC CledaTags Hibernate Modelo de Dominio BD Motor de Workflow (CledaFlow, CledaScheduler y CledaBase) Arquitectura a tres Capas (Muy utilizado en aplicaciones empresariales) 21 Estilos Arquitectónicos (Arquitectura por Capas) Arquitectura por Capas 22 Estilos Arquitectónicos (Arquitectura por Capas) Arquitectura por Capas 23 Estilos Arquitectónicos (Control Centralizado - Síncrono) Programa Principal Rutina 1 Rutina 1.1 Rutina 2 Rutina 1.2 Rutina 2.1 Rutina 2.1 Rutina 3 Rutina 3.1 Control Centralizado Rutina 3.2 24 Estilos Arquitectónicos (Control Centralizado - Asíncrono) Procesos Tipo 1 (Ej: Sensores) Procesos Tipo 4 (Ej: Actuadores) Controlador del Sistema Procesos Tipo 2 (Ej: Cálculo) Procesos Tipo 3 (Ej: Fallos) Procesos Tipo 5 (Ej: Fallos) Control Centralizado 25 Estilos Arquitectónicos (Sistemas Dirigidos por Eventos) Cada subsistema genera eventos según su condición y define que eventos de otros subsistemas desea atender Subsistema 1 Subsistema 2 ... Subsistema N Manejador de Eventos El manejador de eventos se encarga de enviar los eventos generados a aquellos sistemas interesados en recibirlos 26 Estilos Arquitectónicos (Interprete / Máquina Virtual) Datos (Estado del Programa) Programa a Interpretar Hardware Simulado (CPU, dispositivos, etc) Máquina Virtual Hardware Real (CPU, dispositivos, memoria, etc) 27 Estilos Arquitectónicos (Interprete / Máquina Virtual) “Write once, run anywhere” Sun Microsystems 28 Estilos Arquitectónicos (Interprete / Máquina Virtual) “Write once, run anywhere” Sun Microsystems 29 Estilos Arquitectónicos (Interprete / Máquina Virtual) Código Java Foo.java Código Scala Foo.scl Código Clojure Foo.clj Código JRuby Foo.ruby Código Jython Foo.phy Compilador Java (javac) Compilador Scala (...) Compilador Clojure (...) Compilador JRuby (...) Compilador Jython (...) Java Byte Code + Unix Linux Windows Mac JVM JVM JVM JVM Java Runtime La flexibilidad de la arquitectura Java 30 Estilos Arquitectónicos (RPC / RMI) RPC: Remote Procedure Call RMI: Remote Method Invocation 31 Estilos Arquitectónicos (RPC / RMI) RPC: Remote Procedure Call RMI: Remote Method Invocation 32 Estilos Arquitectónicos (Arquitecturas de Objetos Distribuidos / CORBA) Objeto1 (Instancia) Objeto2 (Instancia) Nodo 1 Objeto3 (Instancia) Objeto N (Instancia) Nodo 2 Nodo N Red (Bus software) El nodo cliente utiliza (de forma transparente) los objetos que existe y están corriendo en los demás nodos Nodo Cliente 33 Estilos Arquitectónicos (Sist. Distribuidos / Arquitecturas Peer To Peer) P2 Un par puede jugar un rol de cliente y/o de servidor, dependiendo de las necesidades del momento P6 P5 P1 P7 P4 P3 P9 P8 Cada uno de los pares descubre a sus otros pares y establecen conexiones al mismo nivel (no de forma jerárquica) cooperando para lograr un objetivo determinado 34 Estilos Arquitectónicos (Sist. Distribuidos / Arquitecturas Peer To Peer) P2 P6 P5 Un “servidor” puede servir para coordinar el descubrimiento de los pares P1 Servidor / Coordinador P3 P9 P7 P8 Cada uno de los pares descubre a sus otros pares y establecen conexiones al mismo nivel (no de forma jerárquica) cooperando para lograr un objetivo determinado 35 Estilos Arquitectónicos (Arquitectura basada en Plugins) API (Application programming interface) Interfaz bien definida Fuente: http://en.wikipedia.org/wiki/Plugin 36 Estilos Arquitectónicos (Plugins / Eclipse) Una estrategia basada en plugins hace que un sistema pueda ser fácilmente extendido y complementado por terceras partes 37 Estilos Arquitectónicos (Plugins / Eclipse) 38 Estilos Arquitectónicos (Arquitecturas de Referencia) Normalmente se obtienen por medio del estudio de una clase de aplicación (de un dominio en particular) Representan una arquitectura ideal que incluye todas las características que cierto tipo (clase) de sistema podría incorporar 39 Lecturas Recomendadas Sommerville, Ingeniería del Software, Capítulos 11, 12 y 13 (En ese orden de prioridades) Pressman, Ingeniería del Software, Capítulo 10 Mary Shaw, David Garlan, Software Architecture Perspectives on an Emerging Discipline (Está en la biblioteca) Patrones Arquitectónicos http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science) 40 Gracias ¡Gracias! 41