Articulo de referencia

Cohesión (informática)

En programación informática , la cohesión se refiere al grado en que los elementos dentro de un módulo están relacionados entre sí . [ 1 ] En cierto sentido, es una medida de la...

En programación informática , la cohesión se refiere al grado en que los elementos dentro de un módulo están relacionados entre sí . [ 1 ] En cierto sentido, es una medida de la fuerza de la relación entre los métodos y los datos de una clase y algún propósito o concepto unificador que dicha clase cumple. En otro sentido, es una medida de la fuerza de la relación entre los métodos y los datos de la clase.

La cohesión es una medida ordinal que se suele clasificar como «alta cohesión» o «baja cohesión». Los módulos con alta cohesión tienden a ser preferibles, ya que esta se asocia con varias características deseables del software, como robustez , fiabilidad, reutilización y comprensibilidad. Por el contrario, la baja cohesión se asocia con características indeseables, como la dificultad para mantener, probar, reutilizar o comprender el software.

La cohesión se suele contrastar con el acoplamiento . Una alta cohesión suele correlacionarse con un acoplamiento débil , y viceversa. [ 2 ] 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 , basándose en las características de las buenas prácticas de programación que reducían los costes de mantenimiento y modificación. El Diseño Estructurado, la cohesión y el acoplamiento se publicaron en el artículo de Stevens, Myers y Constantine (1974) [ 3 ] y en el libro de Yourdon y Constantine (1979). [ 1 ] Estos dos últimos se convirtieron posteriormente en términos estándar en la ingeniería de software .

Alta cohesión

En la programación orientada a objetos , se dice que una clase tiene alta cohesión si los métodos que la componen son similares en muchos aspectos. [ 4 ] En un sistema altamente cohesivo, aumenta la legibilidad y la reutilización del código, mientras que la complejidad se mantiene manejable.

Cohesión

La cohesión aumenta si:

  • Las funcionalidades integradas en una clase, a las que se accede a través de sus métodos, tienen mucho en común.
  • Los métodos llevan a cabo un número reducido de actividades relacionadas, evitando conjuntos de datos poco detallados o no relacionados entre sí.
  • Los métodos relacionados se encuentran en el mismo archivo fuente o agrupados de alguna otra manera; por ejemplo, en archivos separados pero en el mismo subdirectorio/carpeta.

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

  • Módulo de menor complejidad, con menos operaciones.
  • Mayor facilidad de mantenimiento del sistema , ya que los cambios lógicos en el dominio afectan a menos módulos, y los cambios en un módulo requieren menos cambios en otros módulos.
  • Mayor reutilización de módulos, ya que los desarrolladores de aplicaciones encontrarán más fácilmente el componente que necesitan dentro del conjunto coherente de operaciones que proporciona el módulo.

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

Tipos de cohesión

La cohesión es una medida cualitativa, lo que significa que el código fuente 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 coincidente (la peor)
La cohesión casual se produce cuando las partes de un módulo se agrupan arbitrariamente. La única relación entre las partes es que se han agrupado juntas (por ejemplo, una clase "Utilidades"). Ejemplo:
/* Grupos: Las definiciones de las funciones Partes: Los términos de cada función */ Módulo A { /*  Implementación de r(x) = 5x + 3  No hay ninguna razón particular para agrupar las funciones de esta manera,  por lo que se dice que el módulo tiene cohesión coincidente.  */ r ( x ) = a ( x ) + b ( x ) a ( x ) = 2 x + 1 b ( x ) = 3 x + 2 }
Cohesión lógica
La cohesión lógica se produce cuando las partes de un módulo se agrupan porque están categorizadas lógicamente para hacer lo mismo, aunque sean diferentes por naturaleza (por ejemplo, agrupar todas las rutinas de manejo de entrada 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 se da cuando las partes de un módulo se agrupan según el momento en que se procesan. Las partes se procesan en un momento específico de 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 procedimental
La cohesión procedimental se produce cuando las partes de un módulo se agrupan porque siempre siguen una determinada secuencia de ejecución (por ejemplo, una función que comprueba los permisos de un archivo y luego lo abre).
Cohesión comunicacional/informativa
La cohesión comunicacional se produce cuando las partes de un módulo se agrupan porque operan con los mismos datos (por ejemplo, un módulo que opera con el mismo registro de información).
Cohesión secuencial
La cohesión secuencial se produce cuando las partes de un módulo se agrupan porque la salida de una parte es la entrada de otra, como en una cadena de montaje (por ejemplo, una función que lee datos de un archivo y los procesa).
Cohesión funcional (mejor)
La cohesión funcional se produce cuando las partes de un módulo se agrupan porque todas contribuyen a una única tarea bien definida del módulo (por ejemplo, el análisis léxico de una cadena XML). Ejemplo:
/* Grupos: Las definiciones de las funciones Partes: Los términos de cada función */ Módulo A { /*  Implementación de operaciones aritméticas  Se dice que este módulo tiene cohesión funcional porque  existe la intención de agrupar  en él operaciones aritméticas simples.  */ a ( x , y ) = x + y b ( x , y ) = x * y }Módulo B { /*  Módulo B: Implementa r(x) = 5x + 3  Se puede decir que este módulo tiene cohesión atómica.  También se puede decir que todo el sistema (con los Módulos A y B como partes) tiene  cohesión funcional, porque sus partes tienen propósitos específicos y separados.  */ r ( x ) = [ Módulo A ]. a ([ Módulo A ]. b ( 5 , x ), 3 ) }
Cohesión perfecta (atómica)
Ejemplo.
/* Grupos: Las definiciones de las funciones Partes: Los términos de cada función */ Módulo A { /*  Implementación de r(x) = 2x + 1 + 3x + 2  Se dice que tiene cohesión perfecta porque no se puede reducir más que eso.  */ r ( x ) = 2 x + 1 + 3 x + 2 }

Aunque la cohesión es una escala de clasificación, los rangos no indican una progresión constante de mejora de la cohesión. Estudios realizados por Larry Constantine , Edward Yourdon y Steve McConnell [ 5 ] 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.

Véase también

Referencias

  1. ^ a b Yourdon, Edward ; Constantine, Larry LeRoy (1979) [1975]. Diseño estructurado: Fundamentos de una disciplina de diseño de programas y sistemas informáticos . Yourdon Press. Bibcode : 1979sdfd.book.....Y . ISBN 978-0-13-854471-3.
  2. ^ Ingeno, José (2018). Manual del arquitecto de software . Publicación de paquetes . pag. 175.ISBN 978-178862406-0.
  3. ^ Stevens, Wayne P. ; Myers, Glenford J. ; Constantine, Larry LeRoy (junio de 1974). "Diseño estructurado". IBM Systems Journal . 13 (2): 115– 139. doi : 10.1147/sj.132.0115 .
  4. ^ Marsic, Ivan (2012). Ingeniería de software . Universidad de Rutgers .
  5. ^ McConnell, Steve (junio de 2004) [1993]. Code Complete (2.ª ed.). Pearson Education. págs.  168-171 . ISBN 978-0-7356-1967-8.
  • Definiciones de las métricas de cohesión
  • Métricas de cohesión
  • Medición de la cohesión en Python
Obtenido de " https://en.wikipedia.org/w/index.php?title=Cohesion_(computer_science)&oldid=1328237301 "