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


前言

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

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

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

 

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

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

 

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

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

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

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

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

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

 

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

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

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

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

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

 

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

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

 

面向過程和面向對象的優缺點

下邊面向過程和面向對象的概念,想先看概念的小伙伴可以先往下翻。小編在找資料的時候翻到這么一篇文章,寫得真的不錯:面向對象與面向過程的本質的區別。但是小編想改個比較宜家宜室一點。

 

面向過程——蛋炒飯

在制作蛋炒飯之前,我們需要知道制作蛋炒飯的步驟:①將飯煮熟②將油倒進鍋中預熱③飯倒進鍋里炒③將雞蛋打入鍋中持續翻炒1~2分鍾④出鍋。

大家可以看出,制作蛋炒飯是有步驟需要一步步進行的,而且制作出來后,想換成玉米炒飯,就只能把蛋炒飯倒掉,重新做一份玉米炒飯了。

 

面向對象——快餐盒飯

我們打開快餐盒,可以看到固定的搭配:一菜一肉一飯。這一菜一肉我們可以根據快餐店給出的菜單來選擇。

快餐盒飯可以在固定的搭配模型下,自由組合多種套飯,如果想吃玉米不想吃生菜,換就行了。

 

從這里可以看出,蛋炒飯是蛋和飯均勻混合,你中有我,我中有你,難舍難分,換個術語來說,就是耦合度高。而快餐盒飯勝在菜、肉、飯分離,想換就換,耦合度低

(耦合度:各模塊間相互聯系程度的度量)

 

可維護性表現在3個方面:可理解性、可測試性和可修改性

在蛋炒飯中,需要了解食材的屬性和性質,后續才有保證,需要在食材沒被炒熟之前就去了解它們的味道,而且炒出來之后,蛋炒飯就是蛋炒飯,沒辦法將蛋炒飯,重新換成玉米炒飯。但是蛋炒飯入味均勻,很香很好吃。

而快餐盒飯的單菜單肉,(理想狀態下)是可以挨個品嘗的,而且我們可以不需要知道這個菜是怎么炒出來的,直接吃就行。雖然可以換菜色,但是沒那么入味。

所以面向過程相對於面向對象,可維護性沒那么好,但是面向過程在性能方面是優越於面向對象的。

 

面向過程

概念

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

特性

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

優點

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

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

缺點

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

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

面向對象

概念

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

特性

封裝、繼承、多態、抽象

(后續會有文章說明這四個特性)

優點

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

缺點

性能比面向過程低(同上)

結語

之前寫文章的時候,只是帶着記錄給自己看的目的,直到被一位大佬提醒——你的文章除了你,還有其他人會帶着同樣的問題來看的!!

現在,重新動筆,從基礎開始寫。看完文章之后的朋友,如果文章有感覺晦澀不通順的地方,感謝指出!!

 

引用:

[1]劉曉崢.淺析面向過程與面向對象編程思想之異同[J].科技信息,2011(03):501-502.

[2]面向對象與面向過程的本質的區別

[3]面向對象與面向過程語言的區別


免責聲明!

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



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