Acoplamiento vs cohesión
El acoplamiento y la cohesión son dos conceptos que se encuentran en Java (y en todos los demás idiomas orientados a objetos). El acoplamiento mide cuánto cada uno de los módulos de programa depende de los otros módulos de programa. La cohesión mide cuán fuertemente se relacionan cada una de las funciones dentro de un módulo. En realidad, cualquier lenguaje orientado a objetos (incluida Java) tiene los dos objetivos principales de aumentar la cohesión y disminuir el acoplamiento al mismo tiempo, para desarrollar la mayoría de los programas eficientes. Estas dos métricas de ingeniería de software fueron desarrolladas por Larry Constantine para reducir el costo de modificar y mantener software.
¿Qué es la cohesión??
La cohesión mide cuán fuertemente se relacionan cada una de las funciones dentro de un módulo de programa. Las clases bien estructuradas conducen a programas altamente cohesivos. Si una determinada clase está realizando un conjunto de funciones altamente relacionadas, se dice que esa clase es cohesiva. Por otro lado, si una clase está realizando un montón de funcionalidades totalmente no relacionadas que significa que la clase no es cohesiva en absoluto. Es importante entender que no tener cohesión no significa que la aplicación general no tenga la funcionalidad requerida. Es solo que sin cohesión, será muy difícil manejar la funcionalidad porque se dispersarán en muchos lugares equivocados a medida que aumente la complejidad de la aplicación con el tiempo. Mantener, modificar y extender los comportamientos dispersos en todo el código es muy tedioso incluso para los programadores de mayor experiencia.
Que es el acoplamiento?
El acoplamiento mide cuánto cada uno de los módulos de programa depende de los otros módulos de programa. Las interacciones entre dos objetos ocurren porque hay un acoplamiento. Los programas libremente acoplados tienen una alta flexibilidad y extensibilidad. El acoplamiento fuerte nunca es bueno porque un objeto puede ser altamente dependiente de algún otro objeto. Esta es una pesadilla cuando se modifica el código, porque el acoplamiento alto significa que los programadores necesitan trabajar en varios lugares de código incluso para una sola modificación de comportamiento. El acoplamiento fuerte siempre conduce a programas con baja flexibilidad y menos escalabilidad/extensibilidad. Sin embargo, en lenguajes de programación como Java, es imposible evitar completamente el acoplamiento. Pero se recomienda que los programadores dan su mejor esfuerzo para reducir el acoplamiento tanto como sea posible. También es posible tener algún acoplamiento para ayudar a los objetos a interactuar entre sí sin obstaculizar su escalabilidad y flexibilidad.
¿Cuál es la diferencia entre el acoplamiento y la cohesión??
Aunque el acoplamiento y la cohesión tratan con la calidad de un módulo en ingeniería de software, son conceptos completamente diferentes. La cohesión habla sobre cuánto se relacionan la funcionalidad entre sí dentro del módulo, mientras que el acoplamiento se ocupa de cuánto depende de un módulo de los otros módulos de programa dentro de toda la aplicación. Para tener el software de mejor calidad, la cohesión y el acoplamiento deben alcanzar los dos extremos opuestos de sus espectros. En otras palabras, el acoplamiento suelto y la fuerte cohesión proporcionan el mejor software. Tener campos privados, clases no públicas y métodos privados proporcionan acoplamiento suelto, al tiempo que hace que todos los miembros sean visibles dentro de la clase y el paquete como la visibilidad predeterminada proporcione una alta cohesión.