На сторінці 839 другого видання Стів МакКоннелл обговорює всі способи, якими програмісти можуть «підкорити складність» у великих програмах. Його підсумки завершуються цим твердженням:
"Об'єктно-орієнтоване програмування забезпечує рівень абстракції, який застосовується одночасно до алгоритмів і даних , такий вид абстракції, якого функціональне розкладання не забезпечувало."
У поєднанні з його висновком, що "зниження складності, мабуть, є найважливішим ключем до ефективного програміста" (та сама сторінка), це, здається, є суттєвим викликом для функціонального програмування.
Дебати між FP та OO часто обрамовуються прихильниками FP навколо питань складності, які конкретно випливають із викликів одночасності чи паралелізації. Але паралельність, безумовно, не є єдиним видом складних програм, яким потрібно завоювати програмістів. Можливо, спрямованість на зниження одного виду складності значно збільшує його в інших вимірах, так що для багатьох випадків виграш не вартує витрат.
Якби ми змістили умови порівняння між FP та OO від конкретних питань, таких як одночасність чи повторне використання до управління глобальною складністю, як би виглядала ця дискусія?
EDIT
Контраст, який я хотів підкреслити, полягає в тому, що OO, схоже, укладається та абстрагується від складності як даних, так і алгоритмів, тоді як функціональне програмування, здається, заохочує залишати деталі реалізації структур даних більш "відкритими" у всій програмі.
Дивіться, наприклад, Стюарт Халлоуей (прихильник FP Clojure) тут, кажучи, що "завищена специфікація типів даних" є "негативним наслідком ідіоматичного стилю OO" і надає перевагу концептуалізації адресної книги як простого вектора або карти замість багатшого об'єкта OO з додатковими властивостями та методами (не векторними та не картами). (Крім того, прихильники дизайну OO та Driven-Driven Design можуть сказати, що опромінення адресної книги як вектора чи карти перекриває вкладені дані методам, які не мають значення або навіть небезпечні з точки зору домену).