Скинули мне очередную статью, где у программиста подгарает зад на тему минусов ООП https://medium.com/@cscalfani/goodbye-object-oriented-programming-a59cda4c0e53
При этом автор пишет про классы и C++ говоря о том что ООП плохо.
Что тут хорошего? Этот хотя бы осознал что чего-то в этом не так.
Что тут плохого? Он критикует ООП на примере классов и C++, хотя создатель ООП Ален Кей писал что ООП это не про C++ и классы ?
Заметили парадокс и противоречие?
99% программистов сегодня не понимают что такое ООП и какие виды бывают.
Но есть уже те, кто начинает понимать минусы класс-ориентированного программирования.
4 типа ООП
Что такое класс-ориентированное программирование? Это подход к программированию, который большинство программистов принимают за ООП. Ошибочно.
Есть малый процент достаточно развитых программистов, которые уже понимают что бывает множество видов ООП:
Можно добавить, что сегодня идет хайп вокруг 4го типа ООП: микросервисы. Хотя его можно отнести к подвиду «компонентного программирования».
Потому можно выделить 4 типа ООП известных мне (не известных может быть больше):
- Компоненто-ориентированное программирование
- Прототипо-ориентированное программирование
- Класс-ориентированное программирование
- Микросервисная архитектура, ну или если хотите микросервисно-ориентированное программирование ?
Примеры?
Тут большинство программистов взбунтуется. Однако среди опытных WordPress-программистов есть те, кто уже встретил все эти типы.
В мире WordPress, если достаточно долго работать, то можно обнаружить и встретить все 4 подхода к программированию и увидеть как они уживаются в одной системе.
Компоненто-ориентированное программирование
В мире WP есть 2 базовых типа компонентов: плагины и темы. Плагинов уже более 50 000 штук, а тем более 10 000 штук. Когда мы ведем разработку, то просто пилим новые компоненты. Не трогая те что есть. Это возможно благодаря наследованию, инкапсуляции и позднему связыванию. Вот только в этом подходе все эти 3 столпа ООП выглядят не так как в классах и потому многим программистам не понятны. Тут это реализовано через событийную систему обмена сообщениями между объектами.
Прототипо-ориентированное программирование
Если почитать википедию, то там говорится что этот тип программирования заложен в основу некоторых языков, в том числе JavaScript. А JS есть в WP ? Потому, те кто часто работает с фронтом, рано или поздно приходят к необходимости менять поведение объектов через обращение к прототипам. Это всего лишь еще одна разновидность ООП.
Класс-ориентированное программирование
Тут объяснять нет смысла. Это именно тот подход к программированию, который позволяет писать нам классы и создавать объекты через экземпляры классов. Именно этот подход большинство программистов считают за ООП. Кроме создателя ООП Алена Кея и еще 1% программистов, у которых хватает опыта и кругозора чтобы понять что ООП гораздо шире чем классы.
Здесь возникает 2 крайности пуковозгорания у программистов:
- одни страдают синдромом утенка, и защищают то что единственно выученный ими тип ООП является единственно правильным, а все остальное не ООП.
- вторые бросаются в другую крайность и начинают орать что ООП это плохо. объясняя на примерах через классы и C++ как автор статьи, с которой мы начали.
В мире WP классы применяются на ровне с функциями и компонентами. Там у разработчиков хватает опыта и интеллекта понять что классы это всего лишь еще один из множества подходов. У которого есть плюсы и минусы. Потому там где программирование класса адекватно — там программируют классы. Если адекватна функция — то пишут функцию. А если задачу надо решить через компонентный подход — пишут компонент. Логично? Похоже на то. Вот только почему то эта логичность доступна не всем программистам.
Микросервисная архитектура
Сейчас в моду входит еще один тип ООП. Микросервисы. Первым делом и чаще всего в WP выносят поиск на сторону микросервисов типа Algolia. Но это лишь один пример. В реальности когда имеем дело с большими системами, то возникает много задач, которые эффективно решать микросервисами.
У него есть все признаки ООП:
- разбиение функционала на объекты (домены, сервисы, компоненты, классы …)
- обмен сообщениями между объектами
- наследование: позднее связывание функционала, возможность добавлять функционал после того как функционал базового объекта не подлежит изменению
- полиморфизм и инкапсуляция — само собой. только определяется, формулируется и работает оно иначе чем в классах.
Даже есть хуки. Если в мире WordPress есть хуки-фильтры и хуки-экшены, то тут есть веб-хуки. Суть их та же самая. Обеспечить обмен сообщениями между объектами (компонентами, веб-приложениями, доменами …).
Выводы
Не потому ли WordPress стал №1 на своем рынке, что сумел осознать и адекватно применить все типы ООП?
Большинство проблем которые сегодня приходится встречать в программирование это слепой фанатизм программистов от класс-ориентированного программирования, которое они называют ООП.
Классы это не плохо и не хорошо. Это инструмент. Если уметь его применять там где он нужен и не применять там где он не нужен — все хорошо. Но для этого нужно иметь широкий кругозор, знать, понимать и уметь применять разные подходы к программированию.
Но большинство программистов осилило только классы. И когда у тебя молоток, то все вокруг кажется гвоздями.
Суют классы где надо и где не надо. Вот тут и возникает куча проблем…
Источник: https://wpcraft.ru/2018/4-tipa-oop/