Не обов’язково вибирати між двома парадигмами. Ви можете писати програмне забезпечення з архітектурою ОО, використовуючи багато функціональних понять. FP і OOP мають ортогональний характер .
Візьмемо для прикладу C #. Можна сказати, що це переважно OOP, але існує багато концепцій та конструкцій ПП. Якщо розглядати Linq , найважливіші конструкції, які дозволяють Linq існувати, мають функціональний характер: лямбда-вирази .
Інший приклад, F #. Можна сказати, що це здебільшого FP, але є багато концепцій та конструкцій OOP. Ви можете визначити класи, абстрактні класи, інтерфейси, мати справу зі спадщиною. Ви навіть можете користуватися мутабельністю, коли це робить ваш код більш чітким або коли він різко підвищує продуктивність.
Багато сучасних мов є багатопарадигмою.
Рекомендовані читання
Оскільки я перебуваю в одному човні (фон OOP, навчання FP), я б запропонував вам кілька читань, які я дуже оцінив: