Principios Fundamentales del Diseño de Software: Cohesión, Acoplamiento y Calidad
Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 4,87 KB
Independencia Funcional en el Diseño de Software
La independencia funcional se logra cuando cada módulo tiene una función bien determinada. Para ello, se debe evitar una excesiva interacción con otros módulos. Este concepto deriva de principios como:
- Modularidad
- Abstracción
- Ocultamiento de información
Un posible inconveniente de este enfoque es la tendencia a la creación de un número excesivo de módulos, con el consiguiente costo asociado. La independencia funcional se puede medir en base a dos criterios principales:
- Cohesión
- Acoplamiento
Cohesión: Medida de la Unidad Interna
La cohesión es una medida que indica qué tan bien un componente encaja junto a los demás. Idealmente, un componente debe implementar una única entidad lógica o una función específica. La cohesión es un atributo deseable de los componentes, sobre todo cuando se realizan cambios.
Pueden identificarse varios niveles de cohesión:
- Asociación lógica (débil): Los componentes que realizan funciones similares son agrupados.
- Cohesión secuencial (media): La salida de una parte de un componente es la entrada de otra parte.
- Cohesión funcional (fuerte): Cada parte es necesaria para la ejecución de una función única.
A menudo es difícil clasificar la cohesión de manera precisa. Es importante destacar que la herencia de atributos de superclases puede debilitar la cohesión. Para entender un componente, tanto las superclases como las clases componentes deben ser examinadas.
Acoplamiento: Fuerza de las Interconexiones
El acoplamiento es una medida de la fuerza de las interconexiones entre los componentes del sistema. Un acoplamiento débil significa que los cambios en un componente no afectarán significativamente a otros componentes. Por el contrario, las variables compartidas o el intercambio excesivo de información llevan a un acoplamiento fuerte.
El acoplamiento débil puede lograrse mediante la descentralización de estados, como ocurre con los objetos.
Acoplamiento en Sistemas Orientados a Objetos
Los sistemas orientados a objetos suelen estar débilmente acoplados debido a que:
- No hay estados compartidos directos.
- Los objetos se comunican usando el paso de mensajes.
Sin embargo, una clase de objetos está acoplada a su superclase. Esto implica que los cambios hechos a los atributos u operaciones de una superclase se propagan a todas las subclases.
Calidad del Diseño de Software
La calidad del diseño de software se sustenta en dos conceptos fundamentales que van de la mano:
- Entendibilidad (o Comprensibilidad)
- Adaptabilidad
Entendibilidad: Facilidad de Comprensión
La entendibilidad está relacionada con varias características de los componentes:
- Cohesión: ¿Pueden los componentes ser comprendidos por sí mismos?
- Nombres: ¿Los nombres utilizados tienen un significado claro y son descriptivos?
- Documentación: ¿El diseño está bien documentado y es accesible?
- Complejidad: ¿Se usan algoritmos excesivamente complejos?
Informalmente, una alta complejidad significa que existen muchas relaciones entre varias partes del diseño, lo cual dificulta su comprensión.
Adaptabilidad: Capacidad de Evolución
Un diseño es adaptable si cumple con las siguientes condiciones:
- Sus componentes están débilmente acoplados.
- Está bien documentado y la documentación está actualizada.
- Cada componente es una entidad autocontenida (aunque fuertemente cohesionada internamente).
Para adaptar un diseño, debe ser posible gestionar o 'rutear' los componentes de manera que las consecuencias de los cambios puedan ser analizadas. La trazabilidad es un factor clave en este aspecto.
Metodologías de Diseño de Software
Las metodologías de diseño de software abarcan diferentes enfoques para estructurar y desarrollar sistemas:
- Diseño Arquitectónico: Define la relación entre los principales elementos estructurales del sistema.
- Diseño de Interfaz: Describe cómo se comunica el software:
- Con los usuarios.
- Con los sistemas que operan con él.
- Consigo mismo.
- Diseño Procedimental: Ofrece una descripción procedimental de los componentes del software.
- Diseño de Datos: Transforma el modelo de información en las estructuras de datos necesarias para implementar el software.