Es la dependencia que tiene un objeto de otro para realizar una determinada tarea, esta dependencia puede ser voluntaria (que deseemos que exista) o involuntaria (sin querer, generamos un acoplamiento que nos puede traer mas de un dolor de cabeza).
Siempre hay que tratar de mantener un buen nivel de acoplamiento, y que este no dificulte el mantenimiento o modificación del código.
Veamos un ejemplo.
Acoplamiento involuntario: Generalmente pasa cuando estamos desarrollado la interfaz grafica, ver esto: imaginemos (por que no tengo el capturador de pantallas ni el Fireworks) un formulario/ventana y en el hay 4 rabiobuttons y un botón. Si la accione a realizar depende del activación de uno de las radiobutton y luego apretar aceptar.
Es muy común ver que el programador escribe el código haciendo una llamada la propiedad o método que verifica el estado del radiobutton cada uno con su if.
Código del botón
If radiobutton_1.checked=true then
accion_1
End if
If radiobutton_2.checked=true then
accion_2
end if
If radiobutton_3.checked=true then
accion_3
end if
If radiobutton_4.checked=true then
accion_4
end if
Si ahora los radiobutton pasan a ser una lista desplegable, el alto acoplamiento entre las clases visuales, genera que la actualización o mantenimiento del código sea muy engorroso, para salvar este “error” de diseño se utiliza una variable "visible" por los objetos. La cual será seteada por algún evento del control o clase interactivo y leída por el control (botón) que ejecuta la acción.
Los radiobuttons quedarían así:
Evento clicked (PB)
If checked=true then
Variable_visible_por_todas_las_clase=1
End if
Y el botón tendrá el siguiente código
Choose case Variable_visible_por_todas_las_clase
Case 1
Accion()
Case 2
Accion()
End choose
Así logramos un código prolijo, entendible y manejable. Es decir bien diseñado