Скинули мне очередную статью, где у программиста подгарает зад на тему минусов ООП https://medium.com/@cscalfani/goodbye-object-oriented-programming-a59cda4c0e53

При этом автор пишет про классы и C++ говоря о том что ООП плохо.

Что тут хорошего? Этот хотя бы осознал что чего-то в этом не так.

Что тут плохого? Он критикует ООП на примере классов и C++, хотя создатель ООП Ален Кей писал что ООП это не про C++ и классы 🙂

Заметили парадокс и противоречие?

99% программистов сегодня не понимают что такое ООП и какие виды бывают.

Но есть уже те, кто начинает понимать минусы класс-ориентированного программирования.

4 типа ООП

Что такое класс-ориентированное программирование? Это подход к программированию, который большинство программистов принимают за ООП. Ошибочно.

Есть малый процент достаточно развитых программистов, которые уже понимают что бывает множество видов ООП:

Например выжимка из Википедии на тему ООП

Можно добавить, что сегодня идет хайп вокруг 4го типа ООП: микросервисы. Хотя его можно отнести к подвиду «компонентного программирования».

Потому можно выделить 4 типа ООП известных мне (не известных может быть больше):

  1. Компоненто-ориентированное программирование
  2. Прототипо-ориентированное программирование
  3. Класс-ориентированное программирование
  4. Микросервисная архитектура, ну или если хотите микросервисно-ориентированное программирование 🙂

Примеры?

Тут большинство программистов взбунтуется. Однако среди опытных WordPress-программистов есть те, кто уже встретил все эти типы.

В мире WordPress, если достаточно долго работать, то можно обнаружить и встретить все 4 подхода к программированию и увидеть как они уживаются в одной системе.

Компоненто-ориентированное программирование

В мире WP есть 2 базовых типа компонентов: плагины и темы. Плагинов уже более 50 000 штук, а тем более 10 000 штук. Когда мы ведем разработку, то просто пилим новые компоненты. Не трогая те что есть. Это возможно благодаря наследованию, инкапсуляции и позднему связыванию. Вот только в этом подходе все эти 3 столпа ООП выглядят не так как в классах и потому многим программистам не понятны. Тут это реализовано через событийную систему обмена сообщениями между объектами.

Прототипо-ориентированное программирование

Если почитать википедию, то там говорится что этот тип программирования заложен в основу некоторых языков, в том числе JavaScript. А JS есть в WP 🙂 Потому, те кто часто работает с фронтом, рано или поздно приходят к необходимости менять поведение объектов через обращение к прототипам. Это всего лишь еще одна разновидность ООП.

Класс-ориентированное программирование

Тут объяснять нет смысла. Это именно тот подход к программированию, который позволяет писать нам классы и создавать объекты через экземпляры классов. Именно этот подход большинство программистов считают за ООП. Кроме создателя ООП Алена Кея и еще 1% программистов, у которых хватает опыта и кругозора чтобы понять что ООП гораздо шире чем классы.

Здесь возникает 2 крайности пуковозгорания у программистов:

  1. одни страдают синдромом утенка, и защищают то что единственно выученный ими тип ООП является единственно правильным, а все остальное не ООП.
  2. вторые бросаются в другую крайность и начинают орать что ООП это плохо. объясняя на примерах через классы и C++ как автор статьи, с которой мы начали.

В мире WP классы применяются на ровне с функциями и компонентами. Там у разработчиков хватает опыта и интеллекта понять что классы это всего лишь еще один из множества подходов. У которого есть плюсы и минусы. Потому там где программирование класса адекватно — там программируют классы. Если адекватна функция — то пишут функцию. А если задачу надо решить через компонентный подход — пишут компонент. Логично? Похоже на то. Вот только почему то эта логичность доступна не всем программистам.

Микросервисная архитектура

Сейчас в моду входит еще один тип ООП. Микросервисы. Первым делом и чаще всего в WP выносят поиск на сторону микросервисов типа Algolia. Но это лишь один пример. В реальности когда имеем дело с большими системами, то возникает много задач, которые эффективно решать микросервисами.

У него есть все признаки ООП:

  1. разбиение функционала на объекты (домены, сервисы, компоненты, классы …)
  2. обмен сообщениями между объектами
  3. наследование: позднее связывание функционала, возможность добавлять функционал после того как функционал базового объекта не подлежит изменению
  4. полиморфизм и инкапсуляция — само собой. только определяется, формулируется и работает оно иначе чем в классах.

Даже есть хуки. Если в мире WordPress есть хуки-фильтры и хуки-экшены, то тут есть веб-хуки. Суть их та же самая. Обеспечить обмен сообщениями между объектами (компонентами, веб-приложениями, доменами …).

Выводы

Не потому ли WordPress стал №1 на своем рынке, что сумел осознать и адекватно применить все типы ООП?

Большинство проблем которые сегодня приходится встречать в программирование это слепой фанатизм программистов от класс-ориентированного программирования, которое они называют ООП.

Классы это не плохо и не хорошо. Это инструмент. Если уметь его применять там где он нужен и не применять там где он не нужен — все хорошо. Но для этого нужно иметь широкий кругозор, знать, понимать и уметь применять разные подходы к программированию.

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

Суют классы где надо и где не надо. Вот тут и возникает куча проблем…