2. Contenido
• Definición
• Cualidades de las Arquitecturas
• Arquitectura y Atributos de Calidad de los Sistemas
• Estilos Arquitectónico
• Patrones Arquitectónicos
• Framework
• Patrones de Diseño
• Vistas Arquitectónicas
3. ARQUITECTURA DEL SISTEMA DE
SOFTWARE
Se obtiene mediante un proceso de partición que relaciona los ele-
mentos de una solución de software con partes de un problema del
del mundo real definido implícitamente durante el análisis de los
requisitos. La solución aparece cuando cada parte del problema está
resuelta mediante uno o más elementos de software.
• El diseño y la especificación completa de la estructura de los
sistemas de software, según Shaw y Garlan (Shaw y Garlan, 1996),
se está transformando en un aspecto de más importancia que la
escogencia de los algoritmos y las estructuras de datos, en virtud
del tamaño y la complejidad de estos es la actualidad
• Diseñar la arquitectura del software, según estos mismos autores,
es definir los aspectos estructurales como una composición de
componentes, las estructuras globales de control, los protocolos de
comunicación, la sincronización y acceso a los datos, la asignación
de la funcionalidad a los elementos del diseño, la composición de
estos elementos, su distribución física, su escalabilidad y su
desempeño.
4. ARQUITECTURA DEL SISTEMA DE
SOFTWARE
• Define al sistema en tér minos de elementos
computacionales y de las interacciones entre ellos.
• La arquitectura muestra la correspondencia entre los
requerimientos de sistemas y los elementos del sistema
construido, proveyendo así una exposición racional para las
decisiones de diseño.
• ELEMENTOS COMPUTACIONALES. Son entidades tales
como clientes, servidores, bases de datos, filtros y capas de
un sistema jerárquico. Son además, una parte encapsulada
del sistema de software, donde cada uno tiene una interfaz.
• INTERACCIONES. Ocurren entre los elementos a nivel de
diseño, pudiendo ser tan simples como las llamadas a
procedimientos o variables de acceso, o tan complejas y
semánticamente ricas como los protocolos del modelo cliente/
servidor, los protocolos de acceso a las bases de datos, la
difusión de ls eventos asincrónicos y las ráfagas (stream) de
los pipes. (Shaw y Garlan, 1996).
5. ARQUITECTURA DEL SISTEMA DE
SOFTWARE
• Una relación, además denota una conexión entre los
componentes. Una relación puede ser estática o dinámica.
– Relaciones estáticas. Se muestran en el código fuente, ellas
reflejan la colocación de los componentes dentro de la
arquitectura.
– Relaciones dinámicas. tratan con las conexiones temporales y las
interacciones dinámicas entre los componentes. Ellas no son
fácilmente visibles a partir del código fuente.
• PROPIEDAD FUNCIONAL. Tiene que ver con un aspecto de la
funcionalidad del sistema, como su nombre lo indica. Está
usualmente relacionada con un requerimiento.
• PROPIEDAD NO FUNCIONAL. Trata de una característica del
sistema que no está cubierta en la descripción funcional del
mismo. Típicamente se refiere a aspectos tales como
confiabilidad, compatibilidad, costo, facilidad de uso , etc.
6. NIVELES DE DISEÑO DE LOS
SISTEMAS DE SOFTWARE
• ARQUITECTURA. Los aspectos de diseño involucran la
asociación de la capacidad de todo el sistema con
componentes. Los componentes son módulos y la interconexión
entre los módulos se maneja de maneras diferentes. La
composición está orienta hacia subsistemas.
• CÓDIGO. El diseño involucra algoritmos y estructuras de
datos. Los componentes son primitivas de lenguajes de
programación, tales como números, caracteres, etc. Los
mecanismos de composición son arreglos, registros,
procedimientos, etc.
• EJECUTABLE. El diseño involucra mapas de memoria,
arreglos de datos, asignaciones de registros, etc. Los
componentes son patrones de bits soportados por el hardware
y las composiciones se escriben en lenguaje de máquina.
7. CUALIDADES DE LAS ARQUITECTURAS
• CONFORMIDAD FUNCIONAL. Según Pressman (Pressman,
1998) una arquitectura de calidad debe implementar todos los
requisitos explícitos contenidos en el modelo de análisis y debe
acomodar todos los requisitos implícitos que desea el cliente.
Además, debe proporcionar una idea completa de que es el
software, enfocando los dominios de los datos, las funciones y
los comportamientos. Según Lawrence (Lawrence, 1998) la
arquitectura del software le dice a los usuarios exactamente lo
que el sistema de software hará.
• ADAPTABILIDAD. Esta característica la propone Sommerville
(Sommerville, 1998) al señalar que ella mide cuan fácil es hacer
cambios en una arquitectura; de seguro, esto implica
componentes poco acoplados. En su opinión, un sistema de
software adaptable tiene una alta trazabilidad; esto quiere
decir, que hay una relación clara entre los diferentes niveles de
abstracción.
8. CUALIDADES DE LAS ARQUITECTURAS
• MODULARIDAD. Sin considerar el enfoque de diseño utilizado
(estilo arquitectural) (Pfleeger, 1998), el proceso de
descomposición separa el diseño en partes que lo componen,
llamadas módulos o componentes. Se dice que un sistema es
modular cuando cada actividad del sistema de software es
ejecutada exactamente por un componente y cuando las
entradas y las salidas de los componentes están bien definidas.
Los módulos se organizan jerárquicamente como resultado de
la descomposición. En la opinión de Pressman (Pressman,
1998), estos módulos se integrarán para satisfacer los
requisitos del sistema. Para este autor modularidad es el
atributo del software que permite a un sistema ser manejable
intelectualmente. Pfleeger (Pfleeger, 1998) además agrega que
los módulos encapsulan información; la ventaja de esta
característica es que el diseño interno de cada componente está
oculto para el resto de los otros componentes.
9. CUALIDADES DE LAS ARQUITECTURAS
• NIVELES DE ABSTRACCIÓN. Según Pfleeger (Pfleeger, 1998),
estos módulos se estructuran según niveles de abstracción.
Estos niveles de abstracción ayudan a entender el problema a
ser resuelto por el sistema y la solución propuesta. Según
Pressman (Pressman, 1998), cuando se plantea una solución
modular se pueden presentar muchos niveles de abstracción.
Cada fase del proceso de diseño es un refinamiento en el nivel
de abstracción. Pressman (Pressman, 1998) propone tres (3)
niveles de abstracción:
– Abstracción procedimental. Es una secuencia dada de
instrucciones que tiene una función específica y limitada.
– Abstracción de datos. Es una colección determinada de datos que
describen un objeto de datos.
– Abstracción de control. Implica un mecanismo de control del
programa sin especificar detalles internos.
10. CUALIDADES DE LAS ARQUITECTURAS
• ENTENDIBLE. Sommerville (Sommerville, 1998) señala que un
sistema antes de hacerle un cambio debe ser entendido. En su
opinión este entendimiento estará afectado por: La cohesión, el
acoplamiento, la nominación, la documentación y la complejidad;
inclusive, señala que la complejidad tiene una relación directa con
su fácil entendimiento.
• COHESIÓN. Es una consecuencia del ocultamiento de la informa-
ción. Un módulo con cohesión (Pressman, 1998) realiza solamente
una tarea, requiriendo poca interacción con el resto de los
procedimientos que se realizan en el resto del sistema de software.
Según Sommerville (Sommerville, 1998) la cohesión es deseable
debido a que una unidad (componente) representa una parte
simple de solución. Si es necesario cambiar el sistema, la parte
correspondiente está en un solo lugar y lo que se desee hacer con
él estará encapsulado en él. Según Lawrence (Pfleeger, 1998) la
meta es hacer que los componentes sean lo más cohesivos posible.
11. CUALIDADES DE LAS ARQUITECTURAS
• ACOPLAMIENTO. Está relacionado con la cohesión. Es un
indicador de la fuerza de interconexión entre los componentes o
elementos de la arquitectura (Sommerville, 1998). Sistemas
altamente acoplados tienen una fuerte interconexión, lo que se
refleja en una gran dependencia entre los componentes. Los
sistemas poco acoplados, por otro lado, tienen poca relación entre
sus componentes o elementos. La meta (Lawrence, 1998) es
mantener el acoplamiento en el nivel más bajo posible; la
conectividad sencilla entre módulos da como resultado un
software que es más fácil de comprender y menos propenso al
“efecto onda” (Stevens et al., 1975) producido cuando los errores
aparecen en una posición y se propagan a lo largo del sistema.
Pressman (Pressman, 1998) agrega que el acoplamiento depende
de la complejidad de las interfaces entre los módulos, del punto en
el que se hace una entrada o referencia a un módulo y de los datos
pasan a través de esa interfaz.
12. Arquitectura y Atributos de Calidad de los
Sistemas
• Bass et al. (2000) establecen que para alcanzar un atributo
específico, es necesario tomar decisiones de diseño
arquitectónico que requieren un pequeño conocimiento de
funcionalidad
• Bass et al. (2000) afirman que cada decisión incorporada en
una arquitectura de software puede afectar potencialmente
los atributos de calidad.
• Sin embargo, esto no es evidente, porque:
– Existen atributos de calidad que, luego de ser estudiados durante
años, poseen definiciones generalmente aceptadas
– Los atributos no están aislados ni son independientes entre sí.
– El análisis de atributos no se presta a estandarizaciones.
– Las técnicas de análisis son específicas para un atributo en
particular.
• La arquitectura es un artefacto que determina atributos de
calidad del sistema.
14. Estilos y Patrones
• Bosch (2000) establece que la imposición de ciertos
estilos arquitectónicos mejora o disminuye las
posibilidades de satisfacción de ciertos atributos de
calidad del sistema
• Cada estilo propicia atributos de calidad, y la
decisión de implementar alguno de los existentes
depende de los requerimientos de calidad del
sistema.
• Buschmann et al. (1996) afirman que un criterio
importante del éxito de los patrones es la forma en
que estos alcanzan de manera satisfactoria los
objetivos de la ingeniería de software.
15. ESTILOS ARQUITECTÓNICOS
Un estilo arquitectural define una familia de sistemas de
software en términos de su organización estructural. Un
estilo arquitectural representa los componentes y las
relaciones entre ellos con las restricciones de su aplicación
y las asociaciones y reglas de diseño para su construcción.
Shaw y Garlan (Shaw y Garlan, 1996) precisan además,
que un estilo arquitectural define un vocabulario de
componentes y tipos de conectores.
16. ESTILOS ARQUITECTÓNICOS
PIPES and FILTERS (Tuberías y filtros)
Cada componente tiene un conjunto de entradas y un conjunto
de salidas. Filters
(Filtros)
Pipes
(Tuberías)
• Un componente lee la ráfaga (stream) de datos en sus entradas y
produce una ráfaga de datos en sus salidas.
• Los componentes se conocen como filtros y son independientes.
• Los conectores se comportan como conductores de las ráfagas,
transmitiendo salidas de un componente hacia entradas de otro.
• El mejor ejemplo de este estilo son los programas escritos en el Shell
de Unix (Bach, 1986). Otros ejemplos se observan en el área de
procesamiento de señales, programación paralela y sistemas
distribuidos.
17. ESTILOS ARQUITECTÓNICOS
ORGANIZACIONES POR TIPOS DE DATOS ABSTRACTOS Y O-O
La representación de los datos y sus operaciones primitivas se
encapsulan en Tipos de Datos Abstractos (TDA) u objetos.
Manejador obj op op
(TDA) op obj
op
op
obj op
obj op op
Llamada de Nota: obj es un manejador
op obj op es una invocación
un proceso op
• Los componentes son objetos (o instancias de tipos de datos abstractos).
Los objetos son ejemplos de un tipo de componente llamado manejador
porque es el responsable de preservar la integridad de un recurso
• Los objetos interactúan a través de invocaciones a funciones y
procedimientos.
• La implementación de las funciones y procedimientos está oculta para el
objeto cliente, lo cual permite hacer las modificaciones fácilmente.
• Para hacer uso de un servicio se hace necesario conocer la identidad del
objeto; al hacer un cambio en un objeto es necesario modificar todos los
objetos que lo invocan.
18. ESTILOS ARQUITECTÓNICOS
BASADOS EN EVENTOS, INVOCACIÓN IMPLÍCITA
En el estilo anterior, la interfaz de los componentes (objetos)
cuentan con una colección de procedimientos y funciones, y la
integración entre ellos se logra a través de la invocación explícita
de éstos. En este estilo, se considera una técnica de integración
conocida como invocación implícita.
• Los componentes son módulos cuyas interfaces proveen una colección
de procedimientos y un conjunto de eventos. Los procedimientos se
llaman de la manera usual pero el componente también puede activar
algunos de sus procedimientos con los eventos del sistema. Esto hará
que estos procedimientos sean invocados cuando los eventos ocurren
en tiempo de ejecución.
• Los generadores de eventos no saben cuales componentes se afectarán
por el evento. Ejemplos de este estilo son los sistemas de gestión de
bases de datos cuando aseguran la consistencia de los datos, las
aplicaciones con interfaces de usuarios al separar la representación de
los datos de las aplicaciones que las gerencian.
19. ESTILOS ARQUITECTÓNICOS
SISTEMAS EN CAPAS
Están organizados jerárquicamente; cada capa le presta servicios
a la capa superior y es cliente de la capa inferior.
Sistemas útiles Llamadas usuales
de procedimientos
Servicio base
Nivel
central
Composición de
varios elementos
Usuarios
• Los componentes implementan un máquina virtual en alguna capa de
la jerarquía.
• Los conectores están definidos en los protocolos que determinan cómo
las capas interactúan.
• Los ejemplos más conocidos de este estilo arquitectural son los
protocolos de comunicación.
20. ESTILOS ARQUITECTÓNICOS
REPOSITORIOS
Consta de dos (2) tipos de componentes: una estructura central de datos
que refleja el estado actual y una colección independiente de compo-
nentes que operan sobre el almacén central. Computación
fc1 fc2
fc8 fc3
Blackboard
Acceso (datos
directo Memoria
fc7 compartidos) fc4
Nota:
fc es una fuente de conocimiento fc6 fc5
• Las interacciones entre los componentes pueden variar significativamente. El
tipo de control seleccionado puede llevar a dos categorías:
– Si el tipo de transacción es una entrada que dispara la selección del
proceso a ejecutarse, se está hablando de las tradicionales bases de datos.
– Si el estado actual de la estructura central de datos es el principal
activador de los procesos a ejecutarse, se habla de un estilo de repositorio
tipo pizarrón (blackboard). Son muy utilizados para aplicaciones que
requieren interpretaciones complejas de procesamiento de señales, tales
como reconocimiento del habla y de patrones.
21. ESTILOS ARQUITECTÓNICOS
INTÉRPRETES
En una organización intérprete,una maquina virtual es produci-
da en software. Un intérprete incluye el pseudoprograma inter-
pretado y la máquina de interpretación misma.
Memoria
Programa a ser
Entradas Datos interpretado
(programa)
Computación
(máquina)
Motor de Estado
Salidas Instrucción seleccionada
interpretación interno del
Datos seleccionados
simulado interpretador
Acceso a datos
(búsqueda/almacenamiento)
• Los intérpretes son a menudo usados para construir maquinas
virtuales que enlazan la máquina de computación esperada por la
semántica y la máquina de computación disponible en el hardware.
22. Patrón Arquitectónico
• Buschmann et al. (1996) define patrón como una regla que
consta de tres partes, la cual expresa una relación entre un
contexto, un problema y una solución
• Estas son:
– Contexto. Es una situación de diseño en la que aparece un
problema de diseño.
– Problema. Es un conjunto de fuerzas que aparecen repetidamente
en el contexto.
– Solución. Es una configuración que equilibra estas fuerzas.
• ParaBuschmann et al son plantillas para arquitecturas de
software concretas, que especifican las propiedades
estructurales de una aplicación y tienen un impacto en la
arquitectura de subsistemas .
• La selección de un patrón arquitectónico es, por lo tanto, una
decisión fundamental de diseño en el desarrollo de un sistema
de software.
26. Framework
• Un framework es más que una jerarquía de clases. Es
una jerarquía de clases más un modelo de iteracción
entre los objetos instanciados a partir del framework.
[Levis, Rosenstein, Pree, Weinand, Gamma, Calder,
Andert, Vlissides and Schmucker, 95]
• Un framework es una técnica de reuso [Johnson, 97]
• Un framework es un diseño reusable de todo o partes
del sistema que esta representado por un conjunto de
clases abstractas y la forma como sus instancias
interactúan. Un framework es un esqueleto de una
aplicación que puede ser personalizado por un
desarrollador de aplicaciones [Johnson, 97]
27. Framework
• Los framework son componentes en el sentido que los
vendedores los venden como productos y porque una
aplicación puede usar varios framework. Pero los framework
son mas personalizables que los componentes y tiene
interfaces más complejas [Johnson, 97]
• Un componente representa reuso de código. Los framework
son una forma de reuso de diseño [Johnson, 97].
• Los framework son una clase de arquitectura de dominio
específico. La diferencia principal es que un framework es un
diseño orientado a objeto mientras que una arquitectura de
un dominio específico puede no serlo [Johnson, 97].
28. Framework
• Un framework es reusable, una aplicación semi completa
que puede ser especializada para producir aplicaciones
personalizadas [Johnson y Foote, 98] [Fayad, Schmith y
Johnson, 97]
• En contraste con las técnicas de reuso OO iniciales
basadas en librerías, los framework están orientados a
unidades del negocio particulares y a dominios de
aplicación. [Fayad y Schmith, 97]
• El desarrollo de aplicaciones estará fuertemente basado
en la integración de múltiples framework.
29. Framework
Clasificando los framework por su alcance, tenemos:
• Infraestructura de Sistemas: simplifican el desarrollo de
infraestructuras de sistemas eficientes y portables tales
como sistemas operativos, de comunicación y herramientas
de interfaces de usuarios y procesamiento de lenguajes
• Integración de midleware: Se usan comúnmente para
integrar aplicaciones distribuidas y componentes. Se usan
para mejorar la habilidad del desarrollador en modularidad,
reuso y extensiones de software trabajando en un ambiente
distribuido
• Aplicaciones de empresas: Dirigidos a dominios de
aplicación amplios, tales como comunicaciones,
manufactura, financieros, etc.
30. Design Patterns
• Un pattern describe un problema a ser resuelto, una
solución y el contexto en el cual la solución trabaja.
Nomina una técnica y describe su costo y su beneficio
• Estos pattern fueron descubiertos al examinar varios
framework y fueron seleccionados como representativos
de software reusable.
• Un simple framework puede contener muchos pattern, es
decir, estos pattern son más pequeños que los
framework. Por lo tanto, los pattern son mas abstractos
que los framework
• Los design pattern son elementos microarquitecturales
de los framewrok
31. Design Patterns
• Aunque el término design pattern no es usado
explícitamente, los novatos obtienen ganancia de sus
experiencias en el desarrollo de software OO al
extraer design pattern a partir de varios framework
específicos [Pree, 95]
• De acuerdo a Coad, los design pattern son
identificados al observar los bloques de construcción
de más bajo nivel; esto es sus clases y objetos y las
relaciones entre ellos [Pree, 95].
33. Design Patterns
Documentación:
• Nombre del Pattern y su clasificación
• Intención: ¿Qué hace? ¿Qué problema resuelve?
• Alias o conocido también como
• Motivación
• Aplicabilidad
• Estructura: representación gráfica de la jerarquía de clases y el
diagrama de iteracción
• Participantes: las clases que lo componen y sus responsabilidades
• Consecuencias: trade-off de usar el pattern
• Implementación: sugernecias y ayudas sobre la implementación,
fallas más comunes
• Usos conocidos: ejemplos donde ha sido usado
• Patrones relacionados: ¿Qué pattern se relacionan con él? ¿En qué
se diferencia de otros?
35. VISTAS ARQUITECTÓNICAS 4+1
Usuarios finales Programadores
• funcionalidad • gerencia del software
Vista Lógica Vista de Desarrollo
Escenarios
Vista de Proceso Vista Física
Integradores de sistemas Ingenieros de sistemas
• desempeño • topología del sistema
• escalabilidad • entregas
• rendimiento • instalación
• telecomunicación
El Modelo Vista 4+1 organiza la descripción de la arquitectura de
un software usando cinco (5) vistas concurrentes, cada una de
las cuales está dirigida a un conjunto específico de conceptos.
Los arquitectos exponen sus decisiones de diseño en cuatro (4)
vistas y usan la quinta vista para ilustrar y validar dichas
decisiones.
36. VISTAS ARQUITECTÓNICAS 4+1
• VISTA LÓGICA. Describe el modelo objeto del diseño cuando
un método de diseño O-O es usado;se puede usar un enfoque
alterno para desarrollar alguna otra forma de vista lógica
• VISTA DE PROCESO. Describe los aspectos de diseño
relacionados con la concurrencia y la sincronización.
• VISTA FÍSICA. Describe el mapa del SW dentro del HW refleja
los aspectos de distribución.
• VISTA DE DESARROLLO. Describe la organización estática del
software en el ambiente de desarrollo.
• ESCENARIOS. Los diseñadores de software organizan la
descripción de sus decisiones arquitecturales alrededor de
estas cuatro (4) vistas, y las ilustran con una pequeña
selección de casos de uso o escenarios, constituyendo así la
quinta vista. La arquitectura está parcialmente producida
por esos escenarios.
37. Interdependencia entre Vistas
Lógica
Procesos Se identifican características
tales como: Autonomía, quien
invoca a quien. Persitencia.
Distribución: desde donde son
accesibles las operaciones.
Lógica Desarrollo Una clase se puede
implementar en un módulo,
paquete, etc.
38. Ejercicio
• Elaborar una tabla con las siguientes
columnas: nombre del estilo/patrón
arquitectónico, cualidad que propicia