À la page 839 de la deuxième édition, Steve McConnell discute de toutes les façons dont les programmeurs peuvent "conquérir la complexité" dans les grands programmes. Ses conseils culminent avec cette déclaration:
"La programmation orientée objet fournit un niveau d'abstraction qui s'applique aux algorithmes et aux données en même temps , une sorte d'abstraction que la décomposition fonctionnelle à elle seule ne fournissait pas."
Couplé à sa conclusion que "réduire la complexité est sans doute la clé la plus importante pour être un programmeur efficace" (même page), cela semble à peu près un défi pour la programmation fonctionnelle.
Le débat entre FP et OO est souvent encadré par les partisans de FP autour des questions de complexité qui découlent spécifiquement des défis de la concurrence ou de la parallélisation. Mais la concurrence n'est certainement pas le seul type de complexité que les programmeurs de logiciels doivent vaincre. Peut-être que le fait de se concentrer sur la réduction d'une sorte de complexité l'augmente considérablement dans d'autres dimensions, de sorte que dans de nombreux cas, le gain ne vaut pas le coût.
Si nous déplacions les termes de la comparaison entre FP et OO de questions particulières comme la concurrence ou la réutilisabilité à la gestion de la complexité globale, à quoi ressemblerait ce débat?
MODIFIER
Le contraste que je voulais souligner est que OO semble encapsuler et abstraire de la complexité des données et des algorithmes, tandis que la programmation fonctionnelle semble encourager à laisser les détails d'implémentation des structures de données plus "exposés" tout au long du programme.
Voir, par exemple, Stuart Halloway (un partisan de Clojure FP) disant ici que «la sur-spécification des types de données» est «une conséquence négative du style OO idiomatique» et privilégiant la conceptualisation d'un carnet d'adresses comme un simple vecteur ou carte au lieu d'un objet OO plus riche avec des propriétés et des méthodes supplémentaires (non vectorielles et non maplike). (De plus, les partisans de l'OO et de la conception pilotée par domaine peuvent dire que l'exposition d'un carnet d'adresses en tant que vecteur ou carte surexpose les données encapsulées à des méthodes qui ne sont pas pertinentes ou même dangereuses du point de vue du domaine).