Ответ
Связность (Cohesion) — это метрика в программной инженерии, которая показывает, насколько сфокусированы и логически связаны между собой задачи внутри одного модуля (например, класса или функции).
Высокая связность (High Cohesion) — это идеал, к которому стремятся в хорошем дизайне. Это означает, что модуль выполняет одну, четко определенную задачу.
Низкая связность (Low Cohesion) — признак плохого дизайна. Модуль выполняет множество несвязанных между собой задач, что делает его сложным для понимания, поддержки и тестирования.
Преимущества высокой связности:
- Читаемость: Легко понять, за что отвечает модуль.
- Поддерживаемость: Изменения в одной функциональности локализованы в одном месте.
- Повторное использование: Сфокусированные модули легче переиспользовать в других частях системы.
- Тестируемость: Проще писать unit-тесты для модуля с одной зоной ответственности.
Пример высокой связности: Класс отвечает только за аутентификацию пользователя.
# ВЫСОКАЯ СВЯЗНОСТЬ: Класс выполняет одну четкую задачу
class UserAuthenticator:
def __init__(self, db_connection):
self.db = db_connection
def authenticate(self, username, password):
# Логика поиска пользователя и проверки пароля
print(f"Аутентификация пользователя {username}...")
return True
Пример низкой связности: Класс смешивает аутентификацию, отправку email и логирование — три разные задачи.
# НИЗКАЯ СВЯЗНОСТЬ: Класс смешивает разные обязанности
class GodObjectManager:
def authenticate_user(self, username, password):
# ...логика аутентификации
pass
def send_notification_email(self, user_email, message):
# ...логика отправки email
pass
def log_error_to_file(self, error_message):
# ...логика записи в файл
pass
Связность часто рассматривают в паре с зацеплением (coupling). Цель хорошей архитектуры: высокая связность внутри модулей и низкое зацепление между ними.