面向過程與物件導向程式設計區別

2021-10-03 18:45:09 字數 3191 閱讀 1155

1.概念:

以時間為中心,把解決問題的步驟分析出來,然後按順序呼叫函式一步一步實現

物件導向方法的基礎實現中也包含面向過程的思想

2.特性

模組化流程化

3.優勢

①效能相較物件導向較高

類呼叫的時候需要例項化,因此開銷大,比較消耗資源(eg:片機、嵌入式開發、linux/unix等一般採用面向過程開發)

效能是需要關注的主要因素

②流程化的程式設計,具體步驟和每個步驟系要完成的任務明確清晰,在開發之前基本考慮了實現方式和最終結果,便於節點分析

③效率高,強調**的短小精悍,善於結合資料結構來開發高效率的程式。

4.劣勢

需要深入的思考,耗費精力,**重用性低,後期不易維護、不易擴充套件

。1.概念

當問題規模變得更大,面向過程的思想顯然不夠用。世界上的人和事物都可以看做乙個物件,都有屬於自己的的屬性和特定行為,物件與物件之間通過方法來互動。簡單來說就是靠屬性+方法實現。

物件導向是一種以「物件」為中心的程式設計思想,把要解決的問題分解成各個物件,各個物件之間互動,完成事件,解決問題。

程式設計建立物件,描敘某個物件在整個解決問題的步驟中的屬性和行為,而不是為了完成乙個步驟。

2.特性

抽象封裝

繼承多型

3.優勢:

①結構清晰,整個程式設計是結構化和模組化的,更符合人類的思維方式。

②易維護、易復用、易擴充套件,由於物件導向有封裝、繼承、多型性的特性,可以設計出低耦合的系統,使系統更加靈活、更加易於維護(系統低耦合的特點有利於減少程式的後期維護工作量)。

4.劣勢:

①效能比面向過程低,由於面向更高的邏輯抽象層,使得物件導向在實現的時候,不得不做出效能上面的犧牲,計算時間和空間儲存大小都開銷很大。

②開銷大,當要修改物件內部時,物件的屬性不允許外部直接訪問,所以要增加許多沒有其他意義、只負責讀或寫的行為。這會為程式設計工作增加負擔,增加執行開銷,並且使程式顯得臃腫

最本質的區別

兩者的結合方式不同

用兩個例子來說明:

①蛋炒飯和蓋澆飯問題 主要表現在粒度

蛋炒飯的粒度只能是飯粒,即使新增再多東西也只是量不同而行相似的同種粒子

而蓋澆飯的粒度是分結構和層次的,比如 飯粒 菜片 一碗飯 一碗菜 飯菜合在一起又是乙個粒度

②下五子棋問題

面向過程設計,整個思路是分析這個問題的解決步驟:

(1)開始遊戲(2)黑子先走(3)繪製畫面(4)判斷輸贏(5)輪到白子(6)繪製畫面(7)判斷輸贏(8)返回步驟(2) (9)輸出最後結果。

按照程式語言,依次呼叫函式實現:

下五子棋
就是乙個流程,迴圈的過程直到結束 整個程式是乙個平面結構平面

物件導向設計下五子棋,我們就要先劃分出整個問題解決過程中涉及到的物件(三個:黑白棋子、棋盤系統、五子棋規則系統):

(1)黑白棋子:用於下子這一行為

(2)棋盤系統:用於繪製下棋的畫面

(3)五子棋規則系統:用於判斷輸贏、雙方走棋是否合乎規範

然後,設計各類物件它們的各個職能和屬性,以及物件間如何互動解決問題:

(1)物件①——黑白棋子:接受使用者輸入,並告知物件②,繪製影象

(2)物件②——棋盤系統:接受物件①指令,繪製顯示畫面,並按照物件③設定的規則判斷

上述是乙個職能劃分明確,層次分明** 複雜的系統結構。

另外:如果在五子棋設計中,增加其他功能,例如:悔棋

面向過程:從輸入到顯示再到最後判斷的整個步驟都要改動,甚至函式的呼叫順序也要改動

物件導向:只需在棋盤系統中增加乙個回溯的功能,黑白雙方和規則系統的屬性和行為都不需改動。

②蛋炒飯和蓋澆飯的例子:粒度問題

結果狀態來說:

面向過程只有過程(也就是函式)組合起來也只是一堆函式

蛋炒飯只有粒(蛋粒 肉裡 飯粒 蛋飯粒 總之 他只有粒子一種形態) 組合起來也只是一堆粒子 並不能體現出之間的聯絡 只有飯和蛋融合在一起密不可分的聯絡 因為它的結合方式是炒

物件導向有過程 也有 物件 結合起來是乙個系統 **

蓋澆飯 是由飯粒 菜 飯糰 菜團 還有終極形態蓋澆飯 結合起來是一種複雜結構 其烹飪方式 不僅有炒( 炒是乙個融合的過程 解釋為封裝**) 還有煮(組合) 蒸(聚合)

從結合方式(系統複雜性 耦合性)上說:

原子烹飪模組: 就是做東西的過程 無論做什麼 其過程都類似 點火 放材料 取結果

烹飪過程: 將各種材料(可能是原材料也可能是上次烹飪的成果)再放在一起建立關係 結合在一起

蛋炒飯永遠是對整體進行炒(原子烹飪模組)的操作 即使炒的東西不同 但最後依舊只是炒成一堆散粒子的堆砌物(這是炒的特性)

蓋澆飯在每乙個小組成也是原子烹飪模組 但是它有幾種原子烹飪模組 與蛋炒飯的不同是 它不僅有炒 還有煮( 蒸 炸 從最基礎的種類上(結合方式)不同 ,由不同的結合方式結合成各種不同的物件

其中蒸的模式裡 就是一種弱關聯,兩種材料(上一次炒和煮的成果)可以拆分 這也就造成了 蓋澆飯的復用性

其中 耦合性就代表著 可維護性(執行後) 復用性(編碼階段) 易擴充套件(持續開發) 等等等等

這就是面向過程與物件導向最本質的區別: 結合方式的不同

種類 和 數量

世間若只有數 便只能產生有1 2 3 4 12 13 14 即使複製出再多數字相疊加 也沒有什麼不同

世間有數和文字 還有 那麼不僅會有1 2 3 4 而且還會有 1拍1 乙隻小貓坐飛機

link.

面向過程與物件導向程式設計的區別

通過查閱很多資料,最終覺得以下說法相對較容易理解 是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候乙個乙個依次呼叫就可以了 把構成問題事務分解成各個物件,建立物件的目的不是為了完成乙個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。舉例子 可以拿生活中的例項來理解面...

物件導向與面向過程區別

物件導向是以事物為中心的程式設計思想,把構建問題事務分解成各個物件,建立物件的目的是為了描述某個事物在整個解決問題的步驟中的行為 面向過程是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用時依次呼叫就可以了 區別 物件導向程式設計,往往是從問題的一部分著手,一點一點地構建出整個程式...

面向過程與物件導向 程式設計

面向過程的程式 按照思路是下棋的流程進行程式設計,也就是我們通常習慣使用的自低向上,逐層精確的程式設計思想。這種程式設計的主導思想是在設計時就把實現的細節考慮好了,從而在低層就實現了程式滿足應用軟體要求的目的。物件導向的精髓 在於考慮問題的思路是從人的一般思維習慣出發來考慮的,這樣就改變並打破了程式...