Связность (coupling) - это взаимная зависимость реализации классов между собой, то есть индикатор количества изменений, которые нужно внести в классы при изменении одного класса.
Слабая связность означает, что изменения, вносимые в один класс повлекут за собой небольшие изменения в другие классы, то есть упростит рефакторинг кода, при необходимости.
Самый простой пример уменьшения связности кода - это не использовать для классов открытые (public) поля, вместо чего следует использовать модификаторы доступа - геттеры и сеттеры. Таким образом, при изменении названия поля внутри класса не понадобится переписывать код где-либо еще.
Все придуманные шаблоны проектирования (design patterns) придуманы именно для того, чтобы снижать связность кода.
Определяется по сложности (количеству необходимых изменений) которые возникают при расширении.