Arquitectura de Software

Anuncio
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
Descargar