Diseño de software

Fundamentos

  • Conceptos
  • Contexto
  • Proceso
  • Principios

Diseño de software

Fundamentos

  • Conceptos
    • 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.

Diseño de software

Fundamentos

Diseño de software

Conceptos clave

  • Concurrencia

Diseño de software

Diseño de software

By Ricardo Bermudez Osorio

Diseño de software

  • 180