函數式編程 vs 面向對象編程


身為一個程序員,我個人很喜歡早洗澡的時候去思考一些技術上的東西,今天有人問我什么是面向對象,其實我也不是很懂,我以前一直認為面向對象就是繼承,而繼承就是虛函數,但是我洗澡的時候在思考,真的是這樣子的嗎?錯了,不管虛函數的機制是為了繼承和多態而服務,而繼承和多態確實為了OO的思想而服務,怎么說呢?

我們都知道,當我們都知道學生A,B,C,D.....,都是學生,並且他們有一些共同的屬性,比如年齡,性別,學號。。。,如果在面向過程的編程模式中,我們可能要為每一個學生建立一個存放他/她屬性的一個東西,而面向對象呢,我們只要將他們共同的東西抽象出來形成一個類,而類中只有他的屬性,那么我們只要使用這個類去創建不同的學生對象即可,但是我們都知道每一種數據類型都有它本身的運算方式,比如整形,它可以做+-*%,等等,而有學生抽象出來的這個類他也有自己對於類中屬性的操作方式,所以我們就將這個屬性的操作方式也放在類里面,那么整個類就真正的成為一個數據類型而存在,那么任何想使用這個數據類型的人只要定義一個關於這個數據類型的變量即可,而操作這個變量的方式也已經寫好,就像int類型一樣,這樣你就不必為每一個學生去定義一個類型,真正實現了OO中的因為抽象而共享,增加了代碼重用的可能性,減少了程序的代碼量。

當然這個思想在模版中也得到了推廣,不管是模板類,還是模版函數,抽象出共同的,形成一個可悲更多時候使用的一個東西。模板類對數據類型再一次抽象,模版函數不同數據類型同一控制流的抽象。

 

那么函數式編程又和面向對象編程有什么不同呢?我覺得函數式編程和面向對象編程是相輔相成的,為什么這么說,面向對象抽象出共同屬性形成一個新的數據類型,暫且就這么說吧,而函數式編程將函數也當成對象,可當變量,當參數,當返回值,簡直就是全能神,哈哈,函數式編程當然得講閉包,閉包是什么,閉包其實就是類,類抽象的是數據類型,而閉包抽象的是函數,閉包通過不同的輸入參數實現返回不同的函數對象。

所以當你要抽象數據類型,請用OO,當你要抽象函數,請用FP。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM