No necesariamente tiene que elegir entre los dos paradigmas. Puede escribir software con una arquitectura OO utilizando muchos conceptos funcionales. FP y OOP son de naturaleza ortogonal .
Tomemos por ejemplo C #. Se podría decir que es principalmente OOP, pero hay muchos conceptos y construcciones de FP. Si considera Linq , las construcciones más importantes que permiten que Linq exista son de naturaleza funcional: expresiones lambda .
Otro ejemplo, F #. Se podría decir que es principalmente FP, pero hay muchos conceptos y construcciones de OOP disponibles. Puede definir clases, clases abstractas, interfaces, lidiar con la herencia. Incluso puede usar la mutabilidad cuando aclara su código o cuando aumenta drásticamente el rendimiento.
Muchos lenguajes modernos son multi-paradigmáticos.
Lecturas recomendadas
Como estoy en el mismo barco (antecedentes de OOP, aprendiendo FP), te sugiero algunas lecturas que realmente aprecio: