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


  先來看生活中的一個例子。

  想必每個人都下過五子棋吧?在下棋的整個過程中可以有兩種不同的思路來實現:

  1、按步驟來看:

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

  2、按組成模塊來看:
  (1)、黑白雙方模塊,(2)、棋盤模塊,(3)、規則模塊

  以上兩種完全不同的設計思路,正好對應於編程中完全不同的兩種思想:前者側重於游戲步驟的設計,對應於編程中的面向過程思想;后者着重於分層,有模塊化設計理念,對應於編程中的面向對象思想。可以很明顯地看出:面向對象是以功能來划分問題,而不是步驟。同樣是繪制棋局,這樣的行為在面向過程的設計中分散在了多個步驟中,很可能出現不同的繪制版本,因為通常設計人員會考慮到實際情況進行各種各樣的簡化。而面向對象的設計中,繪圖只可能在棋盤對象中出現,從而保證了繪圖的統一。

  C語言是典型的“面向過程”設計語言。面向過程就是分析出解決問題所需要的步驟,然后用函數把這些步驟一步一步實現,使用的時候一個一個依次調用就可以了。“面向過程”是一種以過程為中心的編程思想。“面向過程”也可稱之為“面向記錄”編程思想,它們不支持豐富的“面向對象”特性(比如繼承、多態)。如下圖:

  Java是典型的“面向對象”設計語言。“面向對象”是一種以事物為中心的編程思想。是把構成問題的事物分解成各個對象,建立對象的目的不是為了完成某一個步驟,而是為了描述某個事物在整個解決問題的步驟中的行為。如下圖:

  面向過程適合於一個人的小量工作,而面向對象更側重於團隊合作,需要很多人完成的大量工作。面向過程思想是我們每一個人天生具備的。在編程時,我們總會不自覺的去考慮怎么來完成某一需求,分析出具體的步驟,然后按照步驟來一步步實現。但是在現實生活當中,並不是每一件事都可以自己獨立來完成,我們需要團隊,需要合作才可以完成某一項復雜的工作。這樣來看的話,面向對象思想似乎更符合人們的做事方式,也更生活化。是的呢,不管是生活中,亦或是編程中,面向對象才是我們更應該具備的一種思想,先來看幾組概念。

  對象:對象是人們要進行研究的任何事物,從最簡單的整數到復雜的飛機等均可看做對象,它不僅能表示具體的事物,還能表示抽象的規則、計划或事件等。
  類:具有相同特性(數據元素)和行為(功能)的對象的抽象就是類。因此,對象的抽象是類,類的具體化就是對象,也可以說類的實例化是對象,類實際上就是一種數據類型。
  面向對象三大特征:封裝、繼承、多態。

  封裝:封裝是一種把代碼和代碼所操作的數據捆綁在一起,使這兩者不受外界干擾和誤用的機制。封裝可被理解為一種用作保護的包裝器,以防止代碼和數據被包裝器外部所定義的其它代碼任意訪問。
  繼承:繼承是指一個對象從另一個對象中獲得屬性和方法的過程。它支持按層次分類的概念,如果不使用層次的概念,每個對象需要明確定義各自的全部特征,通過層次分類方式,一個對象只需要在它的類中定義使它成為唯一的各個屬性和方法。
  多態:多態是指同一個實體同時具有多種形式。同一操作作用於不用的對象,可以有不同的解釋,產生不同的執行結果。在運行時,可以通過指向基類的引用,來調用實現派生類中的方法。

  面向過程
  優點:性能比面向對象高。
  缺點:沒有面向對象易維護、易復用、易擴展。
  面向對象
  優點:易維護、易復用、易擴展。由於面向對象有封裝、繼承、多態性的特征,可以設計出低耦合的系統,使系統更加靈活,更加易於維護和擴展。
  缺點:性能比面向過程低。


免責聲明!

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



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