Abstracción: "Es una vista de un objeto que se enfoca en la información relevante para un propósito particular e ignora la demás información"
Mecanismos de abstracción
Por parametrización (Centrado en los datos)
Por especificación (Procedimientos, datos, control - Iteraciones, comportamientos dinámicos)
Diseño de software
Fundamentos
Conceptos
Cohesión y acoplamiento:
Cohesión: "El nivel de especialización que tiene un componente de software"
Acoplamiento: "Es que tanto depende un componente de software de otros componentes"
Diseño de software
Bajo acoplamiento + Alta cohesión
Fundamentos
Conceptos
Descomposición y modularización: "Un software es dividido en un número de partes más pequeñas (Divide y vencerás), a estas partes les llamamos componentes y esos componentes tienen interfaces que definen la interacción con otros componentes"
Usualmente la meta es poner diferentes funcionalidades y responsabilidades en diferentes componentes.
Diseño de software
Fundamentos
Conceptos
Separación de interfaces e implementaciones: "Definir una interfaz pública (Contrato) conocida por el cliente que está separada de los detalles de como el componente funciona (Encapsulación y ocultamiento de información)"
Diseño de software
Fundamentos
Conceptos
Suficiencia, completitud: Significa asegurar que un componente de software capture todas las características importantes de la abstracción realizada en el diseño y nada más.
Carácter primitivo: El diseño debe ser basado en patrones que sean fáciles de implementar.
Diseño de software
Fundamentos
Conceptos
Separación de intereses: Un interés es un área importante en lo que respecta al diseño de software.
Vistas (Abstracciones para diferente tipo de público), ayuda a que cada interesado en el proyecto se enfoque en lo que lo importa y disminuye la complejidad de análisis.
Diseño de software
Fundamentos
Asuntos clave a tener en cuenta en el diseño de Software
Concurrencia (Descomponer el software en procesos, tareas, hilos), se usa para tratar temas de rendimiento, atomicidad, sincronización y programación de tareas.
Control y administración de eventos, la organización de los datos y el flujo de los mecanismos del sistema, (Cómo se hacen los llamados entre componentes) (Call-backs)
Diseño de software
Fundamentos
Asuntos clave a tener en cuenta en el diseño de Software
Persistencia de datos: Cómo voy a controlar los datos longevos (Tienen una vida larga) - Memoria secundaria
Distribución de componentes: Cómo voy a distribuir los elementos de software a través de los componentes de hardware (Computadores, redes, Maquinas virtuales), además como se comunican esos elementos (Middleware)
Diseño de software
Fundamentos
Asuntos clave a tener en cuenta en el diseño de Software
Gestión de excepciones y tolerancia a fallos: Cómo prevenir, tolerar y procesar errores y además como gestionar condiciones excepcionales
Interacción y presentación: Cómo estructurar y organizar las interacciones con los usuarios y como presentar la información y la lógica de negocio (Modelo - Vista - Controlador (Servicios))
Seguridad: Cómo prevenir accesos no autorizados, creación, cambio o borrado de datos, o negar acceso a información u otros recursos dependiendo de privilegios.