Что означают принципы SOLID?

«Что означают принципы SOLID?» — вопрос из категории ООП, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

SOLID — это пять ключевых принципов проектирования в объектно-ориентированном программировании, направленных на создание поддерживаемого и расширяемого кода.

  1. S (Single Responsibility) – Класс должен иметь одну и только одну причину для изменения (одну ответственность).
  2. O (Open/Closed) – Классы должны быть открыты для расширения, но закрыты для модификации.
  3. L (Liskov Substitution) – Объекты в программе должны быть заменяемыми на экземпляры их подтипов без изменения корректности программы.
  4. I (Interface Segregation) – Много специализированных интерфейсов лучше, чем один универсальный.
  5. D (Dependency Inversion) – Зависимости должны строиться на абстракциях (интерфейсах), а не на конкретных классах.

Пример нарушения и соблюдения SRP:

// Нарушение: класс управляет и данными пользователя, и рассылкой.
class User {
    void saveToDatabase() { /* ... */ }
    void sendEmail(String content) { /* ... */ }
}

// Соблюдение: ответственности разделены.
class UserRepository {
    void save(User user) { /* ... */ }
}
class EmailService {
    void sendEmail(User user, String content) { /* ... */ }
}

Следование этим принципам снижает связность кода и повышает его тестируемость.