Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Arquitecturas de Software
Introducción Arquitectura de
Software
César Julio Bustacara Medina
Facultad de Ingeniería
Pontificia Universidad Javeriana
14/08/2015 1
Arquitectura de Software
Antecedentes historicos
• 1968, “Edsger Dijkstra, propuso que
se establezca una estructuración
correcta de los sistemas de
software antes de lanzarse a
programar, escribiendo código de
cualquier manera”.
Antecedentes historicos
• En la conferencia de la NATO de 1969, P. I. Sharp
formuló :
“... La arquitectura es diferente de la ingeniería.
... La razón de que OS sea un amontonamiento
amorfo de programas es que no tuvo arquitecto.
Su diseño fue delegado a series de grupos de
ingenieros, cada uno de los cuales inventó su
propia arquitectura. Y cuando esos pedazos se
clavaron todos juntos no produjeron una tersa
y bella pieza de software “.
Antecedentes historicos
• P. I. Sharp...
Diseño detallado
Implementación
Pruebas
Mantenimiento
Reducir los costos de mantenimiento
directa e indirectamente
Representación de AS - Garlan
Requerimientos
???
Arquitectura de Software
Código
Arquitecturas de Software
• Atacan:
– Complejidad creciente de aplicaciones.
– Sistemas distribuidos (segunda coordenada
de complejidad).
– Sistemas abiertos y basados en componentes
(tercera coordenada de complejidad).
• Idea principal:
Estructura de alto nivel de un sistema de
software y sus propiedades globales.
Arquitecturas de Software
• Características:
– Parte del diseño de software.
– Nivel del diseño de software donde se
definen la estructura y propiedades globales
del sistema.
– Incluye sus componentes, las propiedades
observables de dichos componentes y las
relaciones que se establecen entre ellos.
Arquitecturas de Software
• Características:
– Representación de alto nivel de la estructura
del sistema describiendo las partes que lo
integran.
– Puede incluir los patrones que supervisan la
composición de sus componentes y las
restricciones al aplicar los patrones.
– Trata aspectos del diseño y desarrollo que no
pueden tratarse adecuadamente dentro de los
módulos que forman el sistema.
Arquitecturas de Software
• Nueva disciplina:
– Toda aplicación tiene una arquitectura, aunque no sea
explícita.
– Tradicionalmente ha habido un repertorio de técnicas,
patrones y expresiones para estructurar sistemas de
software complejos.
• Arquitectura de Software:
– Hace explícito con rigor lo anterior.
– Incluye modelos, lenguajes y herramientas para la
descripción y desarrollo práctico de arquitecturas de
software.
Arquitecturas de Software
• Objetivos:
– Comprender (abstracción) y mejorar la
estructura de las aplicaciones complejas.
– Reutilizar dicha estructura (o partes de ella)
para resolver problemas similares.
– Analizar la corrección de la aplicación y su grado
de cumplimiento respecto a los requisitos
iniciales.
– Permitir el estudio de algunas propiedades
específicas del dominio.
Arquitecturas de Software
• Objetivos:
– Planificar la evolución de la aplicación, identificando
las partes mutables e inmutables de la misma, así
como los costos de los posibles cambios.
– adaptación al cambio:
• composición,
• reconfiguración,
• reutilización,
• escalabilidad,
• mantenibilidad, etc.
Arquitecturas de Software
• Objetivos
– Organización a alto nivel del sistema, incluyendo
aspectos como:
• la descripción
• análisis de propiedades relativas a su estructura y
control global
• los protocolos de comunicación
• Protocolos de sincronización utilizados
• la distribución física del sistema y sus componentes,
etc.
Arquitecturas de Software
• ¿De qué no se ocupa?
–Diseño detallado.
–Diseño de algoritmos.
–Diseño de estructuras de datos.
Arquitecturas de Software
• Definiciones
–La arquitectura de un programa o
sistema computacional es la estructura
o estructuras de ese sistema, y
comprende los componentes del
software, sus propiedades
externamente visibles, y las relaciones
entre las mismas.
Arquitecturas de Software
• Definiciones
– Una estructura compuesta por componentes de
software y reglas que caracterizan la interacción
entre estos componentes (Jones, 1993).
– Un conjunto de elementos arquitecturales que
tienen una forma particular. Estos elementos se
dividen en tres clases: elementos de
procesamiento, elementos de datos y elemento
de conexión. (Perry y Wolf, 1992).
Arquitecturas de Software
Definiciones
Una colección de componentes computacionales - o,
simplemente, componentes - en conjunto con una
descripción de las interacciones entre estos
componentes, es decir, de los conectores.(Garlan y
Shaw, 1993).
Una estructura organizacional de un sistema de
software que incluye componentes, conexiones,
restricciones y una exposición razonada (rationale)
de los requerimientos que ella satisface o de algunos
otros aspectos de la arquitectura (Kogut y Clement,
1994).
Elementos de las Arquitecturas SW
• La arquitectura de software define:
– Componentes: lugar de almacenamiento o computo:
– Filtros, bases de datos, objetos, TADs
– Conectores: Mediadores entre componentes
– Llamadas a procedimientos
– Pipes
– Broadcast
– Propiedades: Información para construcción y análisis
– Pre/Post condiciones, invariantes
• Un estilo o patrón de arquitecturas define una familia:
– Componentes y conectores
– Configuraciones
– Semántica de las restricciones
Arquitecturas Software
• ¿Cómo interviene en la consecución de una solución?
– Métodos arquitectónicos.
– Espacio de los diseños arquitectónicos:
propiedades de los diferentes diseños
arquitectónicos y su capacidad para resolver
diferentes problemas.
• ¿Cómo no interviene?
– Métodos de desarrollo de software: Proporcionan
un camino entre el espacio del problema y la
solución.
Arquitecturas Software
• Puntos en común:
– Los métodos de desarrollo suelen basarse en
un estilo arquitectónico preferido.
– Nuevos estilos arquitectónicos proponen
nuevos métodos de desarrollo.
32