Что такое low coupling
Что проверяют
Владеете ли вы терминологией проектирования и отличаете ли связанность между модулями от связности внутри модуля. За вопросом обычно следует практическое продолжение: покажите на своём коде, где зависимость лишняя и как вы её убрали.
Как отвечать
Сначала разведите два понятия, их постоянно смешивают. Связанность (coupling) это то, насколько сильно один модуль зависит от устройства другого, и её хотят слабой. Связность (cohesion) это то, насколько элементы внутри модуля решают одну задачу, и её хотят высокой. Оба принципа входят в набор GRASP и работают в паре: разрезав класс ради слабой связанности, легко получить набор огрызков с низкой связностью.
Дальше по существу: связанность бывает разной силы. Обмен через параметры метода слабая форма, зависимость от конкретного класса сильнее, зависимость от его внутренних полей или от глобального изменяемого состояния сильнее всего. В Java слабую связанность дают интерфейс на границе модуля, внедрение зависимостей вместо new внутри класса, события вместо прямых вызовов, ограничение видимости пакетом или модулем.
Проверка простая: сколько файлов придётся открыть, чтобы поменять одно решение, и сколько классов сломает переименование поля.
Где спотыкаются
Понимают слабую связанность как «на каждый класс по интерфейсу». Интерфейс с единственной реализацией, которая меняется вместе с ним, ничего не развязывает, а добавляет файл и лишний переход при чтении.
Прячут зависимость вместо того, чтобы её убрать. Контейнер внедрения и статический локатор не уменьшают связанность, а делают её невидимой: компилятор про неё больше не знает, и ломается это уже на старте приложения.
Меряют связанность числом импортов. Важнее направление и устойчивость: зависеть от стабильной абстракции нормально, а циклическая зависимость двух пакетов плоха даже при паре импортов.