Descomposición Modular o Modularización es el proceso de descomposición de un sistema en un conjunto de elementos con un índice bajo acoplamiento (independientes) y alto índice de cohesión (con significado propio).

Consiste en descomponer el problema a resolver en módulos o tareas más simples. Cada tarea representa una actividad completa y se codifica de manera independiente. Facilita el diseño descendente del problema, centrándonos cada vez en la resolución de subproblemas de magnitud inferior.

A la resolución de cada uno de estos subproblemas de complejidad inferior se denomina refinamiento por pasos. Los módulos pueden ser planificados, codificados, comprobados y depurados independientemente, y a continuación se combinan uno a uno con otros módulos.

El diseño modular propone dividir el sistema en partes diferenciadas y definir sus interfaces.

Ventajas

  • Claridad
  • Reducción de costos
  • Reutilización

Se siguen los siguientes pasos para poder realizar la descomposición modular:

  • Identificar los módulos
  • Describir cada módulo
  • Describir las relaciones entre módulos

Una descomposición modular debe poseer ciertas cualidades mínimas para que se pueda considerar suficiente validad.

  1. Independencia funcional
  1. Acoplamiento
  1. Cohesión
  1. Comprensibilidad
  1. Adaptabilidad

Independiente Funcional

  • Al final de los documentos ADD y DDD debe haber una matriz REQUISITOS/COMPONNETES. En principio, cada función será realizada en un módulo distinto. Si las funciones son independientes los módulos tendrán independencia funcional.
  • Cada módulo debe realizar una función concreta o un conjunto de funciones afines. Es recomendable reducir las relaciones entre módulos al mínimo.
  • Para medir la independencia funcional hay dos criterios: acoplamiento y cohesión.

Acoplamiento

El grado de acoplamiento mide la interrelación entre dos módulos, según el tipo de conexión y la complejidad de la interface:

  • FUERTE
  • POR CONTENIDO, cuando desde un módulo se pueden cambiar datos locales de otro
  • COMÚN, se emplea una zona común de datos a la que tienen acceso varios módulos
  • MODERADO
  • DE CONTROL, la zona común es un dispositivo externo al que están ligados los módulos, esto implica que un cambio en el formato de datos afecta a todos estos módulos
  • POR ETIQUETA, en intercambio de datos se realiza mediante una referencia a la estructura completa de datos (vector, pila, árbol, grafo, …)
  • DÉBIL
  • DE DATOS, viene dado por los datos que intercambian los módulos. Es el mejor posible
  • SIN ACOPLAMIENTO DIRECTO, es el acoplamiento que no existe

 

Cohesión

Es necesario lograr que el contenido de cada módulo tenga la máxima coherencia. Para que el nº de módulos no sea demasiado elevado y complique el diseño se tratan de agrupar elementos afines y relacionados en un mismo módulo.

  • ALTA
  • COHESIÓN ABSTRACCIONAL, se logra cuando se diseña el módulo como tipo abstracto de datos o como una clase de objetos
  • COHESIÓN FUNCIONAL, el módulo realiza una función concreta y específica
  • MEDIA
  • COHESIÓN SECUENCIAL, los elementos del módulo trabajan de forma secuencial
  • COHESIÓN DE COMUNICACIÓN, elementos que operan con le mismo conjunto de datos de entrada o de salida
  • COHESIÓN TEMPORAL, se agrupan elementos que se ejecutan en el mismo momento. Ej. Arrancar o parar dispositivos
  • BAJA
  • COHESIÓN LÓGICA, se agrupan elementos que realizan funciones similares. Ejs.: módulos de E/S o de tratamiento de errores
  • COHESIÓN COINCIDENTAL, es la peor y se produce cuando los elementos de un módulo no guardan relación alguna

La descripción del comportamiento de un módulo permite establecer el grado de cohesión:

  • Si es una frase compuesta y contiene más de un verbo la cohesión será MEDIA
  • Si contiene expresiones secuenciales (primero, entonces, cuando…), será temporal o secuencial
  • Si la descripción no se refiere a algo específico (Ej. Todos los errores), cohesión lógica
  • Si aparece “inicializar”, “preparar”, “configurar”, probablemente sea temporal.

Comprensibilidad

Para facilitar los cambios, el mantenimiento y la reutilización de módulos es necesario que cada uno sea comprensible de forma aislada. Para ello es bueno que posea independencia funcional, pero además es deseable:

  • IDENTIFICACIÓN, el nombre debe ser adecuado y descriptivo
  • DOCUMENTACIÓN, debe aclarar todos los detalles de diseño e implementación que no queden de manifiesto en el propio código
  • SIMPLICIDAD, las soluciones sencillas son siempre las mejores

Adaptabilidad

La adaptación de un sistema resulta más difícil cuando no hay independencia funcional, es decir, con alto acoplamiento y baja cohesión, y cuando el diseño es poco comprensible. Otros factores para facilitar la adaptabilidad:

  • PREVISIÓN, es necesario prever que aspectos del sistema pueden ser susceptibles de cambios en el futuro, y poner estos elementos en módulos independientes, de manera que su modificación afecte al menor número de módulos posible
  • ACCESIBILIDAD, debe resultar sencillo el acceso a los documentos de especificación, diseño, e implementación para obtener un conocimiento suficiente del sistema antes de proceder a su adaptación
  • CONSISTENCIA, después de cualquier adaptación se debe mantener la consistencia del sistema, incluidos los documentos afectados

 

cd794-b
Figura 1. Descomposición modular