Coupling

Dependencia en el código

We need a way to maintain necessary couplings, but reduce the strength of the couplings so that a change in a depended-upon class does not cause rippling changes or failures throughout the system

Coupling puede ser definido en términos de dependencias entre modulos en un sistema basado en Objetos. Dentro de este escenario módulo se refiere a una clase a un conjunto de clases agrupadas - paquetes.

Para ser más claros, una dependencia aparece cuando cierta funcionalidad en una clase es referida a otra clase, ya sea por un atributo, un argumento, herencia. Como pueden notar es totalmente necesario y lógico que existan tales dependencias, una clase que no se conecta a otra o que no resuelve procesos de otras clases, es una entidad sola y por tanto innecesaria; el problema surge cuando el nivel de dependencia es absurdamente exagerado o es implicito.

Supongamos que tenemos la clase A que depende de la clase B: cualquier cambio en A no afectará a B, sin embargo un cambio en B puede afectar de formas impredecibles a A (he ahi otra razón para confiar en los unit test).

Ahora bien, el ejemplo anterior incluye dos clases, imaginensé lo que puede suceder si A depende de B que a su vez depende de C que depende de D; un solo cambio en D puede desatar una cadena de bugs, algunos de ellos incluso no detectables

Recuerden la máxima:

High Cohesion and Low Coupling

Como se logra mantener una baja dependencia? con Interfaces, ya que en tal caso las clases dependen de estructuras abstractas que exponen unicamente el prototipo de la función y donde el proceso de solución queda alejado de la clase dependendiente.

Coupling is necessary, it makes our code useful, but it can also make it fragile. By seeking weaker couplings, we can reduce code breakage in our systems. As a result, we’ll spend less time tracking down weird problems and more time writing and polishing new features

Al igual que en el anterior artículo les aconsejo que lean el artículo original sobre este tema realizado por Jeff Langr, incluye detalles mucho más especificos y relevantes.

Hasta la proxima