2014-01-20 23 views
1

我經常遇到面向對象和函數式編程之間以及命令式和函數式編程之間的比較。 「面向對象」和「勢在必行」是兩個截然不同的術語,根據我的理解,這兩個術語之間沒有任何關係。儘管如此,它們都與函數式編程相比。面向對象和命令式編程之間的關係是什麼證明了這一點?OO vs FP |勢在必行vs FP

+0

不可能說沒有小說XT。 –

+0

可能適合更好cs.stackexchange.com – Sylwester

回答

4

原因很簡單,主流OO編程(即Java,C#)是命令式編程的子類。

這是一個粗略的圖表:

    progamming 
       /  \ 
       declarative imperative 
       / \  / \ 
     functional \  OO procedural 
         logic 
         (prolog) 

在聲明式編程,你說什麼是你想要計算。假設我們要計算一個鏈表的長度:

  • 空列表的長度是0
  • 一個非空列表的長度是一個比列表尾部的長度多。

在命令式編程,你基本上按照一定的順序操作內存:

int length = 0;    // put starting value in memory 
while (!list.isEmpty()) { 
    length++;     // update memory 
    list = list.next();  // update list pointer for next iteration 
} 
// result is in memory location associated with length 

所以,正確的comparisions是:

  • 必須與聲明
  • OO VS功能
+0

謝謝,現在我明白了! – gabox01

+1

另一方面,面向對象的概念可以應用於命令式,功能式和聲明式編程,因爲代碼封裝和代碼重用問題在任何編程範例中都很常見。這導致了另一種觀點,其中命令性的,功能性的和聲明性的範式與OO範式截然分開並在更高層次上處於同一水平。您可以很容易地找到所有三種主要編程範例的語言代表,並且可以很好地集成OO概念的解釋/實現。 –

+1

@PauloMoura它不像代碼封裝/重用是面向對象的發明。但是你是對的,概念和想法浮現任何方向,這是一件好事。 – Ingo