物件導向 vs. 函數語言程式設計
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方面使用函數語言程式設計。
由於函數語言程式設計在外觀上類似以前程式導向程式設計中函式,所以,這個帖子也可以看成物件導向和麵向過程分裂之後的再次組合的一個方式。
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方面使用函數語言程式設計。
由於函數語言程式設計在外觀上類似以前程式導向程式設計中函式,所以,這個帖子也可以看成物件導向和麵向過程分裂之後的再次組合的一個方式。
相關文章
- 函數語言程式設計 VS 物件導向程式設計函數程式設計物件
- 物件導向變成 VS 函數語言程式設計物件函數程式設計
- Facebook 開源 Skip 物件導向+函數語言程式設計語言物件函數程式設計
- 為什麼說物件導向程式設計和函數語言程式設計都有問題物件程式設計函數
- 物件導向的程式設計和函數語言程式設計基本相同的證據 - vavr物件程式設計函數VR
- 函數語言程式設計 vs 物件導向程式設計 vs 程式式程式設計的JS演示比較 - DEV函數程式設計物件JSdev
- Reactor事件驅動的兩種設計實現:物件導向 VS 函數語言程式設計React事件物件函數程式設計
- OOC 物件導向 C 語言程式設計實踐物件程式設計
- 物件-函數語言程式設計簡史物件函數程式設計
- JavaScript 函數語言程式設計導論JavaScript函數程式設計
- 物件導向程式設計-java語言 第二週程式設計題物件程式設計Java
- 程式程式碼進化的一些思考:從物件導向到設計模式,到函數語言程式設計物件設計模式函數程式設計
- 函數語言程式設計函數程式設計
- Scala 函數語言程式設計(一) 什麼是函數語言程式設計?函數程式設計
- 優化函數語言程式設計:向PHP移植Clojure函式優化函數程式設計PHP函式
- 真的可以,用C語言實現物件導向程式設計OOPC語言物件程式設計OOP
- C語言大型軟體設計的物件導向C語言物件
- 物件導向程式設計物件程式設計
- 函數語言程式設計5-物件校驗器函數程式設計物件
- JavaScript建構函式,物件導向程式設計JavaScript函式物件程式設計
- 函數語言程式設計,真香函數程式設計
- Java 函數語言程式設計Java函數程式設計
- javascript函數語言程式設計JavaScript函數程式設計
- 初探函數語言程式設計函數程式設計
- 函數語言程式設計初探函數程式設計
- JavaScript 函數語言程式設計JavaScript函數程式設計
- 開放出版:許式偉《Go語言程式設計》樣章“物件導向程式設計”Go程式設計物件
- Go語言結構體(struct)物件導向程式設計基礎篇Go結構體Struct物件程式設計
- 聊聊 Go 語言中的物件導向程式設計Go物件程式設計
- iOS 開發之 OOA (物件導向分析) & OOD (物件導向設計)& OOP (物件導向程式設計)iOS物件OOP程式設計
- SOLID Go Design - Go語言物件導向設計SolidGo物件
- SOLID Go Design - Go 語言物件導向設計SolidGo物件
- [.net 物件導向程式設計基礎] (2) 關於物件導向程式設計物件程式設計
- 十三、物件導向程式設計物件程式設計
- js物件導向程式設計JS物件程式設計
- 程式設計思想 物件導向程式設計物件
- 十六、物件導向程式設計物件程式設計
- perl 物件導向程式設計物件程式設計