Pregunta

Estoy tratando de reducir los conceptos de acoplamiento y cohesión a una definición concisa.¿Alguien puede darme una explicación breve y comprensible (más breve que las definiciones de Wikipedia? aquí y aquí)?¿Cómo interactúan?

Gracias.

¿Alguien tiene un buen ejemplo breve?

¿Fue útil?

Solución

Acoplamiento

  • Perder:Tú y el chico de la tienda de conveniencia.Te comunicas a través de un protocolo bien definido para lograr tus respectivos objetivos: pagas dinero y él te deja salir con la bolsa de Cheetos.Cualquiera de ustedes puede ser reemplazado sin alterar el sistema.

  • Ajustado:Tú y tu esposa.

Cohesión

  • Bajo:La tienda de conveniencia.Vas allí para comprar de todo, desde gasolina hasta leche y cajeros automáticos.Los productos y servicios tienen poco en común, y la conveniencia de tenerlos todos en un solo lugar puede no ser suficiente para compensar el aumento de costos y la disminución de calidad resultantes.

  • Alto:La tienda de quesos.Venden queso.Nada más.Aunque no hay nada mejor que ellos en lo que respecta al queso.

Otros consejos

Acoplamiento: una medida de cuánto depende un módulo (paquete, clase, método) de otros módulos.Es deseable reducir el acoplamiento o reducir la cantidad en la que un módulo determinado depende de los otros módulos de un sistema.

Cohesión: una medida de qué tan estrechamente relacionados están los miembros (clases, métodos, funcionalidad dentro de un método) de un módulo con los demás miembros del mismo módulo.Es deseable aumentar la cohesión ya que eso indica que un módulo tiene una tarea muy específica y solo realiza esa tarea.

Una de las discusiones más completas sobre conceptos de diseño de software relacionados con OO (incluidos estos) es la de Bertrand Meyer. Construcción de software orientado a objetos.

Con respecto al "acoplamiento", da su regla de Acoplamiento Débil/Interfaces Pequeñas de la siguiente manera:

Si dos módulos se comunican, deberían intercambiar la menor información posible.

El material de Meyer relacionado con la cohesión nunca se reduce a una sola afirmación concisa, pero creo que esta frase de Steve McConnell Código completo lo resume bastante bien:

La cohesión se refiere a qué tan estrechamente todas las rutinas de una clase o todo el código de una rutina respaldan un propósito central.

El acoplamiento significa dependencia de los demás.
Cohesión significa plenitud consigo mismo.

Una forma rápida y sencilla de medir el acoplamiento es medir su import (o declaraciones similares).

"El acoplamiento es una medida de interdependencias entre los módulos, que deben minimizarse" "La cohesión, una cualidad a maximizar, se centra en las relaciones entre las actividades realizadas por cada módulo".

citado de este artículo: http://steve.vinoski.net/pdf/IEEE-Old_Measures_for_New_Services.pdf

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top