FP и OO ортогональны?

FP и OO ортогональны?
FP и OO ортогональны? - aeroshutterspeed @ Unsplash

Термин "ортогональный" пришел из математики, где у него есть синоним: "перпендикулярный". В данном контексте его можно понимать как "две вещи не имеют ничего общего друг с другом".

Когда люди сравнивают FP и OO, они часто путают две отдельные оси.

С одной стороны, у вас есть функциональное программирование против императивного программирования. Джонас дает хорошее сравнение этих двух видов программирования. В одном предложении это звучит так: "поток данных против потока управления".

Другая ось - это абстракция данных. Такие языки, как Haskell, используют абстрактные типы данных, чтобы, ну, абстрагировать данные. Smalltalk использует объекты, которые объединяют данные и операции над ними в единое целое. Уильям Кук объясняет лучше, чем я, в своей статье On Understanding Data Abstraction, Revisited .

Совершенно понятно, что большинство людей считают FP и OO противоположностями: большинство OO-языков императивны, поэтому если сравнивать, скажем, Haskell и Java, то получится поток данных + ADT против потока управления + объект. Но есть и другие возможности! Матиас Феллейзен объясняет, как счастливо поженить FP и OO в своем докладе Functional Objects.

Прикрепляю к посту несколько видео по теме:

Прикрепленное видео 1 - Web 9

Прикрепленное видео 2 - OOP v̶s̶ and FP by Mario Fusco

Прикрепленное видео 3 - From object oriented to functional and back by Mario Fusco at JBCNConf'19


LetsCodeIt, 23 мая 2023 г., 01:20