Ответ
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) между классами.
- Избавляет классы от пустых или заглушечных реализаций.
- Делает систему более гибкой и устойчивой к изменениям.