Auf Seite 839 der zweiten Ausgabe erörtert Steve McConnell alle Möglichkeiten, wie Programmierer die Komplexität in großen Programmen "beherrschen" können. Seine Tipps gipfeln in dieser Aussage:
"Objektorientierte Programmierung bietet eine Abstraktionsebene, die gleichzeitig für Algorithmen und Daten gilt , eine Art von Abstraktion, die die funktionale Zerlegung allein nicht bot."
In Verbindung mit seiner Schlussfolgerung, dass "die Reduzierung der Komplexität wohl der wichtigste Schlüssel zu einem effektiven Programmierer ist" (dieselbe Seite), scheint dies eine echte Herausforderung für die funktionale Programmierung zu sein.
Die Debatte zwischen FP und OO wird häufig von FP-Befürwortern über die Komplexität geführt, die sich speziell aus den Herausforderungen der Parallelität oder Parallelisierung ergibt. Aber Parallelität ist sicherlich nicht die einzige Art von Komplexität, die Software-Programmierer erobern müssen. Wenn Sie sich vielleicht darauf konzentrieren, eine Art von Komplexität zu reduzieren, erhöht sich dies in anderen Dimensionen erheblich, sodass der Gewinn in vielen Fällen die Kosten nicht wert ist.
Wie würde diese Debatte aussehen, wenn wir die Vergleichsbedingungen zwischen FP und OO von bestimmten Aspekten wie Parallelität oder Wiederverwendbarkeit auf das Management globaler Komplexität verlagern würden?
BEARBEITEN
Der Kontrast, den ich hervorheben wollte, ist, dass OO die Komplexität sowohl von Daten als auch von Algorithmen zu kapseln und zu abstrahieren scheint, wohingegen die funktionale Programmierung zu ermutigen scheint, die Implementierungsdetails von Datenstrukturen im gesamten Programm "exponierter" zu lassen.
Siehe z. B. Stuart Halloway (ein Befürworter von Clojure FP), der hier sagt, dass "die Überbestimmung von Datentypen" eine "negative Folge des idiomatischen OO-Stils" ist und die Konzeption eines Adressbuchs als einfacher Vektor oder Karte anstelle eines reichhaltigeren OO-Objekts bevorzugt mit zusätzlichen (nicht vektoriellen und nicht kartenartigen) Eigenschaften und Methoden. (Auch OO- und Domain-Driven-Design-Befürworter können sagen, dass das Offenlegen eines Adressbuchs als Vektor oder Karte die eingekapselten Daten gegenüber Methoden überbelichtet, die vom Standpunkt der Domäne irrelevant oder sogar gefährlich sind.)