Cohesión (informática)

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar

En programación informática, cohesión se refiere al grado en el que los elementos dentro de un módulo pertenecen entre sí. En cierto sentido, es una medida de la fuerza de la relación entre los métodos y datos de una clase y algún propósito o concepto unificador al que sirve esa clase. En otro sentido, es una medida de la fuerza de la relación entre los métodos de la clase y los datos mismos.

La cohesión es un tipo ordinal de medición y generalmente se describe como “alta cohesión” o “baja cohesión”. Los módulos con alta cohesión tienden a ser preferibles, porque la alta cohesión está asociada con varios rasgos deseables del software, incluyendo robustez, confiabilidad, reutilización y comprensibilidad. Por el contrario, la baja cohesión se asocia con rasgos indeseables, como ser difícil de mantener, probar, reutilizar o incluso comprender.

La cohesión a menudo se contrasta con el acoplamiento. Una alta cohesión a menudo se correlaciona con un acoplamiento flojo y viceversa. Las métricas de acoplamiento y cohesión del software fueron inventadas por Larry Constantine a finales de la década de 1960 como parte del Diseño Estructurado, basándose en características de “buenas” prácticas de programación que reducían 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 & Constantino (1979); los dos últimos se convirtieron posteriormente en términos estándar en ingeniería de software.

Alta cohesión

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 alta cohesión. En un sistema altamente cohesivo, la legibilidad y reutilización del código aumentan, mientras que la complejidad se mantiene manejable.

Cohesión

La cohesión aumenta si:

  • Las funcionalidades incrustadas en una clase, accedidas a través de sus métodos, tienen mucho en común.
  • Los métodos llevan a cabo un pequeño número de actividades conexas, evitar conjuntos de datos gruesos o no relacionados.
  • Los métodos relacionados están en el mismo archivo fuente o agrupados de otro modo; por ejemplo, en archivos separados pero en el mismo subdirectorio/carpeta.

Las ventajas de una alta cohesión (o "cohesión fuerte") son:

  • Reducir la complejidad del módulo (son más simples, con menos operaciones).
  • El aumento de la capacidad de mantenimiento del sistema, porque los cambios lógicos en el dominio afectan a menos módulos y porque los cambios en un módulo requieren menos cambios en otros módulos.
  • Aumento de la reutilización de módulos, ya que los desarrolladores de aplicaciones encontrarán el componente que necesitan más fácilmente entre el conjunto cohesivo de operaciones proporcionado por el módulo.

Si bien, en principio, un módulo puede tener una cohesión perfecta al constar de un solo elemento atómico (con una sola función, por ejemplo), en la práctica, las tareas complejas no se pueden expresar mediante un único elemento simple. Por lo tanto, un módulo de un solo elemento tiene un elemento que es demasiado complicado para realizar una tarea o que es demasiado estrecho y, por lo tanto, está estrechamente acoplado a otros módulos. Por lo tanto, la cohesión se equilibra tanto con la complejidad de la unidad como con el acoplamiento.

Tipos de cohesión

La cohesión es una medida cualitativa, lo que significa que el código fuente que se va a medir se examina utilizando una rúbrica para determinar una clasificación. Los tipos de cohesión, de peor a mejor, son los siguientes:

Cohesión accidental (peor)
La cohesión accidental es cuando partes de un módulo se agrupan arbitrariamente; la única relación entre las partes es que se han agrupado (por ejemplo, una clase de “Utilidades”). Ejemplo:
/*Grupos: Las definiciones de funciónPartes: Los términos de cada función*/Módulo A {} /* Aplicación de r(x) = 5x + 3 No hay ninguna razón particular para agrupar funciones de esta manera, por lo que se dice que el módulo tiene Coincidental Cohesion. */  r()x) = a()x) + b()x)  a()x) = 2x + 1 b()x) = 3x + 2}
Cohesión logística
La cohesión lógica es cuando las partes de un módulo se agrupan porque se clasifican lógicamente para hacer lo mismo aunque sean diferentes por naturaleza (por ejemplo, agrupar todas las rutinas de manejo de entradas de ratón y teclado o agrupar todos los modelos, vistas y controladores en carpetas separadas en un patrón MVC).
Cohesión temporal
La cohesión temporal es cuando partes de un módulo se agrupan cuando se procesan - las partes se procesan en un momento particular en la ejecución del programa (por ejemplo, una función que se llama después de capturar una excepción que cierra los archivos abiertos, crea un registro de errores, y notifica al usuario).
Cohesión procesal
La cohesión procesal es cuando partes de un módulo se agrupan porque siempre siguen una cierta secuencia de ejecución (por ejemplo, una función que verifica los permisos de archivo y luego abre el archivo).
Cohesión comunicacional/informacional
La cohesión comunicacional es cuando se agrupan partes de un módulo porque operan en los mismos datos (por ejemplo, un módulo que opera en el mismo registro de la información).
Cohesión secuencial
La cohesión secuencial es cuando se agrupan partes de un módulo porque la salida de una parte es la entrada a otra parte como una línea de montaje (por ejemplo, una función que lee datos de un archivo y procesa los datos).
Cohesión funcional (mejor)
La cohesión funcional es cuando se agrupan partes de un módulo porque todas contribuyen a una única tarea bien definida del módulo (por ejemplo, análisis Lexical de una cadena XML). Ejemplo:
/*Grupos: Las definiciones de funciónPartes: Los términos de cada función*/Módulo A {} /* Ejecución de las operaciones aritméticas Se dice que este módulo tiene cohesión funcional porque  hay una intención de agrupar operaciones aritméticas simples en ella.  */ a()x, Sí.) = x + Sí. b()x, Sí.) = x * Sí.}Módulo B {} /* Módulo B: Implementa r(x) = 5x + 3 Se puede decir que este módulo tiene cohesión atómica. Todo el mundo sistema (con los módulos A y B como partes) también se puede decir que tienen funcional cohesión, ya que sus partes tienen objetivos separados específicos.  */ r()x) = [Módulo A].a[Módulo A].b()5, x), 3)}
Cohesión perfecta (atómica)
Ejemplo.
/*Grupos: Las definiciones de funciónPartes: Los términos de cada función*/Módulo A {} /*  Implementación de r(x) = 2x + 1 + 3x + 2 Se dice que tiene una cohesión perfecta porque no se puede reducir más que eso. */ r()x) = 5x + 3}

Aunque la cohesión es un tipo de escala de clasificación, las clasificaciones no indican una progresión constante de mejora de la cohesión. Los estudios realizados por varias personas, entre ellos Larry Constantine, Edward Yourdon y Steve McConnell, indican que los dos primeros tipos de cohesión son inferiores; la cohesión comunicacional y secuencial son muy buenas; y la cohesión funcional es superior.

Contenido relacionado

Sistema IBM/34

El IBM System/34 era un ordenador de gama media de IBM presentado en 1977. Se retiró del mercado en febrero de 1985. Era un sucesor multiusuario y multitarea...

ISAM

ISAM es un método para crear, mantener y manipular archivos informáticos de datos para que los registros se puedan recuperar de forma secuencial o...

Estudio escandinavo de supervivencia de la simvastatina

El Scandinavian Simvastatin Survival Study fue un ensayo clínico multicéntrico, aleatorizado, doble ciego, controlado con placebo, que proporcionó la datos...
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save