面向過程與面向對象的區別

面向過程與面向對象的區別

一直對面向對象面向過程只是一個模糊大衆化的理解,查看了一些文檔,也引用了一些內容 整理了下 記錄自己的理解

依舊是引用了經典的蛋炒飯和蓋澆飯的例子,我仔細的分析了下,和網上看的可能會有些不同

先看概念吧 這部分爲摘抄和整理

面向過程

  1. 概念
    面向過程是一種以過程爲中心的編程思想,它是一種基礎的順序的思維方式,面向對象方法的基礎實現中也包含面向過程思想
  2. 特性
    模塊化
    流程化
  3. 優點:性能比面向對象高,因爲類調用時需要實例化,開銷比較大,比較消耗資源;比如單片機、嵌入式開發、Linux/Unix等一般採用面向過程開 發,性能是最重要的因素。
  4. 缺點:沒有面向對象易維護、易複用、易擴展

面向對象

  1. 概念
    面向對象是按人們認識客觀世界的系統思維方式,採用基於對象(實體)的概念建立模型,模擬客觀世界分析、設計、實現軟件的辦法。通過面向對象的理念使計算機軟件系統能與現實世界中的系統一一對應。
  2. 特性
    1. 抽象
    2. 封裝
    3. 繼承
    4. 多態
  3. 優點:易維護、易複用、易擴展,由於面向對象有封裝、繼承、多態性的特性,可以設計出低耦合的系統,使系統更加靈活、更加易於維護

  4. 缺點:性能比面向過程低

然後看到網上說的兩個例子大致如下:

  1. 蛋炒飯和蓋澆飯問題 主要表現在粒度上

    • 蛋炒飯的粒度只能是飯粒,即使添加再多東西也只是量不同而行相似的同種粒子
    • 而蓋澆飯的粒度是分結構和層次的,比如 飯粒 菜片 一碗飯 一碗菜 飯菜合在一起又是一個粒度
  2. 圍棋問題

    • 以面向過程設計圍棋 整個對局就是一個流程,循環着 下子->判斷->下子 的過程直到結束 整個程序是一個平面結構平面

    • 以面向對象設計圍棋 就是一個以黑白子, 顯示, 判斷,等各個職能劃分明確 層次分明 複雜的系統結構

兩者區別在哪?想了半天 不得其解
由於世界和人的存在方式(時間 順序),所以面向過程是最基礎 實際 直接的設計方式,在面向對象設計中也必不可少的使用面向過程的設計方式,
且兩者都能劃分模塊 層次,那麼爲何一個職責明確結構分明能夠設計出複雜且邏輯性很強的系統,而另一個不行

然後想到了蛋炒飯和蓋澆飯的例子:粒度問題

從結果狀態來說

面向過程只有過程(也就是函數) 組合起來也只是一堆函數
蛋炒飯只有粒(蛋粒 肉裏 飯粒 蛋飯粒 總之 他只有粒子一種形態) 組合起來也只是一堆粒子 並不能體現出之間的聯繫 只有飯和蛋融合在一起密不可分的聯繫 因爲它的結合方式是炒

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

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

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

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

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

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

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

其中 耦合性就代表着 可維護性(運行後) 複用性(編碼階段) 易擴展(持續開發) 等等等等

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

種類 和 數量
世間若只有數 便只能產生有1 2 3 4 12 13 14 即使複製出再多數字相疊加 也沒有什麼不同
世間有數和文字 還有 那麼不僅會有1 2 3 4 而且還會有 1拍1 一隻小貓坐飛機

一生二 二生三 三生萬物 可惜生成的萬物還是侷限於”一”中

參考鏈接:
http://www.cnblogs.com/gfsoft/archive/2007/01/13/619765.html

http://www.cnblogs.com/dbEssay/p/6358253.html

http://blog.csdn.net/kp_liu/article/details/38042975

http://blog.csdn.net/shznt/article/details/50382942

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