En su sentido ms estricto, una arquitectura de software es "el conjunto de las estructuras necesarias para razonar sobre el sistema, que comprenden elementos de software, las relaciones entre ellos, y las propiedades de ambos" [14 *]. A mediados de la dcada de 1990, sin embargo, la arquitectura de software comenz a emerger como una disciplina ms amplia que involucr el estudio de las estructuras y arquitecturas de software de una manera ms genrica. Esto dio lugar a una serie de conceptos interesantes sobre diseo de software en diferentes niveles de abstraccin. Algunos de estos conceptos pueden ser tiles durante el diseo de la arquitectura (por ejemplo, los estilos arquitectnicos), as como durante el diseo de detalle (por ejemplo, patrones de diseo). Estos conceptos de diseo tambin se pueden utilizar para disear las familias de programas (tambin conocido como lneas de producto). Curiosamente, la mayora de estos conceptos pueden ser vistos como intentos de describir, y por lo tanto la reutilizacin, el conocimiento de diseo. 3.1 Estructuras Arquitectnicas y Puntos de Vista Diferentes facetas de alto nivel de un diseo de software pueden ser descritos y documentados. Estas facetas son a menudo llamados puntos de vista: " Una vista representa un aspecto parcial de una arquitectura de software que muestra las propiedades especficas de un sistema de software " [14 *]. Vistas refieren a cuestiones distintas relacionadas con el ejemplo de diseo de software, la vista lgica (que cumpla los requisitos funcionales) vs la vista de procesos (problemas de concurrencia) vs el punto de vista fsico (problemas de distribucin) vs el punto de vista de desarrollo (como el diseo es desglosado en unidades de ejecucin con representacin explcita de las dependencias entre las unidades). Varios autores utilizan diferentes terminologas similar vs conducta funcional vs vistas de modelado de datos vs estructurales. En resumen, un diseo de software es un artefacto multifactico producido por el proceso de diseo y, en general compuesta de puntos de vista relativamente independientes y ortogonales . 3.2 Estilos de arquitecturas Un estilo arquitectnico es "una especializacin de los tipos de elementos y relaciones, junto con un conjunto de restricciones sobre la forma en que se pueden utilizar" [14 *]. Un estilo arquitectnico de este modo puede ser vista como proveedora de organizacin de alto nivel del software. Varios autores han identificado una serie de grandes estilos arquitectnicos: Las estructuras generales (por ejemplo, las capas, los tubos y filtros, pizarra) Los sistemas distribuidos (por ejemplo, ClientServer, tres niveles, agente) Los sistemas interactivos (por ejemplo, Modelo - Vista - Controlador, Presentacin - Abstraccin - Control) Sistemas Adaptables (por ejemplo, microkernel, reflexin) Otros (por ejemplo, lotes, intrpretes, control de procesos, basado en normas).