Ответ
Зацепление (coupling) — это мера взаимозависимости между модулями, классами или компонентами системы. Высокое зацепление означает сильные связи, что делает код хрупким, сложным для понимания, тестирования и изменения. Низкое зацепление — цель хорошего проектирования.
Типы зацепления (от сильного к слабому) с примерами на C++:
-
Содержательное (Content Coupling): Один модуль напрямую изменяет внутренние данные другого (нарушение инкапсуляции).
// ПЛОХО: Класс A лезет в приватные поля класса B. class B { private: int secret; }; class A { void hack(B& b) { b.secret = 42; } }; // Нарушение! -
Общее (Common Coupling): Модули используют общие глобальные данные.
// ПЛОХО: Глобальная переменная как канал связи. extern int globalState; void module1() { globalState = 1; } void module2() { if (globalState == 1) { /*...*/ } } -
Управляющее (Control Coupling): Один модуль передает другому флаг, управляющий его логикой.
// НЕИДЕАЛЬНО: Функция делает разную работу в зависимости от флага. void processData(Data& data, bool shouldNormalize); -
По данным (Data Coupling): Модули обмениваются только необходимыми данными через параметры. Это цель.
// ХОРОШО: Четкий интерфейс, минимальная зависимость. double calculateTax(const Order& order); // Принимает только нужные данные.
Принцип: Стремитесь к слабому зацеплению и сильной связности (high cohesion), когда элементы внутри модуля тесно связаны общей ответственностью.