# Cohesión (informática)

En la programación de la computadora, la cohesión se refiere al grado en que los elementos de un módulo permanecen juntos. Por lo tanto, la cohesión mide la fuerza de la relación entre las piezas de funcionalidad dentro de un módulo dado. Por ejemplo, en sistemas altamente cohesivos, los elementos funcionales que integran el módulo en cuestión están muy relacionados.

## Concepto

La cohesión es un tipo de medición ordinal y se describe generalmente como "cohesión alta" o "cohesión baja". Se prefieren los módulos con una alta cohesión debido a varios rasgos deseables del software con los que se relaciona como la robustez, la fiabilidad, la reutilización y el grado de comprensión. Por otro lado, la baja cohesión se asocia con rasgos indeseables, tales como ser difícil de mantener, probar, volver a utilizar o incluso entender.
La cohesión es a menudo comparada con acoplamiento, un concepto diferente. Una alta cohesión a menudo se relaciona con acoplamiento flexible, y viceversa. Las métricas de software de acoplamiento y cohesión fueron inventadas por Larry Constantine a finales de la década de 1960, como parte del Diseño Estructurado, basado en las características de las "buenas" prácticas de programación que reducen los costos de mantenimiento y modificación. Diseño estructurado, cohesión y acoplamiento fueron publicados en el artículo Stevens, Myers & Constantine (1974) y el libro Yourdon & Constantine (1979); los dos últimos posteriormente se convirtieron en términos estándar en la ingeniería de software.

## Tipos de Cohesión

La cohesión en un sistema de información puede ser de los siguientes tipos:
* Cohesión casual
* Cohesión lógicamente
* Cohesión temporal
* Cohesión procedural
* Cohesión de comunicaciones
* Cohesión secuencial
* Cohesión funcional
En la programación orientada a objetos, si los métodos que sirven a una clase tienden a ser similares en muchos aspectos, entonces se dice que la clase tiene una alta cohesión. En un sistema altamente cohesivo, la legibilidad y reusabilidad del código es mayor, mientras que la complejidad se mantiene manejable.
La cohesión es mayor si:
* Las funcionalidades embebidas en una clase, accedidas a través de sus métodos, tienen mucho en común.
* Los métodos realizan un pequeño número de actividades relacionadas, para evitar los trozos grandes de grano o no relacionados con los conjuntos de datos.

## Ventajas

Ventajas de la cohesión alta o "fuerte" son:
* Reducción de la complejidad de los módulos (que son más simples, tener un menor número de operaciones).
* Aumento del sistema de mantenimiento, debido a los cambios lógicos en el dominio de afectar a un menor número de módulos, y debido a los cambios en un módulo requieren menos cambios en otros módulos.
* Aumento de la reutilización de módulos, debido a que los desarrolladores de aplicaciones pueden encontrar el componente que necesitan más fácilmente entre el conjunto coherente de operaciones proporcionadas por el módulo.
Aunque, en principio, un módulo puede tener una cohesión perfecta por estar constituido solo por un elemento atómico -teniendo una sola función, por ejemplo – en la práctica las tareas complejas no se pueden expresar por un solo, simple elemento. Por lo tanto un elemento de un único módulo tiene un elemento que es demasiado complicado, con el fin de realizar la tarea, o es demasiado estrecho, y por lo tanto está muy unido a otros módulos. Así que la cohesión es equilibrada con la complejidad de la unidad y el acoplamiento.
* Datos: Q1353987
* ↑ Yourdon y Constantine, 1979.