Para las personas familiarizadas con la Programación Orientada a Objetos y los patrones de diseño GRASP (General Responsibility Assignment Software Patterns), una clase está altamente acoplada si tiene muchas asociaciones con otras clases, la principal consecuencia es la poca mantenibilidad que le da al código, pues modificar una clase involucra también realizar cambios en muchas otras.
Ahora, a modo más general y hablando no en términos de clases sino de aplicaciones, el contexto de acoplamiento cambia, pues empieza a tomar importancia cuando es necesario usar mecanismos de integración para lograr interoperabilidad entre aplicaciones. Se habla de distintas dimensiones que permiten medir este acoplamiento, a continuación algunas de estas:
Ubicación: Una aplicación no debe tener datos “quemados” en su código fuente como la dirección física o IP de donde residen otras aplicaciones con las cuales se desea establecer una comunicación. Esta mala práctica o antipatrón de diseño se conoce como Hard code.
Número de receptores: Una aplicación se considera altamente acoplada si tiene un orden explicito de llamados a otras aplicaciones. Esta tarea de controlar los mensajes entre aplicaciones la debe realizar una capa superior, por ejemplo, mediante orquestación de servicios web.
Disponibilidad de los sistemas: Una aplicación no debe depender de la disponibilidad de otras aplicaciones para funcionar, si necesita enviar un mensaje, se debe contar con un mecanismo de buffering en caso de que la aplicación destino no se encuentre disponible, y entregárselo una vez cambie de estado.
Tiempo de respuesta: cuando una aplicación hace llamados a otras aplicaciones, la decisión sobre el límite de tiempo de espera para recibir una respuesta debería considerar distintos factores como los canales de comunicación o la carga sobre otros sistemas.
Referencias:
http://wiki.sdn.sap.com/wiki/display/BBA/Loose+Coupling+Through+Web+Services
http://es.wikipedia.org/wiki/Hard_code
http://www.infoq.com/articles/tilkov-10-soa-principles