如果你總是對物件導向和面向過程傻傻分不清,這篇部落格盡量會用通俗的方式來講解。
面向過程是直接將解決問題的步驟分析出來,然後用函式把步驟一步一步實現,然後再依次呼叫就可以了;而物件導向是將構成問題的事物,分解成若干個物件,建立物件的目的不是為了完成乙個步驟,而是為了描述某個事物在解決問題過程中的行為。
面向過程思想偏向於我們做一件事的流程,首先做什麼,其次做什麼,最後做什麼。
物件導向思想偏向於了解乙個人,這個人的性格、特長是怎麼樣的,有沒有遺傳到什麼能力,有沒有家族病史。
打個比方,分別求出長方形、圓形的周長和面積。
面向過程會以,求解數學題的思路去思考:
設定長方形的長和寬分別為x和y,圓的半徑為r
確定長方形、圓形的周長和面積的演算法
編寫出兩個計算周長和面積的函式
將x、y和r傳入相對應的函式,求解長方形、圓形的周長和面積
物件導向會以,描述物件的思路去思考:
對規則圖形的一般屬性和性質進行定義,如周長和面積
在規則圖形的基礎上,建立長方形,描述長方形的屬性和性質
在規則圖形的基礎上,建立圓形,描述圓的屬性和性質
分別建立長方形和圓形的物件,呼叫它們的周長和面積函式,以求解長方形、圓形的周長和面積
面向過程是從細節出發,將問題細化為先後步驟;
物件導向從巨集觀出發,重在模擬整個情境中各個要素之間的互動。
下邊面向過程和物件導向的概念,想先看概念的小夥伴可以先往下翻。小編在找資料的時候翻到這麼一篇文章,寫得真的不錯:物件導向與面向過程的本質的區別
。但是小編想改個比較宜家宜室一點。
面向過程——蛋炒飯
在製作蛋炒飯之前,我們需要知道製作蛋炒飯的步驟:①將飯煮熟②將油倒進鍋中預熱③飯倒進鍋裡炒③將雞蛋打入鍋中持續翻炒1~2分鐘④出鍋。
大家可以看出,製作蛋炒飯是有步驟需要一步步進行的,而且製作出來後,想換成玉公尺炒飯,就只能把蛋炒飯倒掉,重新做乙份玉公尺炒飯了。
物件導向——快餐盒飯
我們開啟快餐盒,可以看到固定的搭配:一菜一肉一飯。這一菜一肉我們可以根據快餐店給出的選單來選擇。
快餐盒飯可以在固定的搭配模型下,自由組合多種套飯,如果想吃玉公尺不想吃生菜,換就行了。
從這裡可以看出,蛋炒飯是蛋和飯均勻混合,你中有我,我中有你,難捨難分,換個術語來說,就是耦合度高。而快餐盒飯勝在菜、肉、飯分離,想換就換,耦合度低。
(耦合度:各模組間相互聯絡程度的度量)
可維護性表現在3個方面:可理解性、可測試性和可修改性。
在蛋炒飯中,需要了解食材的屬性和性質,後續才***,需要在食材沒被炒熟之前就去了解它們的味道,而且炒出來之後,蛋炒飯就是蛋炒飯,沒辦法將蛋炒飯,重新換成玉公尺炒飯。但是蛋炒飯入味均勻,很香很好吃。
而快餐盒飯的單選單肉,(理想狀態下)是可以挨個品嚐的,而且我們可以不需要知道這個菜是怎麼炒出來的,直接吃就行。雖然可以換菜色,但是沒那麼入味。
所以面向過程相對於物件導向,可維護性沒那麼好,但是面向過程在效能方面是優越於物件導向的。
面向過程
概念面向過程是一種以過程為中心的程式設計思想,面向過程程式設計是基於「馮·諾依曼」模型的。在這種模型中,程式與變數一起儲存,程式中包含一系列指令,並把這些指令以函式的方式組織起來。
特性自頂向下、逐步求精、模組化
優點效能比物件導向高,因為類呼叫需要例項化,開銷比較大,比較消耗資源。
如微控制器、嵌入式開發、linux/unix等一般採用面向過程開發,因為在它們看來效能是最重要的因素。
缺點沒有物件導向易維護、易復用、易擴充套件
(按照面向過程的思想,在解決問題時,各函式之間是為了這個問題服務;而物件導向的思想,則是站在提出問題的主體的角度去解決問題,可將解決這一具體問題的步驟,抽象為解決這一類問題的方法,以後再遇到類似的問題,可以復用解決思路)
物件導向
概念物件導向是按人們認識客觀世界的系統思維方式,採用基於物件(實體)的概念建立模型,模擬客觀世界分析、設計、實現軟體的方法。通過物件導向的理念,將計算機軟體系統能與現實世界中的系統一一對應。
特性封裝、繼承、多型、抽象
(後續會有文章說明這四個特性)
優點易維護、易復用、易擴充套件(在解釋面向過程的缺點時有對物件導向的優點進行解釋)
缺點效能比面向過程低(同上)
之前寫文章的時候,只是帶著記錄給自己看的目的,直到被一位大佬提醒——你的文章除了你,還有其他人會帶著同樣的問題來看的!!
現在,重新動筆,從基礎開始寫。看完文章之後的朋友,如果文章有感覺晦澀不通順的地方,感謝指出!!
引用:[1]劉曉崢.**面向過程與物件導向程式設計思想之異同[j].科技資訊,2011(03):501-502.
[2]物件導向與面向過程的本質的區別
[3]物件導向與面向過程語言的區別
物件導向與面向過程區別
物件導向是以事物為中心的程式設計思想,把構建問題事務分解成各個物件,建立物件的目的是為了描述某個事物在整個解決問題的步驟中的行為 面向過程是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用時依次呼叫就可以了 區別 物件導向程式設計,往往是從問題的一部分著手,一點一點地構建出整個程式...
物件導向與面向過程的區別
面向過程就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候乙個乙個依次呼叫就可以了。物件導向是把構成問題事務分解成各個物件,建立物件的目的不是為了完成乙個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。例如五子棋,面向過程的設計思路就是首先分析問題的步驟 1 開始遊...
面向過程與物件導向的區別
面向過程 1 現實世界是物件,分析階段是物件,在設計及開發階段是方法與方法之間的呼叫,與現實世界 分析階段不統一,容易出現偏差,增加了開發的難度,容易 出問題。2 因為方法與方法之間的直接呼叫,讓我們系統依賴底層具體實現,而不是 依賴高層概念及巨集觀的商業邏輯。3 方法與方法之間有呼叫 的藕合度太,...