混合OO和Functional設計

banq發表於2012-04-23
物件導向定位於系統高層次,面向函式程式設計是定位於低層次. 來自

Tell Above, and Ask Below - Hybridizing OO and Functional Design重新定義了物件導向,糾正了以往對OO的錯誤觀點:

Object-orientation is better for the higher levels of a system, and functional programming is better for the lower levels. 物件導向定位於系統高層次(更靠近人),面向函式程式設計是定位於低層次(更靠近機器).

文章首先各自重申定義了面向函式FP和麵向物件OO的定義:

(1)函數語言程式設計是為了減少副作用,當沒有副作用時,你就能透明引用,可以將表示式從一個地方複製到另外一個地方,只要給予同樣輸入,無論如何呼叫,總是給出同樣的輸出。這稱為purity純度。

純度能夠啟用懶載入,在面向函式語言中,calling a function呼叫一個函式和apply a function應用一個函式意義是完全不一樣的。

(2)關於物件導向,作者引用了最初原始的物件定義:Alan Kay認為物件是道法自然處理複雜系統的方式,使用物件方式來處理複雜軟體系統,在生物學中,一個有機體中有很多神經元Cell,這些神經元之間透過化學訊息進行彼此聯絡,這點非常類似Smalltalk 使用訊息傳送message send而不是功能呼叫functional call,兩者不只是巧合。

物件結構的好處是它更顯式強調Play,而不是Player,正如Alan Kay認為:訊息比物件本身更加重要(banq注:JdonFramework基於事件訊息的特性反映了OO本質),這在生物學也同理,你不可能透過殺死一個Cell來搞垮整個有機體,這就證明了越接近Erlang的處理模型就越是典型的物件導向系統。

[該貼被admin於2012-04-23 12:09修改過]

[該貼被admin於2012-04-23 12:10修改過]

相關文章