diseño arquitectónico.
Es la fase en donde debemos modelar el funcionamiento interno del sistema, describiendo:
- Estructuras de datos
- La estructura del programa
- Los detalles procedimentales
Diseño de datos:
El diseño de datos trata de la construcción de la base de datos en sí, la importancia de crear un buen diseño de base de datos se debe a que si los datos no son almacenados correctamente el sistema pierde coherencia y confiabilidad.
Diseño y estilo arquitectónico
Una vez que tenemos la base de datos, nuestro siguiente paso es la definición de la arquitectura, dentro de la cual debemos, en primera instancia crear la estructura jerárquica o lineal de módulos que contendrá el sistema.
Existen diferentes estilos de arquitecturas, pero entre las mas comunes tenemos:
Arquitectura clásica: También llamada arquitectura de programa/subprograma, describe una estructura jerárquica de los módulos, siendo que el menú principal llama a los módulos de primer nivel y estos pueden llamar a los módulos de segundo nivel.

Arquitectura de llamada de procedimiento remoto: Al igual que la anterior usa una estructura de árbol, pero los módulos están distribuidos entre varias computadoras.
Arquitectura estratificada: En esta el programa se desarrolla construyendo capas de módulos, donde cada capa corresponde a actividades que son comunes a los módulos que componen dicha capa. Esta es la arquitectura de muchos sistemas operativos.

Arquitectura flujo de datos(filtros y tuberías)
-Se basa en un patrón tuberías y filtros. Este consta de un conjunto de componentes denominados «filtros», conectados entre sí por «tuberías», que transmiten los datos desde un componente al siguiente. Cada filtro trabaja de manera independiente de los componentes que se encuentren situados antes o después de el.
-Cada paso del proceso se encapsula en un filtro. Los datos se pasan a través de tubos entre filtros adyacentes. Los filtros se pueden usar en varios sistemas.
-Una tubería, es una arquitectura que conecta componentes (filtros), a través de los conectores y las comunicaciones se ejecutan como un flujo.
-Los filtros, no necesariamente realizan únicamente tareas de filtrado, sino que ejecutan formas variables de transformación.
- Permite entender el sistema global en términos de la combinación de componentes
.
- Es un mecanismo de acceso a una base de datos, de una forma abstracta. Su objetivo, es acceder a cualquier dato desde cualquier aplicación, sin importar que sistema de gestión de base de datos almacenen los datos.
Características:
•Por los tubos fluyen datos, transmisión de salidas de un filtro a la entrada de otro
•Cada filtro admite una o varias entradas (tubos) y una o varias salidas (tubos)
•Cada filtro es independiente del resto y no conocen la identidad de los filtros antes y después de él
•La transformación del filtro puede comenzar antes de terminar de leer la entrada (distinto al proceso por lotes)
•Respetando el grafo, no importa la secuencia (paralelismo).
Bondades:
•Fácil comprender el comportamiento total de entrada/salida del sistema a partir de los efectos de cada filtro
(entrada->transformación->salida).
•Permite reutilización (simplicidad de interfaces, filtros reutilizables).
•Fácil evolución y mantenimiento (agregar, sustituir, eliminar filtros).
•Permite evaluar desempeño (independencia de filtros).
•Permite ejecución en paralelo.
Limitaciones:
•Orientado a procesamiento por lotes (no interactivo).
•Necesidad de consistencia entre flujos de datos.
•La independencia entre filtros puede acarrear la repetición de procesos de
preparación.
La programación por capas es una arquitectura cliente-servidor
en el que el objetivo primordial es la separación de la lógica de
negocios de la lógica de diseño; un ejemplo básico de esto consiste en
separar la capa de datos de la capa de presentación al usuario.
permite distribuir el trabajo de creación de una aplicación por
niveles; de este modo, cada grupo de trabajo está totalmente
abstraído del resto de niveles, de forma que basta con conocer la API
que existe entre niveles.

Sistemas de Componentes Independientes
Un componente de software individual es un paquete de
software, un servicio web, o un módulo que encapsula un
conjunto de funciones relacionadas (o de datos).
Todos los procesos del sistema son colocados en componentes
separados de tal manera que todos los datos y funciones dentro
de cada componente están semánticamente relacionados. Debido
a este principio, con frecuencia se dice que los componentes son
modulares y cohesivos.
SISTEMAS BASADOS EN TRANSACCIONES
Este estilo permite compartir los detalles entre cliente servidor, este estilo
se prefiere cuando se conoce de antemano la transacción y no cambian con
frecuencia

Sistemas Basados en eventos
Una arquitectura basada en eventos responde a las acciones o
acontecimientos generados por un directorio y sus usuarios.
Los eventos del directorio conectado actúan como un
disparador para iniciar la replicación o sincronización de los
datos de ese directorio. El cambio del repositorio genera un
evento resultante, y dicho evento acciona los cambios en los
demás directorios conectados. Como consecuencia de los
eventos y de los cambios correspondientes, se sincronizan los
datos de identidad de todos los directorios conectados

SISTEMAS CLIENTE SERVIDOR.
La arquitectura cliente-servidor es un modelo de aplicación distribuida en el
que las tareas se reparten entre los proveedores de recursos o servicios,
llamados servidores, y los demandantes, llamados clientes. Un cliente realiza
peticiones a otro programa, el servidor, que le da respuesta. Esta idea también
se puede aplicar a programas que se ejecutan sobre una sola computadora,
aunque es más ventajosa en un sistema operativo multiusuario distribuido a
través de una red de computadoras.

NOTACIÓN PARA REPRESENTAR LAS
ARQUITECTURAS DEL SOFTWARE.
Existen muchas notaciones y lenguajes para representar los artefactos del
diseño
software. Unas son para representar la estructura y otras el comportamiento, unas
sirven principalmente durante el diseño arquitectural, otras durante el diseño
detallado, y algunas durante ambos, algunas se emplean principalmente en el
contexto de métodos específicos.
Notaciones de aspectos estructurales (estática), es decir, los componentes y sus interconexiones.
Lenguajes de Descripción de Arquitecturas (ADLs):
Lenguajes textuales formales ideados para describir una
arquitectura software en términos de componentes y
conectores.
Diagramas de Clases y Objetos: Para representar un conjunto
de clases (y objetos) y sus interrelaciones
.
Diagramas de Componentes: Para representar un conjunto
de componentes (partes físicas y reemplazables de un
sistema que son conformes a y proveen un conjunto de
interfaces) y sus interrelaciones.
Tarjetas CRC (Clase Responsabilidad Colaborador):Para
denotar los nombres de los componentes (clases), sus
responsabilidades, y los nombres de los componentes con los
que colaboran.
Diagramas de Despliegue: Para representar un conjunto de
nodos físicos y sus interrelaciones, modelando los aspectos
físicos de un sistema.
Diagramas Entidad-Interrelación: Para representar modelos
conceptuales de los datos almacenados en sistemas de
información.
Lenguajes de Descripción de Interfaces (IDLs):
Similares a los lenguajes de programación normales,
sirven para definir las interfaces (nombres y tipos de
las operaciones exportadas) de los componentes
software.
Diagramas de Estructura de Jackson: Para describir
las estructuras de datos en términos de secuencia
selección e interacción.
Comentarios