物件導向 vs. 函數語言程式設計

banq發表於2010-11-04
Object oriented vs. functional programming — The Endeavour

OO makes code understandable by encapsulating moving parts.
OO透過切分封裝能夠更加易懂
FP makes code understandable by minimizing moving parts.
而FP透過最小化切分使得程式碼更加易懂。

前者試圖將狀態隱藏於物件介面之後,而後者試圖透過儘可能的純函式功能將狀態切分再細直至最小化。(banq:兩者側重點還是不太一樣)

大多數習慣於物件導向程式設計師喜歡將在OO基礎上引入FP,但是作者認為:可能喪失一些純函式式語言的獨特特點,純函式式語言更加易於除錯,能夠並行執行,這取決於他們沒有副作用(side effects)

以下是我理解:因為將行為封裝在物件中的方式帶來最大問題就是行為功能的副作用,也就是某個物件的方法執行其主要功能作用外,必然帶來其副作用,需要程式設計師非常小心應付,經常不經意就帶來副作用,這樣程式設計就很累,相反,如果我們直接從方法功能入手,就自然避免副作用,打個比喻:某個老闆A手下有一個人才B很能幹,可以獨當一面,如果B一直位於A封裝邊界內,A可能讓其偶爾做一些其不擅長的時間,這就是B的副作用;而如果讓B獨立新公司,完全放手,則對其沒有牽制,也就沒有副作用。

該文提出:100%純函式式是否需要?James Hague認為不需要,只要85%就可以,權衡利弊,左右取之於中,提出functional in the small and OO in the large觀點,我個人理解就是:在宏觀戰略Large方面使用物件導向;而在戰術small方面使用函數語言程式設計

由於函數語言程式設計在外觀上類似以前程式導向程式設計中函式,所以,這個帖子也可以看成物件導向和麵向過程分裂之後的再次組合的一個方式。


相關文章