Как стать автором
Обновить

ООП не мертво. Вы просто пользуетесь им как молотком по клавиатуре

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров34K

После каждой новой статьи с заголовком «ООП — это обман» хочется напомнить: ООП — это не набор шаблонов из книжек, а инженерный подход. Если проект страдает от наследования и DI, возможно, проблема не в ООП. А в том, как вы его применяете.


«Никто не знает, что такое ООП»

Это правда. Все трактуют по-разному. Даже сам Алан Кэй, человек, который придумал термин, не слишком рад тому, во что это всё превратилось:

> “OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things.”
> — Alan Kay

Но ООП — это не набор догм. Это способ сказать: «У этой штуки есть состояние и поведение, и я хочу, чтобы они шли вместе». Не всегда нужно, но часто помогает.


«Все примеры из книжек — это кошки и собаки»

Ну конечно. Никто не станет показывать на собеседовании паттерн CQRS с Event Sourcing. Показывают Animal, потому что это просто.

Это не руководство к действию. Это иллюстрация. Как for (int i = 0; i < 10; i++) — вы же не думаете, что весь код должен быть таким?


«DTO туда-сюда, а методы всё равно чистые»

Да, и это отлично. Инкапсуляция — это не магия. Это просто «держи данные под контролем».

Не надо пихать поведение в каждый класс. Иногда класс — просто контейнер. Но если у объекта есть логика, которая зависит от его состояния — вот тогда ООП работает на вас.


«Паттерны GoF — это костыли»

Так и есть. Но это хорошие костыли. Проверенные временем.

> “The point of OOP is to manage dependencies, not to model cats and dogs.”
> — Robert C. Martin

Да, Strategy можно заменить на Func. Но стоит ли выбрасывать идею только потому, что синтаксис стал проще?


«Интерфейсы плодятся, DI магичен, всё сложно»

Сложно — когда делаете «по учебнику», не понимая зачем. Интерфейс нужен, чтобы не зависеть от реализации. DI — чтобы не было new в каждом методе.

> “SRP doesn't say you need tiny classes. It says a class should have one reason to change.”
> — Robert C. Martin


«ООП не нужен: смотри на Linux»

Конечно, в ядре Linux не до полиморфизма. Это системный код, где важны предсказуемость и скорость. Но если вы пишете код, который поддерживают 10 человек и меняют годами — с интерфейсами, классами и тестами вам будет проще.

> “All successful software gets changed. And object-oriented design helps you manage that change.”
> — Grady Booch


Вместо вывода

ООП — не серебряная пуля. Но если вы режете код, а не играете им в дартс — он может сильно помочь. Не потому что модно, а потому что позволяет думать про поведение, не теряя структуру.

Инструмент хорош, когда его используют по назначению.

Теги:
Хабы:
+142
Комментарии254

Публикации

Работа

Ближайшие события