2008-09-02 17 views
58

Estoy tratando de reducir los conceptos de acoplamiento y cohesión a una definición concisa. ¿Puede alguien darme una explicación breve y comprensible (más corta que las definiciones en Wikipedia here y here)? ¿Cómo interactúan?Acoplamiento y cohesión

Gracias.

¿Alguien tiene un buen y breve ejemplo?

+0

Una distinción que se me escapó al principio: 'coupling' es * entre * clases, mientras que' cohesión' es * dentro de * una sola clase. –

Respuesta

177

acoplamiento

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

  • Firme: usted y su esposa.

Cohesión

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

  • Alto: The cheese store. Ellos venden queso. Nada más. Sin embargo, no se puede superar cuando se trata de queso.

+15

Humm, estaba anticipando un ejemplo de esposa de alta cohesión, tengo que decir que estoy un poco decepcionado :) – ubiquibacon

+6

"¡Ah! Tenemos un poco de Camembert, señor ... Está un poco sucio, señor ... Bueno De hecho, está muy sucio, señor ... Creo que es más tonto de lo que le gusta, señor ... Sí, señor. "Oh ... el gato se lo comió". – MikeMurko

+0

Vine buscando esta respuesta, para mostrarle a un colega de la universidad. Sin embargo, carece de la relación – danielcooperxyz

62

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

Cohesión: una medida de qué tan relacionados están los miembros (clases, métodos, funcionalidad dentro de un método) de un módulo con los otros 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 hace esa tarea.

1

Una manera rápida y sucia para medir-acoplamiento es medir sus import (o similares) declaraciones.

21

Una de las mejores discusiones comprensivas de los conceptos de diseño de software relacionados con OO (incluyendo éstos) es Bertrand Meyer Object Oriented Software Construction.

En cuanto a 'acoplamiento', él da su acoplamiento débil/regla Pequeño Interfaces de la siguiente manera:

Si hay dos módulos se comunican, deben intercambiar tan poca información como sea posible.

materiales de Meyer en relación con la cohesión no está nunca se reducía a una sola declaración concisa, pero creo que esta frase de Code Complete sumas de Steve McConnell lo bastante bien:

La cohesión se refiere a qué tan cerca todas las rutinas en una clase o todo el código en una rutina admiten un propósito central

+0

¡Gran respuesta! Me parece comprensible que – SebNag

16

acoplamiento significa dependencia de others.Cohesion significa integridad consigo mismo.

+0

respuestas concisas y agradables – Premraj

1

La alta cohesión dentro de los módulos y el bajo acoplamiento entre los módulos a menudo se consideran relacionados con la alta calidad en los lenguajes de programación OO.

Por ejemplo, el código dentro de cada clase Java debe tener una alta cohesión interna, pero debe estar lo más unida posible al código en otras clases de Java.

El acoplamiento se refiere a cómo se relacionan dos clases/módulos y qué tan dependientes son el uno del otro. Ser de bajo nivel de acoplamiento significaría que cambiar algo importante en una clase no debería afectar al otro. El acoplamiento alto dificultaría la realización de cambios en el código y su mantenimiento, ya que las clases están muy juntas, por lo que un cambio podría significar la renovación de todo un sistema.

Cohesión se refiere a lo que hará la clase (o módulo). La baja cohesión significaría que la clase realiza una gran variedad de acciones y no se centra en lo que debería hacer. Una alta cohesión significaría que la clase se centra en lo que debería estar haciendo, es decir, solo en los métodos relacionados con la intención de la clase.

Todo buen diseño de software será de alta cohesión y bajo acoplamiento.

Cuestiones relacionadas