函數式編程與面向對象編程的區別

定義

  • 函數式編程:以函數思維做爲核心,在這種思維的角度去思考問題。這種編程最重要的基礎是λ演算,接受函數當作輸入和輸出。
  • 面向對象編程:這種編程是把問題看作由對象的屬性與對象所進行的行爲組成。基於對象的概念,以類作爲對象的模板,把類和繼承作爲構造機制,以對象爲中心,來思考並解決問題。

 

函數式編程

支持

  • 閉包:一個函數內定義另一個函數
  • 高階函數:參數作爲函數,或者返回值作爲函數的函數
  • 惰性計算:在將表達式賦值給變量的時候,不計算表達式的值,而是在變量第一次使用的時候再計算
  • 獨立性:函數不依賴外部的狀態,也不修改外部的狀態
  •             (只要我們輸入的參數不變,那麼輸出的結果也一定是一樣的)
  • 無鎖併發:因爲函數的獨立性,所以函數各個部分的執行順序可以打亂,多個線程之間的執行不會互相干擾,不需要鎖來保護,所以函數式編程的多線程併發是安全的

 

 

面向對象編程

面向對象的程序設計把計算機程序視爲一組對象的集合,而每個對象都可以接收其他對象發過來的消息,並處理這些消息

面向對象的三個特徵

  • 封裝:把對象的屬性和操作結合爲一個獨立的整體,並儘可能隱藏對象的內部實現細節,對數據的訪問只能通過已定義的接口
  • ——(例如將屬性設置爲私有,然後爲其設置setter/getter方法,這就是封裝)
  • 繼承:繼承可以使得子類具有父類的屬性和方法或者重新定義、追加屬性和方法等
  • ——(例如一個類A繼承另一個類B,則稱A爲B的子類,B爲A的父類)
  • 多態:多態指同一個實體同時具有多種形式
  • ——(例如同一個接口,使用不同的實例而執行不同操作)

如果一個語言只支持類而不支持多態,只能說明它是基於對象的,而不是面向對象的

 

總結一下

函數式編程:將程序數學化

面向對象編程:萬物皆爲對象

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章