混合OO和Functional設計
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修改過]
相關文章
- 三、GO 程式設計模式:FUNCTIONAL OPTIONSGo程式設計設計模式Function
- OO幾條設計原則
- 工廠模式與OO設計原則模式
- OO設計模式中的工廠模式設計模式
- 函式程式設計Functional Programming 會取代GOF設計模式嗎?函式程式設計FunctionGo設計模式
- 資料庫和OO資料庫
- oo設計與基於框架開發的矛盾框架
- Swift和Objective-C混合程式設計——Swift呼叫OCSwiftObject程式設計
- Swift和Objective-C混合程式設計——OC呼叫SwiftSwiftObject程式設計
- 如何成為一個設計師和程式設計師混合型人才程式設計師
- 程式設計思想基本概念之函數語言程式設計(Functional Programming)程式設計函數Function
- 函數語言程式設計functional programming的特點函數程式設計Function
- [2]動機、原則與模式——OO設計之我見模式
- 【目錄】Matlab和C#混合程式設計文章目錄MatlabC#程式設計
- Linux下C和matlab混合程式設計學習(1)LinuxMatlab程式設計
- CUDA 8的混合精度程式設計程式設計
- QML之C++混合程式設計C++程式設計
- Groovy + Java 混合程式設計方案:GMavenJava程式設計Maven
- C++ & Intel MKL 混合程式設計C++Intel程式設計
- Java與Matlab混合程式設計JavaMatlab程式設計
- 又來演算法和OO演算法
- Android混合程式設計:WebView實踐Android程式設計WebView
- 無程式設計基礎利用java學習OO思想的過程程式設計Java
- 基於物件導向(OO)的資料庫設計模式探討物件資料庫設計模式
- Qt 與 Objective-C 的混合程式設計QTObject程式設計
- C與指令碼的混合程式設計 (轉)指令碼程式設計
- Java中的函數語言程式設計(二)函式式介面Functional InterfaceJava函數程式設計函式Function
- 什麼是函式響應式程式設計(Functional Reactive Programming:FRP)函式程式設計FunctionReactFRP
- OO和SQL,應該攜手共進SQL
- E - Reachability in Functional GraphFunction
- Typescript + Javascript + Node.js + 設計模式 + OO + 裝飾器= Java (Spring Boot)TypeScriptJavaScriptNode.js設計模式Spring Boot
- 進銷存軟體之OO設計--中間層處理(二) (轉)
- 【混合程式設計】C/C++呼叫Fortran的DLL程式設計C++
- 託管與非託管的混合程式設計程式設計
- C/C++與Matlab混合程式設計初探C++Matlab程式設計
- C++:與C混合程式設計 CMake undefined reference toC++程式設計Undefined
- 混合現實設計:火星計劃頭戴裝置配套應用的設計心得
- 讀貼有感。演算法、資料結構和OO、設計模式,初學者的你還在懷疑嗎?演算法資料結構設計模式