1. 程式人生 > >如何理解面向物件與面向過程的區別

如何理解面向物件與面向過程的區別

1.面向物件和麵向過程的本質是什麼?

面向物件與面向過程本質來說都是程式碼結構的設計或者思想,而程式設計則是通過程式語言將事物的邏輯根據需求描述出來,所以我覺得並不能說Java就是一種面向物件的語言,而c就是一種面向過程的語言,我的理解是Java內建的語法對面向物件的程式碼結構支援比較好。

2.為什麼先出現面向過程後出現面向過程?

現代社會中一個新事物或者新概念的出現往往是伴隨著需求而產生的。

比如我想要去一個很遠的地方,但步行的時間太長,人們無法接受,所以慢慢的自行車,摩托車,汽車,飛機等交通工具就被髮明和創造出來。

而以程式設計的發展史為例,一開始的軟體都比較簡單,常常只是執行單一的功能,例如計算加減,所以面向過程的程式碼結構已經足以滿足需求。

但隨著人類社會的不斷髮展,對計算機的功能要求也不斷提高,需要計算機為我們的生活提供更大的便利,例如幫我們管理一個大公司的運營,從而出現數之不盡的管理系統。

3.應該如何理解

以面向物件的三大特性,繼承,封裝,多型為引子。

假設一個公司有ABCD四個部門,每個部門都有自己的工作內容,例如開會,彙報,總結資料,那麼各個的部門的工作內容都可以定義為

function A_開會  function A_彙報  function A_總結資料  function A_自己的工作

function B_開會  function B_彙報  function B_總結資料  function B_自己的工作

function C_開會  function C_彙報  function C_總結資料  function C_自己的工作

function D_開會  function D_彙報  function D_總結資料  function D_自己的工作

 

如果把它們每個部門歸類,那就變成以下形式

A {
  function 開會
    function 彙報
  function 總結資料
  function 做自己的工作
}

B {
  function 開會
  function 彙報
  function 總結資料
  function 做自己的工作
}

C {
  function 開會
  function 彙報
  function 總結資料
  function 做自己的工作
}

D {
  function 開會
  function 彙報
  function 總結資料
  function 做自己的工作
}

 

這個時候類的概念就呼之欲出了,也是一種抽象的體現,然後我們進一步發現不同部門裡做的很多工作性質都是一樣的,都是開會,只是討論的問題不同,這個時候我們又可以抽象出一個部門類出來

Department {
  function 開會
  function 彙報
  function 總結資料
}

 

而各個部門就去繼承部門類,實現各自具體的工作細節,繼承的概念就體現了,而每一個部門所做的事都封裝在各自類中的方法裡,封裝的概念也體現了。

至於多型往往體現在繼承體系中方法的過載,如下程式碼所示

class Father {
    void sleep() {
        System.out.println("father is sleeping");
    }
}
class Son extends Father {
    @Override
    void sleep() {
        System.out.println("son is sleeping");
    }
}

public class Test{
    public static void main(String[] args){
        Father son = new Son();
        son.sleep();
    }
}
控制檯列印
son is sleeping

 

父類引用指向子類物件,呼叫方法時會呼叫子類的實現,而不是父類的實現,也就是說我們可以在程式碼執行中根據具體角色去動態的執行相應的方法,

例如訂單模組中根據選擇的優惠去生成不同的優惠物件進而執行不同的優惠實現

4.總結

面向過程可以理解為根據事物發展的順序序列的執行相應的程式碼,正如編年史的製作,將各個事物的發展按照時間的年限逐步講述

面向物件則將將事物抽象化,總結歸類並根據抽象後的規律執行,正如紀傳史,根據一個起點描述出一個巨集偉的故事

當然面向物件思想的出現也是因為有了複雜而巨集大的系統需求應運而生

&n