Cohesión y acoplamiento

Obviando la entrada Backup de base de datos MySQL con PHP, que podemos verla como un gris tirando a negro, hace ya más de dos meses que no escribo nada sobre programación. Así que para ponerle fin a esta pobre racha abordaremos dos conceptos de imprescindible conocimiento relativos a la programación orientada a objetos. Nos referimos a la cohesión y el acoplamiento.

Cohesión

A pesar de ser dos conceptos bien diferenciados, es muy habitual que al buscar información sobre la cohesión acabemos encontrando también información sobre el acoplamiento y viceversa. El motivo es que son dos conceptos que guardan una gran relación de complementariedad entre si. En esta entrada mantendremos ese mismo planteamiento y los abordaremos juntos.

Y antes de avanzar con la lectura, es importante puntualizar que aunque la cohesión y el acoplamiento pueden darse a distintos niveles, en esta ocasión analizaremos ambos conceptos única y exclusivamente a nivel de clase. Así que veamos el índice y vayamos al lío.

Qué son la cohesión y el acoplamiento

Cohesión y acoplamiento son dos conceptos distintos de gran importancia en el desarrollo de código de calidad, y están íntimamente ligados con el diseño del software y con la programación orienta a objetos. Veamoslos uno a uno:

Qué es la cohesión

La cohesión nos indica el grado de relación existente entre los distintos elementos de una clase. Una clase tendrá una cohesión alta cuando todos sus métodos estén relacionados entre si, bien mediante llamadas entre ellos o bien mediante el uso de variables cuyo ámbito se encuentre a nivel de clase. Y esto suele ocurrir cuando una clase realiza una única tarea.

Como habras podido intuir, cuanto más alta sea la cohesión mejor.

Qué es el acoplamiento

Y si la cohesión trata sobre la relación existente entre los elementos de la propia clase, el acoplamiento lo hace sobre el nivel de dependencia de la clase con respecto a otros elementos externos. Por lo tanto, diremos que una clase tiene un nivel de acoplamiento alto cuan hace uso en gran medida de otros componentes.

Nuestro objetivo será siempre construir clases con un nivel de acoplamiento bajo.

Beneficios de una alta cohesión y un bajo acoplamiento

Las ventajas de una clase cohesiva con bajo acoplamiento son muchas, pero podemos resumirlas como la mejora de la encapsulación, con todos los beneficios que ello conlleva.

Otro aspecto más a destacar es que el propio hecho de buscar la cohesión y evitar el acoplamiento ayuda a cumplir otros principios como SOLID o KISS, de los que probablemente escriba más adelante.

De cualquier forma, al ser dos conceptos distintos analizaremos sus beneficios por separado, aunque ya te adelanto que los podríamos haber tratado en conjunto, en unos instantes lo comprenderás.

Beneficios de una cohesión alta

Los principales beneficios de desarrollar elementos con un alto grado de cohesión son:

  • Mejora de la mantenibilidad del código. Al realizar una única tarea, los cambios realizados sobre la propia clase afectarán en menor medida al código que hace uso de ella.
  • Mejora de la lectura y comprensión. Es mucho más sencillo leer y entender una clase con una única responsabilidad, pues será más pequeña y simple.

Beneficios de un bajo acoplamiento

En cuanto al acoplamiento, los beneficios de desarrollar una clase con bajo acoplamiento son:

  • Mejora de la facilidad de reutilización. Al no tener dependencia de elementos externos será muchos más sencillo portar nuestra clase a otros componentes.
  • Mejora de la mantenibilidad. En este caso por partida doble: en primer lugar los cambios realizados en la clase no estarán condicionados por requisitos de estructuras de software externas, y en segundo lugar porque al no tener dependencias externas no se verá afectado por modificaciones en éstas.
  • Mayor facilidad de comprensión. Pues no tendremos que buscar ni comprender otros módulos para aprender cómo funciona el que nos interesa.

Olores en el código

Si recordáis la entrada ¿A qué huele el código fuente?, hacíamos referencia a múltiples motivos que propiciaban la aparición de olores en el código fuente.

Pues bien, algunos de esos olores están estrechamente ligados con un bajo nivel de cohesión y/o con un alto nivel de acoplamiento: las clases multifuncionales, las clases brown dispatcher, o la envidia de funcionalidad son algunos ejemplos.

Como decíamos al comienzo del artículo, la cohesión y el acoplamiento tienen una gran importancia en el desarrollo de software de calidad.

Créditos y referencias

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *