簡單地說,函數式程式設計通過使用函數,将值轉換成抽象單元,接着用于建構軟體系統。
面向對象程式設計認為一切事物皆對象,将現實世界的事物抽象成對象,現實世界中的關系抽象成類、繼承,幫助人們實作對現實世界的抽象和數字模組化。面向對象程式設計有三個特征,分别是封裝,繼承和多态。面向對象的主要目标是問題的分解,如下圖所示:

函數式程式設計以函數為抽象單元和行為單元,實作資料的封裝和隐藏,與面向對象将問題分解成多組“名詞”或對象不同,函數式方法将相同的問題分解成多組“動詞”或函數。函數式程式設計也可以通過組合來構造更大的函數,實作抽象的行為。如下圖所示:一種函數式的部件組成一個完整的系統的方法,就是取一個“值”,然後将它逐漸“改變”,通過一個原始的或者組合的函數,成為另外一個值。
在一個面向對象的系統内部,對象之間的互動會引起各種對象内部狀态的變化,而整個系統的變化是由許多小的,細微的變化混合形成的,這些互相關聯的狀态變化形成了一個概念上的“變化網”。但我們需要跟蹤這邊變化的時候,就需要了解彼此之間這種微妙且廣泛的變化。
相比之下,函數式系統則努力減少可見狀态的修改。向一個遵循函數式的系統添加新功能就成了了解如何在局限的上下文環境中,無破壞地進行資料轉換。函數式程式設計以指令的方式建構系統,并通過顯性的狀态來改變縮減到最小來變得更加子產品化。
總的來說,函數式程式設計包括以下四個方面:
确定抽象函數,并為其構造函數
利用已有的函數來構造更為複雜的函數
通過将函數傳給其他的函數來建構更為複雜的抽象。