Steve McConnell은 두 번째 버전의 839 페이지에서 프로그래머가 대규모 프로그램에서 "복잡성을 극복 할 수있는"모든 방법을 논의하고 있습니다. 그의 조언은이 진술로 끝납니다.
"객체 지향 프로그래밍은 알고리즘과 데이터에 동시에 적용되는 추상화 수준을 제공합니다. 이는 기능 분해만으로는 제공하지 않는 일종의 추상화입니다."
"복잡성을 줄이는 것이 효과적인 프로그래머가되기위한 가장 중요한 열쇠"(동일한 페이지)라는 결론과 함께, 이것은 함수형 프로그래밍에있어 거의 도전적인 것으로 보인다.
FP와 OO 사이의 논쟁은 종종 동시성 또는 병렬화의 문제에서 파생되는 복잡성 문제에 대한 FP 지지자에 의해 결정됩니다. 그러나 동시성은 소프트웨어 프로그래머가 정복해야 할 복잡한 종류는 아닙니다. 아마도 한 종류의 복잡성을 줄이는 데 초점을 맞추면 다른 차원에서는 복잡성이 크게 증가하여 많은 경우 이익이 비용이 들지 않습니다.
FP와 OO의 비교 조건을 동시성 또는 재사용 성과 같은 특정 문제에서 글로벌 복잡성 관리로 전환하면 그 논쟁은 어떻게 보일까요?
편집하다
내가 강조하고 싶었던 대조는 OO가 데이터와 알고리즘의 복잡성을 피하고 요약하는 것처럼 보이지만, 기능적 프로그래밍은 데이터 구조의 구현 세부 사항을 프로그램 전체에 더“노출”하게 남겨 두는 것 같습니다.
참조, 예를 들어, 스튜어트 Halloway (A Clojure의 FP의 지지자) 여기 의 "데이터 유형의 오버 사양" "관용적 OO 스타일의 부정적인 결과"라고 말하는 간단한 벡터 등의 주소록을 개념화 또는 그 대신 풍부한 OO 객체의지도 선호 추가 (벡터가 아닌 & 비맵과 같은) 속성 및 메서드 또한 OO 및 도메인 기반 디자인 제안자는 주소록을 벡터 또는 맵으로 노출하면 캡슐화 된 데이터를 도메인의 관점에서 무관하거나 위험한 방법에 노출 시킨다고 말할 수 있습니다.