Вам не обязательно выбирать между двумя парадигмами. Вы можете написать программное обеспечение с ОО-архитектурой, используя множество функциональных концепций. ФП и ООП имеют ортогональный характер .
Взять к примеру C #. Можно сказать, что это в основном ООП, но есть много концепций и конструкций FP. Если вы рассматриваете Linq , наиболее важные конструкции, которые позволяют Linq существовать, функциональны по своей природе: лямбда-выражения .
Другой пример, F #. Можно сказать, что это в основном FP, но есть много концепций и конструкций ООП. Вы можете определять классы, абстрактные классы, интерфейсы, иметь дело с наследованием. Вы даже можете использовать изменчивость, когда это делает ваш код более понятным или когда это значительно повышает производительность.
Многие современные языки мультипарадигмы.
Рекомендуемые показания
Поскольку я нахожусь в одной лодке (фон ООП, изучаю FP), я бы посоветовал вам некоторые чтения, которые я действительно ценю: