Что означает буква I в принципах SOLID?

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

Ответ

I означает Interface Segregation Principle (ISP)Принцип разделения интерфейсов.

Формулировка: Клиенты не должны зависеть от методов интерфейса, которые они не используют. Вместо одного «толстого» интерфейса лучше создать несколько небольших, специфичных.

Проблема — нарушение ISP:

// «Толстый» интерфейс заставляет класс Robot реализовывать ненужный метод.
protocol Worker {
    func work()
    func eat()
}

class Human: Worker {
    func work() { print("Человек работает") }
    func eat() { print("Человек ест") }
}

class Robot: Worker {
    func work() { print("Робот работает") }
    func eat() { /* Пустая или выброшенная ошибка — нарушение принципа! */ }
}

Решение — следование ISP:

// Интерфейсы разделены по ответственности.
protocol Workable {
    func work()
}

protocol Eatable {
    func eat()
}

class Human: Workable, Eatable { ... } // Реализует оба
class Robot: Workable { ... }          // Реализует только нужное

Преимущества:

  • Уменьшает связность (coupling) между классами.
  • Избавляет классы от пустых или заглушечных реализаций.
  • Делает систему более гибкой и устойчивой к изменениям.