• Los objetivos de las técnicas de diseño software son
fundamentalmente: – La descomposición modular del sistema – Los diseños de los algoritmos y estructuras de datos fundamentales que se deben usar en el sistema • Primero veremos las características deseables de una buena descomposición modular del sistema, y luego se presentarán técnicas de diseño: – Diseño funcional descendente – Diseño orientado a objetos – Diseño de datos DESCOMPOSICIÓN MODULAR • Los pasos a seguir son: 1. Identificar los módulos 2. Describir cada módulo 3. Describir las relaciones entre módulos • Tipos de módulos: 1. Código fuente, en el lenguaje de programación usado 2. Tabla de datos, para datos de inicialización u otros 3. Configuración, se agrupa en un módulo toda la información de configuración en el entorno de trabajo 4. Otros: ficheros de ayuda en línea, manuales, etc. • Una descomposición modular debe poseer ciertas cualidades mínimas para que se pueda considerar suficientemente válida Independencia fucional Acoplamiento Cohesión Comprensibilidad Adaptabilidad Acoplamiento Un bajo acoplamiento indica un sistema bien particionado y puede obtenerse de tres maneras: • Eliminando relaciones innecesarias: Por ejemplo, un módulo puede recibir algunos datos, innecesarios para él, porque debe enviarlos para un módulo subordinado. Acoplamiento • Reduciendo el número de relaciones necesarias: Cuanto menos conexiones existan entre módulos, menor será la posibilidad del efecto en cadena (un error en un módulo aparece como síntoma en otro) • Debilitando la dependencia de las relaciones necesarias: Ningún módulo se tiene que preocupar por los detalles internos de implementación de cualquier otro. Lo único que tiene que conocer un módulo debe ser su función y las cuplas de entrada y salida (cajas negras). Generalmente el tipo de cohesión de un módulo determina el nivel de acoplamiento Finalmente diremos que si bien en la práctica es difícil encontrar módulos casualmente , cohesivos en su totalidad, es común que tengan elementos casualmente cohesivos. Tal es el caso de operaciones de inicialización y terminación que son puestas juntas en un módulo superior. Los elementos de un módulo están lógicamente asociados si puede pensarse en ellos como pertenecientes a la misma clase lógica de funciones, es decir aquellas que pueden pensarse como juntas lógicamente. Por ejemplo, se puede combinar en un módulo simple todos los elementos de procesamiento que caen en la clase de "entradas", que abarca todas las operaciones de entrada. Podemos tener un módulo que lea desde consola una tarjeta con parámetros de control, registros con transacciones erróneas de un archivo en cinta, registros con transacciones válidas de otro archivo en cinta, y los registros maestros anterior de un que La cohesión lógica es más fuerte archivo en disco. Este la coincidente, módulo debido a que podría llamarse que representa un mínimo de asociación entre"Lecturas", el problemay yque losagrupa todas las elementos del módulo. Sin embargo operaciones podemos ver quedeun entrada, móduloes lógicamente lógicamente cohesivo no realiza una función cohesivo. específica, sino que abarca una serie de funciones. La cohesión temporal es más fuerte que la cohesión lógica, ya que implica un nivel de relación más: el factor tiempo. Sin embargo la cohesión Debido a que temporal aún es pobre en dicho procesamiento debenivel de cohesión o puede y acarrea realizarse en el mismo inconvenientes período en el de tiempo, los mantenimiento elementos y modificación asociados del sistema. temporalmente pueden combinarse en un único módulo que los ejecute a la misma vez. Para decir que un módulo tiene solo cohesión procedural, los elementos de procesamiento deben ser elementos de alguna iteración, decisión, o secuencia, pero no deben estar vinculados con ningún principio asociativo de orden superior. Este nivel de cohesión comúnmente se tiene como resultado de derivar una estructura modular a partir de modelos de procedimiento como ser diagramas de flujo, o diagramas Nassi-Shneiderman. En el diagrama Decir de la figura que un conjunto depodemos elementos observar que los elementos de procesamiento de están vinculados procesamiento por comunicación1, 2, ysignifica 3, estánque asociados todo por comunicación sobre la corriente de los elementos operan sobre el mismo datos de entrada, en tanto que 2, 3, y 4 se conjuntopor vinculan delos datos datosdedeentrada salida o de salida. Los diagramas de flujo de datos (DFD) son un medio objetivo para determinar si los elementos en un módulo están asociados por comunicación. Cohesión Comunicativa La cohesión por comunicación es común en aplicaciones comerciales.
Ejemplos típicos pueden ser:
– Un módulo que imprima o grabe un archivo de transacciones – Un módulo que reciba datos de diferentes fuentes, y los transforme y ensamble en una línea de impresión. Cohesión Secuencial El siguiente nivel de cohesión en la escala es la asociación secuencial. – En ella, los datos de salida (resultados) de un elemento de procesamiento sirven como datos de entrada al siguiente elemento de procesamiento – En términos de un diagrama de flujo de datos de un problema, la cohesión secuencial combina una cadena lineal de sucesivas transformaciones de datos .Este es claramente un principio asociativo relacionado con el dominio del problema En un módulo completamente funcional, cada elemento de procesamiento, es parte integral de, y esencial para, la realización de una función simple. Criterios para establecer el grado de cohesión
Una técnica útil para determinar si un módulo está
acotado funcionalmente es escribir una frase que describa la función (propósito) del módulo y luego examinar dicha frase. Puede hacerse la siguiente prueba: 1. Si la frase resulta ser una sentencia compuesta, contiene una coma, o contiene más de un verbo, probablemente el módulo realiza más de una función; por tanto, probablemente tiene vinculación secuencial o de comunicación. 2. Si la frase contiene palabras relativas al tiempo, tales como "primero", "a continuación", "entonces", "después", "cuando", "al comienzo", etc., entonces probablemente el módulo tiene una vinculación secuencial o temporal. Criterios para establecer el grado de cohesión
3. Si el predicado de la frase no contiene un objeto específico
sencillo a continuación del verbo, probablemente el módulo esté acotado lógicamente. Por ejemplo editar todos los datos tiene una vinculación lógica; editar sentencia fuente puede tener vinculación funcional. 4. Palabras tales como "inicializar", "limpiar", etc., implican vinculación temporal.
Es importante notar que no es necesario determinar el nivel
preciso de cohesión. En su lugar, lo importante es intentar conseguir una cohesión alta y saber reconocer la cohesión baja, de forma que se pueda modificar el diseño del software para que disponga de una mayor independencia funcional. COMPARACIÓN DE NIVELES DE COHESIÓN COMPARACIÓN DE NIVELES DE COHESIÓN COMPARACIÓN DE NIVELES DE COHESIÓN COMPARACIÓN DE NIVELES DE COHESIÓN cuando desde un módulo se pueden cambiar datos locales de otro se emplea una zona común de datos a la que tienen acceso varios módulos 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 En un intercambio de datos se realiza mediante una referencia a la estructura completa de datos (vector, pila, árbol, grafo, …) viene dado por los datos que intercambian los módulos. Es el mejor posible