Ответ
Зацепление (Coupling) и связность (Cohesion) — это фундаментальные принципы объектно-ориентированного дизайна, которые помогают оценить качество архитектуры.
1. Зацепление (Coupling)
Зацепление — это степень взаимозависимости между программными модулями. Хорошая архитектура стремится к низкому зацеплению (Low Coupling).
- Высокое зацепление (плохо): Изменение в одном модуле требует множества изменений в других. Модули тесно "склеены" друг с другом, их сложно тестировать и переиспользовать по отдельности.
- Низкое зацепление (хорошо): Модули независимы и взаимодействуют через стабильные, четко определенные интерфейсы. Изменение внутренней реализации одного модуля не затрагивает другие.
2. Связность (Cohesion)
Связность — это мера того, насколько сфокусирован модуль на выполнении одной, четко определенной задачи. Цель — высокая связность (High Cohesion).
- Низкая связность (плохо): Модуль выполняет множество несвязанных между собой задач (например, класс, который работает с пользователями, отправляет email и генерирует отчеты).
- Высокая связность (хорошо): Все элементы модуля (методы, свойства) служат общей, единой цели. Такой модуль проще понять и поддерживать.
Пример:
# ПЛОХО: Низкая связность (класс делает слишком много)
# и высокое зацепление (напрямую использует SMTP_Client)
class ReportManager:
def get_user_data(self, user_id):
# ... логика получения данных из БД
pass
def generate_pdf_report(self, data):
# ... логика создания PDF
pass
def send_report_by_email(self, report, email):
# ... логика отправки через конкретный SMTP_Client
pass
# ХОРОШО: Высокая связность и низкое зацепление
class UserRepository:
def get_by_id(self, user_id): # Только работа с пользователями
pass
class ReportService:
def generate(self, data): # Только генерация отчетов
pass
class EmailNotifier:
def send(self, recipient, content): # Только отправка уведомлений
pass
Ключевая идея: Хороший дизайн ПО подразумевает создание независимых, сфокусированных модулей, которые слабо связаны друг с другом. Low Coupling, High Cohesion.