ООП фокусируется на объектах, их состоянии и поведении. Функциональное программирование — на функциях и преобразовании данных.
Основные отличия:
- Состояние: В ООП объекты имеют изменяемое состояние. В ФП функции, как правило, не имеют изменяемого состояния и работают с неизменяемыми данными (иммутабельность).
- Побочные эффекты: В ООП методы могут иметь побочные эффекты (изменять состояние объекта). В ФП функции стремятся быть чистыми (не иметь побочных эффектов, для одинаковых входных данных возвращать одинаковый результат).
- Парадигма: ООП основано на концепциях классов, объектов, наследования, полиморфизма, инкапсуляции. ФП основано на функциях как первоклассных сущностях, лямбда-исчислении, рекурсии, иммутабельности.
- Структура кода: В ООП код организуется вокруг объектов. В ФП код организуется вокруг функций, которые преобразуют данные.
- 并发 (Concurrency): ФП обычно упрощает параллельное выполнение из-за отсутствия изменяемого состояния и побочных эффектов. В ООП нужно тщательно управлять состоянием при параллелизме.
Пример (упрощенный):
ООП:
java
ФП:
java
В реальных системах часто используются элементы обеих парадигм.