帶你理解面向過程與面向對象

START

在這裏插入圖片描述

一、前言

如果你總是對面向對象和麪向過程傻傻分不清,這篇博客儘量會用通俗的方式來講解。

二、面向過程

概念

面向過程是一種以過程爲中心的編程思想,面向過程編程是基於“馮·諾依曼”模型的。在這種模型中,程序與變量一起存儲,程序中包含一系列指令,並把這些指令以函數的方式組織起來。

特性

自頂向下、逐步求精、模塊化

優點

性能比面向對象高,因爲類調用需要實例化,開銷比較大,比較消耗資源。

如單片機、嵌入式開發、Linux/Unix等一般採用面向過程開發,因爲在它們看來性能是最重要的因素。

缺點

沒有面向對象易維護、易複用、易擴展

(按照面向過程的思想,在解決問題時,各函數之間是爲了這個問題服務;而面向對象的思想,則是站在提出問題的主體的角度去解決問題,可將解決這一具體問題的步驟,抽象爲解決這一類問題的方法,以後再遇到類似的問題,可以複用解決思路)

三、面向對象

概念

面向對象是按人們認識客觀世界的系統思維方式,採用基於對象(實體)的概念建立模型,模擬客觀世界分析、設計、實現軟件的方法。通過面向對象的理念,將計算機軟件系統能與現實世界中的系統一一對應。

特性

封裝、繼承、多態

(後續會有文章說明這三個特性)

優點

易維護、易複用、易擴展(在解釋面向過程的缺點時有對面向對象的優點進行解釋)

缺點

性能比面向過程低

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

面向過程是直接將解決問題的步驟分析出來,然後用函數把步驟一步一步實現,然後再依次調用就可以了;而面向對象是將構成問題的事物,分解成若干個對象,建立對象的目的不是爲了完成一個步驟,而是爲了描述某個事物在解決問題過程中的行爲。

面向過程思想偏向於我們做一件事的流程,首先做什麼,其次做什麼,最後做什麼。

面向對象思想偏向於瞭解一個人,這個人的性格、特長是怎麼樣的,有沒有遺傳到什麼能力,有沒有家族病史。

打個比方,分別求出長方形、圓形的周長和麪積。

面向過程會以,求解數學題的思路去思考:

  1. 設定長方形的長和寬分別爲x和y,圓的半徑爲r

  2. 確定長方形、圓形的周長和麪積的算法

  3. 編寫出兩個計算周長和麪積的函數

  4. 將x、y和r傳入相對應的函數,求解長方形、圓形的周長和麪積

面向對象會以,描述對象的思路去思考:

  1. 對規則圖形的一般屬性和性質進行定義,如周長和麪積

  2. 在規則圖形的基礎上,創建長方形,描述長方形的屬性和性質

  3. 在規則圖形的基礎上,創建圓形,描述圓的屬性和性質

  4. 分別創建長方形和圓形的對象,調用它們的周長和麪積函數,以求解長方形、圓形的周長和麪積

面向過程是從細節出發,將問題細化爲先後步驟;

面向對象從宏觀出發,重在模擬整個情境中各個要素之間的交互。

五、面向對象的特點

在瞭解其特點之前,咱們先談談對象,對象就是現實世界存在的任何事務都可以稱之爲對象,有着自己獨特的個性

屬性用來描述具體某個對象的特徵。比如小楊身高178M,體重65KG,這裏身高、體重都是屬性。
面向對象的思想就是把一切都看成對象,而對象一般都由屬性+方法組成!

屬性屬於對象靜態的一面,用來形容對象的一些特性,方法屬於對象動態的一面,咱們舉一個例子,小楊會跑,會說話,跑、說話這些行爲就是對象的方法!所以爲動態的一面, 我們把屬性和方法稱爲這個對象的成員!

:具有同種屬性的對象稱爲類,是個抽象的概念。比如“人”就是一類,期中有一些人名,比如小明、小紅、小玲等等這些都是對象,類就相當於一個模具,他定義了它所包含的全體對象的公共特徵和功能,對象就是類的一個實例化,小明就是人的一個實例化!我們在做程序的時候,經常要將一個變量實例化,就是這個原理!我們一般在做程序的時候一般都不用類名的,比如我們在叫小明的時候,不會喊“人,你幹嘛呢!”而是說的是“小明,你在幹嘛呢!”

面向對象有三大特性,分別是封裝性、繼承性和多態性,這裏小編不給予太多的解釋,因爲在後邊的博客會專門總結的!

六、舉例說明面向過程與面向對象

面向過程——五子棋

1、開始遊戲

2、黑子先走

3、繪製畫面

4、判斷輸贏

5、輪到白子

6、繪製畫面

7、判斷輸贏

8、返回步驟

9、輸出最後結果

大家可以看出,把上面每個步驟用不同的方法來實現。

面向對象——五子棋

面向對象的設計則是從另外的思路來解決問題。

1、黑白雙方,這兩方的行爲是一模一樣的。

2、棋盤系統,負責繪製畫面。

3、規則系統,負責判定諸如犯規、輸贏等。

第一類對象(玩家對象)負責接受用戶輸入,並告知第二類對象(棋盤對象)棋子佈局的變化,棋盤對象接收到了棋子的變化就要負責在屏幕上面顯示出這種變化,同時利用第三類對象(規則系統)來對棋局進行判定。

可以明顯地看出,面向對象是以功能來劃分問題,而不是步驟。同樣是繪製棋局,這樣的行爲在面向過程的設計中分散在了多個步驟中,很可能出現不同的繪製版本,因爲通常設計人員會考慮到實際情況進行各種各樣的簡化。而面向對象的設計中,繪圖只可能在棋盤對象中出現,從而保證了繪圖的統一。

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