Что такое сильная связность (high cohesion) в программировании?

«Что такое сильная связность (high cohesion) в программировании?» — вопрос из категории Архитектура, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Сильная связность (High Cohesion) — это принцип проектирования, при котором элементы внутри модуля (класса, функции) тесно связаны и выполняют одну логическую задачу. Это ключевой показатель хорошей архитектуры, противоположный слабой связности (Low Cohesion).

Почему это важно? Код с сильной связностью проще понимать, тестировать, поддерживать и повторно использовать, так как каждый модуль имеет четкую, единственную ответственность.

Пример слабой связности (плохая практика):

// Класс пытается делать слишком много несвязанных вещей
class UserManager {
    void saveUserToDatabase(User user) { /* ... */ }
    void sendWelcomeEmail(User user) { /* ... */ }
    void generateFinancialReport() { /* ... */ }
    void validateUserData(User user) { /* ... */ }
}

Пример сильной связности (хорошая практика):

// Каждый класс имеет одну четкую ответственность
class UserRepository {
    void save(User user) { /* ... */ }
    User findById(Long id) { /* ... */ }
}

class EmailService {
    void sendWelcomeEmail(User recipient) { /* ... */ }
}

class ReportGenerator {
    Report generateFinancialReport() { /* ... */ }
}

class UserValidator {
    boolean isValid(User user) { /* ... */ }
}

Ключевые преимущества сильной связности:

  • Упрощение тестирования: Модули можно тестировать изолированно.
  • Снижение связанности (Coupling): Изменения в одной части системы меньше влияют на другие.
  • Повышение читаемости: Легче понять назначение модуля.
  • Упрощение повторного использования: Модули с одной задачей проще применить в новом контексте.

Сильная связность часто достигается вместе с соблюдением принципа единственной ответственности (SRP).