面向對象和麪向過程的編程方式的理解

  1. 面向對象和麪向過程的區別?c++

    若是說面向對象和麪向過程的具體區別,最深刻的地方應該是去看設計模式,推薦大話設計模式那本書,講的比較好。本人只不過簡單敘述下,重點是如何進行面向對象和麪向過程的編程,只有會編程了,才能真正懂得面向對象和麪向過程的區別。不然都是紙上談兵。算法

    面向過程:是以計算機線性思惟的方式進行編程。一步一個腳印的執行。自己也沒有問題,可是若是遇到需求多變的狀況,或者功能的添加和刪除,將極其影響原來的程序代碼,必需要重寫或者修改,或者從新組織原來的代碼。編程

    面向對象:在對需求多變的時候,不影響總體程序的代碼,必要時,能夠擴增,不會影響程序的主要邏輯,尤爲後期加上優秀的設計模式,將大大適應需求多變,易擴展等大量問題。所以廣受歡迎,以面嚮對象語言層出不窮,經典的有C++,JAVA,以及如今比較熱門的Python,甚至大數據編程還有Scala編程(結合了函數式編程和麪向對象編程)。
    設計模式

  2. 面向對象如何編程,面向過程如何編程?數據結構

    具體的舉個小例子,約瑟夫問題(一羣小孩圍成一個環,對其進行編號,而後到幾了就刪除了這個小孩,而後從下一個小孩從1進行編號,不斷地刪除)
    面向過程如何編程:首先寫好孩子的數據結構,孩子自己的信息+孩子的下一個指針(該指針存儲了下一個結點的地址)。另外結點寫好了,在講這些有關係的結點進行組裝起來成爲一個沒有頭結點的循環鏈表,天然而然就有buildCycLink(int len,頭指針)方法 。而後再寫一個printLink(頭指針)方法,最後在main函數中一個一個調用方法,很線性的思惟方式。(本例有個重點,就是結點和結點之間有關係,你必需要組裝,例如構建二叉樹,也是如此,多個結點須要組裝成二叉樹。)ide

    面向對象如何進行編程:首先造出一個孩子類(孩子自己的信息,+指向下一個結點(引用)),而後組裝這些結點之間的關係,那麼天然而然擁有這些結點數據信息。(面向對象一個很重要的思想就是誰擁有數據信息,就擁有能夠操做這些數據信息的方法)。因此在造出個CycLink類,這個類裏面包含了數據結點,以及結點個數,以及構建結點關係的方法和顯示結點信息的方法。函數式編程

    注意事項:c++中是用指針表示結點之間的關係:p->next=q; (表示的p的下個結點是q)。p=q,(表示的是p和q指向的同一個結點)。Java中:對象p.next屬性=對象q;(表函數

示的是對象p的下一個對象是q)對象p=對象q(表示的二者引用的是同一個東西)。大數據

3.面向對象編程的整體思路ui

首先是抽象:將共同的事物進行抽象成類,或者數據結構,這點和數據結構結點的的抽象是同樣的。

以KNN算法爲例,不少點,須要抽象成點類,點和點須要計算距離,這時候能夠抽象成距離類。未知分類點和訓練集點,進行校驗,那麼面向對象就須要擁有這些訓練集數據和未知點數據,那麼天然而然就擁有了操做這些數據的方法,歐式計算,mostOfType()等等方法。這樣就能夠寫成一個類,別的類只須要負責調用這個類實現功能。

4.面向對象的MVC模式啓發

    界面層:幹界面層的事情。

    模型層:負責具體業務邏輯

    控制層:負責控制判斷,跳轉。

   每一層:擁有每一層的數據,天然而然的就擁有操做這些數據的方法,其餘層負責調用就行了。

相關文章
相關標籤/搜索