Acoplamiento vs Cohesión
El acoplamiento y la cohesión son dos conceptos que se encuentran en Java (y todos los demás lenguajes orientados a objetos). El acoplamiento mide cuánto depende cada uno de los módulos del programa de los otros módulos del programa. La cohesión mide qué tan fuertemente están relacionadas cada una de las funciones dentro de un módulo. En realidad, cualquier lenguaje orientado a objetos (incluido Java) tiene los dos objetivos principales de aumentar la cohesión y disminuir el acoplamiento al mismo tiempo, para desarrollar programas más eficientes. Estas dos métricas de ingeniería de software fueron desarrolladas por Larry Constantine para reducir el costo de modificar y mantener el software.
¿Qué es la cohesión?
La cohesión mide la fuerza con la que cada una de las funciones están relacionadas dentro de un módulo de programa. Las clases bien estructuradas conducen a programas altamente cohesivos. Si cierta 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, eso significa que la clase no es coherente en absoluto. Es importante comprender que no tener cohesión no significa que la aplicación en general no tenga la funcionalidad requerida. Es solo que sin cohesión, será muy difícil administrar la funcionalidad porque estarán dispersos en muchos lugares equivocados a medida que la complejidad de la aplicación aumente con el tiempo. Mantener, modificar y extender comportamientos dispersos por todo el código es muy tedioso incluso para los programadores más experimentados.
¿Qué es el acoplamiento?
El acoplamiento mide cuánto depende cada uno de los módulos del programa de los otros módulos del programa. Las interacciones entre dos objetos ocurren porque hay acoplamiento. Los programas débilmente acoplados son altos en flexibilidad y extensibilidad. El acoplamiento fuerte nunca es bueno porque un objeto puede depender en gran medida de otro objeto. Esto es una pesadilla cuando se modifica el código, porque el alto acoplamiento significa que los programadores necesitan trabajar en varios lugares del código incluso para una sola modificación de comportamiento. Un fuerte acoplamiento siempre conduce a programas con poca flexibilidad y menos escalabilidad/extensibilidad. Sin embargo, en lenguajes de programación como Java, es imposible evitar por completo el acoplamiento. Pero se recomienda que los programadores hagan 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 acoplamiento y cohesión?
Aunque el acoplamiento y la cohesión tienen que ver con la calidad de un módulo en ingeniería de software, son conceptos completamente diferentes. La cohesión habla de cuánto se relacionan las funcionalidades entre sí dentro del módulo, mientras que el acoplamiento trata de cuánto depende un módulo de los otros módulos del programa dentro de toda la aplicación. Para tener un software de la mejor calidad, la cohesión y el acoplamiento deben llegar a los dos extremos opuestos de sus espectros. En otras palabras, el acoplamiento débil y la cohesión fuerte proporcionan el mejor software. Tener campos privados, clases no públicas y métodos privados proporciona un acoplamiento flexible, al tiempo que hace que todos los miembros sean visibles dentro de la clase y tener el paquete como visibilidad predeterminada proporciona una alta cohesión.