На странице 839 второго издания Стив Макконнелл обсуждает все способы, с помощью которых программисты могут «преодолевать сложности» в больших программах. Его советы завершаются этим утверждением:
«Объектно-ориентированное программирование обеспечивает уровень абстракции, который применяется одновременно к алгоритмам и данным , своего рода абстракцию, которую не обеспечивала только функциональная декомпозиция».
В сочетании с его выводом о том, что «снижение сложности является, пожалуй, самым важным ключом к тому, чтобы быть эффективным программистом» (на той же странице), это кажется довольно сложной задачей для функционального программирования.
Дебаты между FP и OO часто устраиваются сторонниками FP по вопросам сложности, которые вытекают именно из задач параллелизма или распараллеливания. Но параллелизм - это, конечно, не единственный вид сложности, который нужно решать программистам. Возможно, сосредоточение внимания на уменьшении одного вида сложности значительно увеличивает его в других измерениях, так что во многих случаях выигрыш не стоит затрат.
Если бы мы сместили условия сравнения между FP и OO от конкретных вопросов, таких как параллелизм или повторное использование, к управлению глобальной сложностью, как бы выглядела эта дискуссия?
РЕДАКТИРОВАТЬ
Контраст, который я хотел подчеркнуть, заключается в том, что ОО, кажется, инкапсулирует и абстрагируется от сложности как данных, так и алгоритмов, тогда как функциональное программирование, кажется, поощряет, оставляя детали реализации структур данных более «открытыми» во всей программе.
Смотрите, например, Стюарт Халлоуэй (а Clojure FP поборник) здесь говорят , что «более-спецификация типов данных» является «негативным последствием идиоматического стиля ОО» и в пользу концептуализации в AddressBook как простой вектор или карты вместо богатого объекта OO с дополнительными (не векторными и не подобными карте) свойствами и методами. (Кроме того, сторонники OO и Domain-Driven Design могут сказать, что раскрытие адресной книги в виде вектора или карты приводит к чрезмерной экспозиции инкапсулированных данных с методами, которые не имеют значения или даже опасны с точки зрения домена).