Diseño de Software: Principios y Mejores Prácticas

Diseño de Software

Objetivo Fundamental

El objetivo fundamental del diseño de software es conseguir que sea fácil de mantener y, si es posible, reutilizable. El proceso de diseño implica refinamientos sucesivos desde el SRD (Software Requirements Document) hasta las definiciones detalladas.

Actividades Habituales

  • Diseño Arquitectónico: Se aborda la estructura y organización del sistema, su posible subdivisión en subsistemas y su correlación.
  • Diseño Detallado: Se aborda la estructura de cada módulo.
  • Diseño Procedimental: Se aborda la organización de las operaciones o servicios que ofrecerá cada módulo.
  • Diseño de Datos: Se aborda la organización de la base de datos del sistema, partiendo del diccionario de datos y los diagramas E-R de la especificación.
  • Diseño de la Interfaz de Usuario: Se aborda la organización de la interfaz de usuario para un diseño más ergonómico.

Documentos de Diseño (Normas ESA)

  • ADD: Documento de Diseño Arquitectónico.
  • DDD: Documento de Diseño Detallado.

Conceptos de Base

Abstracción

Para conseguir elementos mantenibles y reutilizables, existen tres formas de abstracción:

  • Abstracciones Funcionales: Funciones o procedimientos.
  • Tipos Abstractos: Tipos de datos con sus operaciones.
  • Máquinas Abstractas: SQL para el manejo de bases de datos.

Modularidad

Ventajas: claridad, reducción de costos, reutilización.

Refinamiento

Permite pasar de la especificación del SRD al lenguaje de programación.

Estructuras de Datos

Registros, conjuntos, formaciones, listas, pilas, colas, árboles, grafos, tablas, ficheros.

Ocultación

Se oculta al usuario lo susceptible de cambio e irrelevante para el uso. Ventajas: facilidad en la depuración y el mantenimiento. Permite usar un módulo sin conocer su estructura interna.

Genericidad

Se agrupan elementos con estructura semejante y se diseña cada uno como un caso particular.

Herencia

Los elementos hijos heredan la estructura y operaciones del padre para ampliarlas, mejorarlas o adaptarlas. Ligada al diseño orientado a objetos. Puede haber herencia de varios padres.

Polimorfismo

Un mismo elemento adquiere varias formas simultáneamente. Facilita la reutilización y el mantenimiento. Ligado a metodologías orientadas a objetos. La genericidad es una forma de polimorfismo.

  • De Anulación: Las estructuras y operaciones del padre se adaptan al hijo, aunque algunas operaciones del hijo anulan las del padre.
  • Diferido: Cada hijo concreta la forma específica de la operación del padre.
  • Sobrecarga: Operadores, funciones y procedimientos toman múltiples formas.

Concurrencia

Se aprovecha la capacidad de proceso ejecutando tareas concurrentemente. Solo se usa si no existe solución secuencial y en sistemas con restricciones de tiempo.

  • Tareas Concurrentes: Determinar las tareas que se deben ejecutar en paralelo.
  • Sincronización de Tareas: Determinar los puntos de sincronización con semáforos o monitores.
  • Comunicación entre Tareas: Distinguir si la cooperación se basa en datos compartidos o paso de mensajes. Si son datos compartidos, usar semáforos, monitores y regiones críticas para garantizar la exclusión mutua.
  • Interbloqueo: Se produce cuando una o varias tareas esperan indefinidamente.

Notaciones para el Diseño

Objetivo: ser precisas, claras, sencillas y sin ambigüedades.

Notaciones Estructurales

  • Diagrama de Bloques, Cajas Adosadas, Diagramas de Estructura: No establecen secuencia, solo organización estática.
  • Diagramas HIPO: Notación de IBM.
    • De Contenidos: Jerarquía de módulos.
    • De Detalle de Módulo: Entrada (I), Proceso (P), Salida (O), datos de entrada y salida, pseudocódigo, diagramas PARA (nivel inferior) y DE (nivel superior).
  • Diagramas de Jackson: Especifican la estructura de datos y del programa. Se parte de las estructuras de entrada y salida. Metodología dirigida por los datos. Tres pasos:
    • Especificación de estructuras de datos de entrada y salida.
    • Obtención de una estructura de programa que transforme las estructuras de entrada en las de salida (equivalencias: tupla-secuencia, unión-selección, formación-iteración).
    • Expansión de la estructura del programa con pseudocódigo.

Notaciones Estáticas

Iguales a las de especificación, pero con más detalle interno: datos auxiliares, eficiencia, datos redundantes, etc.

  • Diccionario de Datos: Refinamiento del diccionario del SRD.
  • Diagramas Entidad-Relación: Se amplían los del SRD.

Notaciones Dinámicas

Describen el comportamiento del sistema.

  • Diagramas de Flujo de Datos: Más exhaustivos que los del SRD.
  • Diagramas de Transición de Estados: No modificar los del SRD.
  • Lenguaje de Descripción de Programas (PDL): Para la especificación funcional y el diseño. Se amplía con estructuras de alto nivel.

Notaciones Híbridas

Cubren aspectos estructurales, estáticos y dinámicos.

  • Metodología de Jackson.
  • Diseño orientado a los datos de Warnier.
  • Diseño basado en abstracciones.
  • Diseño orientado a objetos.
  • Diagramas de Abstracciones: Tres partes:
    • Nombre: Identificador de la abstracción.
    • Contenido: Elemento estático (en Modula: definiciones de tipos, constantes y variables).
    • Operaciones: Elemento dinámico (en Modula: definiciones de funciones y procedimientos).
    Tres tipos:
    • Funciones: Abstracción funcional, sin contenido, solo una operación.
    • Tipos abstractos de datos: Con contenido y operaciones.
    • Datos encapsulados: Con contenido y operaciones.
  • Diagramas de Objetos: Similar a los diagramas de abstracciones.
    • Tipo abstracto de datos: Clase de objeto.
    • Abstracción funcional: No tiene equivalencia.
    • Dato encapsulado: No tiene equivalencia.
    • Dato abstracto: Objeto (ejemplar de una clase).
    • Contenido: Atributos.
    • Operaciones: Métodos.
    • Llamada a una operación: Mensaje al objeto.
    Relaciones especiales entre objetos:
    • Clasificación, especialización o herencia (no válida en abstracciones): Los hijos adaptan las operaciones heredadas.
    • Composición (válida en abstracciones): Describe un objeto mediante sus elementos.

Documentos de Diseño

  • SDD: Documento de diseño de software.
  • ADD: Documento de diseño arquitectónico.
    • Introducción.
    • Panorámica del sistema.
    • Contexto del sistema.
    • Diseño del sistema.
    • Diseño de los componentes.
    • Viabilidad y recursos estimados.
    • Matriz de requisitos/componentes.
  • DDD: Documento de diseño detallado.
    • Parte 1:
      • Introducción.
      • Normas, convenios y procedimientos de trabajo.
    • Parte 2:
      • Especificaciones de diseño detallado.
      • Listados fuente.
      • Matriz de requisitos/componentes.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.