ООП vs ФП

в 12:43, , рубрики: Песочница, метки: , , , ,

Решил опубликовать эту небольшую статью, содержащую на данном этапе скорее абстрактную идею. Несложно представить, как ее возможно использовать на практике и впоследствии, в зависимости от реакции сообщества, имею желание дополнить ее более конкретными примерами, взятыми из собственных наработок.

Пришла в голову мысль.

Из личного опыта. В универе делали ставку больше на функциональное программирование, но очень модным уже считалось ООП. И очень хотелось научиться ООП в то время, когда учили ФП. И только теперь я осознал, что функциональная парадигма программирования не плохо. ООП так же очень не плохо.

Теперь придерживаюсь идиомы, которую я сформировал за последнее время. Если требуется логика передачи данных и сообщений между различными блоками ядра системы (и всего того, что взаимодействует грубо говоря с машиной, не важно сервером или клиентом) следует использовать функциональный подход, но там, где требуется интерактивность логики с человеком, лучше использовать ООП, говоря с человеком на удобном ему языке пространства объектов и ассоциаций (отношений между этими объектами).

Для web прекрасно подходит Java машина. Там, где требуется интерактивность системы с пользователем, можно использовать Java (частично Groovy и Scala. Groovy особенно интересен тем, что на идейном уровне близок к JS), а где требуется общение между логикой и бд, юзаем Scala и Clojure. Все они прекрасно совместимы с Java и во многих можно писать просто Java код в общих случаях, что можно красиво стыковать через интерфейсы.
К сожалению многим больше знакома идея ООП потому что оно ближе на уровне восприятия к пониманию этого мира человеком, но программисту требуется понимать преимущества разных подходов, в том числе и функционального программирования.

Разгребая горы неприглядного кода, написанного на Java, я пришел к выводу, что некоторые люди пишут так или иначе в стиле ФП, но в Java ФП выглядит довольно громоздко и ненаглядно. Если уж и приходится разрабатывать часть системы на низком уровне, не лучше ли подходит для этого то, что для этого и создано? Эти функциональные блоки легко можно связать с другими блоками (неважно, функциональными или блоками логики в стиле ООП) через интерфейсы.

В общем-то не претендую на гениальность. Думаю, это более-менее очевидные размышления. Однако, мне они помогли. Возможно, помогут кому-то еще.

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js