Зачем разделяют объекты в ООП?

«Зачем разделяют объекты в ООП?» — вопрос из категории ООП, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Разделение объектов в первую очередь связано с принципом разделения интерфейсов (ISP) из SOLID. Его цель — избегать создания "толстых" интерфейсов, которые вынуждают клиентов (классы) реализовывать методы, которые им не нужны.

Почему это важно:

  1. Уменьшает связность — классы зависят только от того, что им действительно нужно.
  2. Повышает поддерживаемость — изменения в одном интерфейсе затрагивают меньшее количество кода.
  3. Предотвращает загрязнение кода — исчезает необходимость в пустых реализациях методов (например, throw new NotImplementedException).

Пример на PHP:

// Проблема: "Толстый" интерфейс
interface WorkerInterface {
    public function code();
    public function test();
    public function deploy();
    public function cook(); // Не нужно программисту!
}

class Programmer implements WorkerInterface {
    public function code() { /* ... */ }
    public function test() { /* ... */ }
    public function deploy() { /* ... */ }
    public function cook() { // Вынужденная пустая реализация
        throw new RuntimeException('I cannot cook!');
    }
}
// Решение: Разделенные интерфейсы
interface CoderInterface {
    public function code();
}

interface TesterInterface {
    public function test();
}

interface DeploymentInterface {
    public function deploy();
}

interface ChefInterface {
    public function cook();
}

// Теперь класс реализует только нужные ему интерфейсы
class Programmer implements CoderInterface, TesterInterface {
    public function code() { /* ... */ }
    public function test() { /* ... */ }
}

class DevOpsEngineer implements CoderInterface, DeploymentInterface {
    public function code() { /* ... */ }
    public function deploy() { /* ... */ }
}

На практике это часто применяется при проектировании сервисов или модулей, чтобы они были сфокусированы на одной ответственности.