Мое видение. Возможно оно неверно или ущербно частями, но надеюсь оно будет хотя бы немного полезно.
Итак, в начале было не слово, вначале была проблема, даже ПроблемЫ. Именно это многие не понимают, когда задаются вопросом, зачем нужна какая то сложная вещь. Вот и ооп появилось как изящное решение проблем. В программировании масса задач- сокрытие данных, дополнительное поведения, избавление от дублирования кода, контроль данных и т.п. Можно ли решить это, с помощью ФП (функциональное программирование)- мой ответ да. НО, тут большое но, сможете ли вы это сделать? ООП диктует правила – ДЕЛАЙ приватные функции, НАСЛЕДУЙ, ЭТО **х УБЕРИ, это не трогай, НЕ ТРОГАЙ! Раздели по функциям и НЕ МЕШАЙ ВСЁ В ОДНО. Что даёт нам ФП- свободу действий. У нас нет ни правил ни ограничений. Когда ярые защитники ФП пишут о свободе, я всегда говорю- «вы эгоисты! Вы профи и можете спроектировать системы, а как быть нубам?» Ведь пока вы человеку прямо не запретите чтото делать, он будет это делать. В ФП это сложно сделать- система запретов только на словах. А ООП- это уже намного легче. К примеру – вывод в шаблон мы хотим сделать из класса, который предназначен только для операциями над БД и данными. Там просто не будет методов вывода в шаблон. Конечно, если система позволяет, юзер всегда сможет сделать код core::getPlugin(‘template’)->parse() но это уже сложнее, скорее всего так не будут делать 70% людей.
Сложность и недостатки ооп.
1.Сложность. Вы должны знать ООП и конкретную архитектуру так же как и язык программирования. Не знание сеет костыли и начинает казаться что ООП зло.
2.+ задача. Теперь нам не надо решать 1. задачу – как сделать сайт. Нам надо решить 2- как сделать архитектуру на ООП и 2 – решить задачу. ООП достаточно сильно зависит от архитектуры.
3.ООП ради ООП. Многие не хотят решать задачи из ТЗ. Они хотят сделать всё правильно и начинают городить огород. Я это называю ОООП – Очень ООП.
И ещё есть неприятная особенность – это правильность. Да, то, что так любят математики и теоретики- чёткая детерминированность. Это как с xml форматом- всё чётко и структурированно, даже слишком. И из за этого теряется адекватность – Представьте «Правила пользования туалетом: 1. Убедитесь что в кабинке вы один. Для этого сделайте 2 оборота вокруг оси на 180-360 градусов. Если у вас закружилась голова, постойте и передохните и сделай плавный поворот. 2. Убедитесь, что унитаз находится перед вами…»
4.Многие уже не могут просто смотреть на вещи. Но к их подходу нельзя придраться- он аргументирован.
5.Ну и наконец- мышление паттернами. Т.е. под разные задачи мы применяем шаблоны которые не всегда и нормально подходят, но изменить им мы не можем.
Достоинства
1.Чёткий подход как обходить и не наделать костылей, который прописан не просто на словах.
2.Изящные решения, которые не надо писать с 0.
Примеры… Ну, часто люди говорят что нужно написать Большую систему чтобы понять зачем нужен ООП. Я тоже с ходу не соображу пример, коорый сразу бил по ФП. Ну, разве что, из недавно увиденного:
Есть 2 модуля book, comments. Нужно сделать в обоих вывод количества. Всё. В ООП
$book->getAllCount(); $comments-> getAllCount() ;
Для фп
book_getAllCount(); comments_getAllCount() ;
что не говорите, но уродски.