El acoplamiento en la programaci贸n, y porque buscamos que sea d茅bil

Acoplamiento en programaci贸n

El acoplamiento en programaci贸n (denominado coupling en Ingl茅s) es un concepto que mide la dependencia entre dos m贸dulos distintos de software, como pueden ser por ejemplo las clases. El acoplamiento puede ser de dos tipos:

  • Acoplamiento d茅bil, que indica que no existe dependencia de un m贸dulo con otros. Esto deber铆a ser la meta de nuestro software.
  • Acoplamiento fuerte, que por lo contrario indica que un m贸dulo tiene dependencias internas con otros.

El t茅rmino acoplamiento est谩 muy relacionado con la cohesi贸n, ya que acoplamiento d茅bil suele ir ligado a cohesi贸n fuerte. En general lo que buscamos en nuestro c贸digo es que tenga acoplamiento d茅bil y cohesi贸n fuerte, es decir, que no tenga dependencias con otros m贸dulos y que las tareas que realiza est茅n relacionadas entre s铆. Un c贸digo as铆 es f谩cil de leer, de reusar, mantener y tiene que ser nuestra meta. N贸tese que se suele emplear alta y baja para designar fuerza y d茅bil respectivamente.

Si a煤n no te hemos convencido de porque buscamos c贸digo d茅bilmente acoplado, veamos lo que pasar铆a con un c贸digo fuertemente acoplado:

  • Debido a las dependencias con otros m贸dulo, un cambio en un modulo ajeno al nuestro podr铆a tener un "efecto mariposa" en nuestro c贸digo, a煤n sin haber modificado directamente nuestro m贸dulo.
  • Si un m贸dulo tiene dependencias con otros, reduce la reusabilidad, ya que para reusarlo deber铆amos copiar tambi茅n las dependencias.

Veamos un ejemplo usando clases y objetos en Python. Tenemos una Clase1 que define un atributo de clase x. Por otro lado la Clase2 basa el comportamiento del m茅todo mi_metodo() en el valor de x de la Clase1. En este ejemplo existe acoplamiento fuerte, ya que existe una dependencia con una variable de otro m贸dulo.

class Clase1:
    x = True
    pass

class Clase2:
    def mi_metodo(self, valor):
        if Clase1.x:
            self.valor = valor

mi_clase = Clase2()
mi_clase.mi_metodo("Hola")
mi_clase.valor

Puede parecer un ejemplo trivial, pero cuando el software se va complicando, no es nada raro acabar haciendo cosas de este tipo casi sin darnos cuenta. Hay veces que dependencias externas pueden estar justificadas, pero hay que estar muy seguro de lo que se hace.

Este tipo de dependencias tambi茅n puede hacer el c贸digo muy dif铆cil de depurar. Imaginemos que nuestro c贸digo de la Clase2 funciona perfectamente, pero de repente alguien hace un cambio en la Clase1. Un cambio tan sencillo como el siguiente.

Clase1.x = False

Este cambio estar铆a modificando el comportamiento de nuestra clase y nos preguntar铆amos 驴porqu茅 ha dejado de funcionar mi c贸digo si no he tocado nada? A veces atribuimos estos comportamientos a la magia o radiaci贸n c贸smica, pero simplemente tenemos c贸digo con acoplamiento fuerte.

Existen otros conceptos muy importantes y relacionados con la programaci贸n orientada a objetos. Aqu铆 te los dejamos:

¡Deja un comentario!

avatar
  Subscribe  
Notify of