Diseño y Arquitectura de Productos de Software
Un producto de software es un conjunto de sistemas que comparten aspectos comunes y gestionados para satisfacer las necesidades específicas de un segmento de mercado o misión.
Beneficios
- Entrega más rápida
- Desarrollo más económico
- Mayor calidad del producto
Descomposición Modular
El diseño modular consiste en dividir el sistema en partes diferenciadas (módulos) y definir sus interfaces. Este enfoque ofrece ventajas como:
- Claridad
- Reducción de costos
- Reutilización de código
Pasos para la descomposición modular:
- Identificar los módulos.
- Describir cada módulo.
- Describir las relaciones entre módulos.
Cualidades de una Descomposición Modular Válida
Una descomposición modular efectiva debe cumplir con las siguientes cualidades:
- Independencia funcional
- Acoplamiento (fuerte, moderado, débil)
- Cohesión
- Comprensibilidad
- Adaptabilidad
Definición de Arquitectura de Software
Una arquitectura de software es un conjunto de elementos arquitectónicos con una forma determinada. Las propiedades de la arquitectura restringen la elección de los elementos, mientras que la lógica subyacente justifica la selección y la forma de estos elementos.
Cohesión
Un módulo cohesivo realiza una tarea específica y requiere poca interacción con otros procedimientos del programa. En esencia, un módulo cohesivo se centra en una sola función.
Comprensibilidad
Para facilitar los cambios, el mantenimiento y la reutilización, cada módulo debe ser comprensible de forma aislada.
Arquitecturas de Software
Arquitectura Cliente-Servidor
En esta arquitectura, el sistema se compone de servicios que se proporcionan a los clientes. Los servidores y los clientes tienen roles distintos.
Arquitecturas de Objetos Distribuidos
En este modelo, no hay distinción entre servidores y clientes. El sistema se visualiza como un conjunto de objetos interactuando, sin importar su ubicación. No existe una diferencia entre el proveedor y el usuario de los servicios.
Ambas arquitecturas son ampliamente utilizadas. La distribución que soportan es intraorganizacional. Existen otras dos arquitecturas distribuidas más adecuadas para la distribución interorganizacional: peer-to-peer (p2p) y orientadas a servicios. Los sistemas p2p, inicialmente usados para sistemas personales, están comenzando a utilizarse en aplicaciones empresariales.
Arquitectura Multiprocesador
Un sistema multiprocesador o multitarea ejecuta varios procesos concurrentemente. La ventaja reside en el cambio de contexto: la CPU puede cambiar entre procesos sin que estos lo perciban. Esto permite completar tareas más rápidamente al ejecutarlas en paralelo.
En una configuración multiprocesador, dos computadoras de alta capacidad se interconectan electrónicamente, permitiendo el procesamiento continuo de datos incluso si una de ellas falla.
Ejemplo: Sistema de control de tráfico aéreo. Sensores distribuidos recopilan información del tráfico, la procesan localmente y la envían al centro de control.
Ventajas
- Económica.
- Mayor rendimiento a menor costo gracias al uso de componentes comunes.
- Escalabilidad inherente.
Desventajas
- Limitaciones físicas en la velocidad del procesador.
- Barreras físicas como la velocidad de la luz y efectos cuánticos.
Arquitectura Cliente-Servidor
Un cliente realiza peticiones a un servidor, que le da respuesta. Esta arquitectura es ventajosa en sistemas operativos multiusuario distribuidos en red. La capacidad de proceso se reparte entre clientes y servidores.
Características
Cliente:
- Inicia las peticiones (dispositivo maestro).
- Espera y recibe respuestas del servidor.
- Puede conectarse a varios servidores.
- Interactúa con el usuario final mediante una interfaz gráfica.
Servidor:
- Espera peticiones de los clientes (dispositivo esclavo).
- Procesa las peticiones y envía respuestas.
- Acepta conexiones de múltiples clientes.
- Generalmente no interactúa directamente con los usuarios finales.
Sistemas cuyos componentes hardware y software, en computadoras conectadas en red, se comunican y coordinan sus acciones mediante mensajes, siguiendo un protocolo cliente-servidor para lograr un objetivo.
Características de los Sistemas Distribuidos
- Concurrencia: Recursos disponibles en la red utilizados simultáneamente.
- Carencia de reloj global: La temporización de la transferencia de mensajes está distribuida.
- Fallos independientes: Un fallo en un componente no afecta a los demás.
Ventajas de los Sistemas Distribuidos
- Economía
- Mayor confiabilidad
- Flexibilidad
- Recursos compartidos
Diseño de Software en Tiempo Real
El software en tiempo real está acoplado al mundo externo y debe responder a eventos en un tiempo determinado por el entorno. Su diseño está influenciado por la arquitectura del hardware y del software, el sistema operativo, los requisitos de la aplicación y el lenguaje de programación.