java object coupling decoupling cohesion

java - Cohesión y desacoplamiento



object coupling (6)

Aquí están mis pensamientos sobre la cohesión. Imagina que hay un módulo. Dentro de ese módulo, tenemos algunas tareas. Cuando esas tareas están muy relacionadas entre sí, decimos que tiene una alta cohesión. Cuando esas tareas no están relacionadas, decimos que tiene baja cohesión. Mi mejor intento para explicar el desacoplamiento es que el desacoplamiento es el acto de eliminar el acoplamiento.

¡El acoplamiento bajo nos ayuda a obtener una alta cohesión! Recuerde que queremos que nuestro módulo tenga tareas relacionadas y una sola responsabilidad. Pero, ¿qué es el acoplamiento? El acoplamiento es el grado de dependencia de otros módulos para lograr nuestra responsabilidad única para ese módulo. Entonces, por un bajo acoplamiento, estamos diciendo que no dependemos demasiado de los módulos externos, por lo tanto, tenemos una gran cohesión.

Sin embargo, si tenemos muchas dependencias a módulos externos, tendríamos un alto acoplamiento y baja cohesión. ¿Consíguelo?

Otros pensadores y grupos más condecorados dicen:

La cohesión es el grado en que las tareas realizadas por un único módulo están funcionalmente relacionadas. "IEEE, 1983" La cohesión es el "pegamento" que mantiene unido un módulo. Se puede considerar como el tipo de asociación entre los elementos componentes de un módulo. En general, uno quiere el mayor nivel de cohesión posible ". Bergland, 1981

Se dice que un componente de software exhibe un alto grado de cohesión si los elementos en esa unidad exhiben un alto grado de relación funcional. Esto significa que cada elemento en la unidad de programa debe ser esencial para que esa unidad logre su propósito. Sommerville, 1989

¿Alguien puede decirme qué son Cohesión y Desacoplamiento? Encontré acoplamiento, pero no hay desacoplamiento en ninguna parte. Necesito aprender sus significados.

Cualquier ayuda será apreciada. Gracias por responder.


Cohesión - relacionado con el principio de que una clase / método debería ser responsable de una sola cosa, es decir, no hay métodos extraviados que no pertenecen a la encapsulación; un método solo hace una cosa. Cohesión alta / baja es el grado en que esto se cumple.

Acoplamiento: cuán interdependientes son las diferentes partes del sistema. por ejemplo, cómo y dónde hay dependencias. Si dos clases hacen llamadas a métodos entre sí, entonces están estrechamente relacionadas, ya que cambiar una significaría tener que cambiar la otra. El desacoplamiento es el proceso de hacer que algo que estaba estrechamente acoplado sea menos o nada en absoluto.

Los sistemas flexibles tienen alta cohesión y acoplamiento suelto.


Ese artículo de Aaron es muy bueno para entender, también recomiendo que leas las publicaciones de Manning en el libro Spring in Action , dan muy buenos ejemplos de cómo la primavera resuelve ese problema definitivamente mejorará tu comprensión de esto.

EDITAR:

Me encontré con esto en este gran libro llamado Growing object oriented software guiado por pruebas:

Acoplamiento :

Los elementos están acoplados si un cambio en uno fuerza un cambio en el otro. Por ejemplo, si dos clases heredan de un padre común, entonces un cambio en una clase podría requerir un cambio en la otra. Piense en un sistema de audio combinado: está estrechamente acoplado porque si queremos cambiar de la radio analógica a la digital, debemos reconstruir todo el sistema. Si montamos un sistema desde separadores, tendría un bajo acoplamiento y podríamos cambiar el receptor. Las características acopladas "sueltas" (es decir, aquellas con bajo acoplamiento) son más fáciles de mantener.

Cohesión:

La cohesión de un elemento es una medida de si sus responsabilidades forman una unidad significativa. Por ejemplo, una clase que analiza tanto las fechas como las URL no es coherente, porque son conceptos no relacionados. Piense en una máquina que lava tanto la ropa como los platos: es poco probable que les vaya bien a ambos.2 En el otro extremo, una clase que solo analiza la puntuación en una URL es poco probable que sea coherente, porque no representa un concepto completo. Para hacer algo, el programador tendrá que buscar otros analizadores para protocolo, host, recursos, etc. Las características con una coherencia "alta" son más fáciles de mantener.


Para el acoplamiento, este artículo de Wikipedia debería responder todas sus preguntas. Este artículo trata sobre la cohesión.

"Desacoplamiento" es solo otro nombre para "acoplamiento pequeño / bajo".

Entonces estos términos responden a estas preguntas:

  • ¿Cuánto depende cada parte de su proyecto en otra parte?
  • Si desea utilizar solo una parte de su proyecto (como resolver un problema específico), ¿cuánto necesita saber sobre el resto del proyecto?
  • ¿Cada parte de su proyecto se enfoca en una única solución a un problema específico o las soluciones "se filtran" a otras partes?

el desacoplamiento permite la separación de la interacción de objetos de las clases y la herencia en distintas capas de abstracción utilizadas para separar polimórficamente la encapsulación, que es la práctica de usar código reutilizable para evitar que los módulos de códigos discretos interactúen entre sí.


Cohesión: la cohesión es el principio de OO más estrechamente relacionado con asegurarse de que una clase se diseñe con un propósito único y bien enfocado.

Acoplamiento: el acoplamiento se refiere al grado en que una clase conoce o usa miembros de otra clase.