面向過程和物件導向的區別

2021-09-29 00:09:59 字數 3351 閱讀 4653

一開始,在我們學習程式語言時,就會接觸物件導向和面向過程的概念,比如:c語言是面向過程的語言,而c++是物件導向的語言,而且一般高校,都是先學習面向過程語言c,再學習物件導向c++,甚至一些非計算機類學習只學習面向過程的語言c,並且作為其必修課。但是,我們很少會統一系統的考慮兩者的區別。

現在,基於我們之間的乙個討論課,總結一下兩者的區別,當時也是參考了網上的很多資料,而且面向過程的資料很不好找。

學習一種語言,不僅僅是會使用,而且要掌握它的思想,這對於學習來說,起引導性作用。

面向過程的結構化程式設計思想:是採用面向過程的方法來設計結構化程式。結構化程式通常包含乙個主過程和若干個子過程,其中每個子過程都描述了某乙個小問題的解決方法,再由主過程自頂向下呼叫各子過程,來逐步解決整個問題。

如上圖所示,面向過程的程式思想是主過程->子程式->……->最底層的子過程,其執行過程是從主過程的首句開始,在主過程的結束語句處結束。下面我們用c語言來模擬一下。

int main()

//結束處

通過觀察以上c的主函式框架,我們可以,主過程對應的就是主函式,主函式開始處的「」就是程式結束的地方,其中的子過程就是c語言中的子函式、功能語句。

因此我們可以知道:結構化程式設計方法本質上就是一種數學思維或計算機思維方法,它和人們認識世界時所習慣使用的方法不同。

上面介紹的面向過程的程式設計方法,它把重點放在解決問題的過程上,其存在最大的缺點是,將資料結構和操作這些資料結構的函式分開了,操作繁瑣。所以,我們引入物件導向的程式設計思想。

物件導向的程式設計思想:其主要思想是將成員資料及處理這些資料的相應成員函式封裝到乙個類中,使用類的資料變數則稱為物件。

我們在使用物件導向的程式設計方法設計軟體系統時,首先要清楚軟體系統中的物件,在物件導向的程式設計中,物件就是將資料和對資料進行的合法操作結合於一體的抽象實體,以這種實體所構成的程式就是物件導向的程式(物件只是某個具體類的例項化,並不等價),這種思考方法是接近於人們日常思考問題的。

面向過程:是一種以過程為中心的程式設計思想。首先,我們思考問題,提取去解決問題的步驟,然後通過子過程來把這些步驟分別實行,最後在主過程中按照需要重新組合呼叫,最終達到所需要的結果就好。

其實,面向過程的程式設計思想是最為實際的一種思考方式,也是通過**的追溯就可以簡單的達到理解程式功能。面向過程是一種基礎的方法,它考慮的是實際地實現。一般的面向過程的方法是自頂向下設計,而且遵從模組化的設計,也就是說,將功能封裝為乙個模組,在主過程中呼叫。

當程式規模不是很大時,面向過程的方法還會體現出一種優勢,即:程式邏輯清晰流暢(按著模組與函式的方法可以很好的組織)。

這部分簡單來說就是:

物件導向 = 物件 + 類 + 繼承 + 訊息

下面,我們具體解釋一下,其中涉及到的概念。

1、物件:

2、類:

類是定義同一類所有物件的變數和方法的藍圖或原型。例如,可以建立乙個定義包含當前檔位等例項變數的自行車類。這個類也定義和提供了例項方法(變檔、剎車)的實現。例項變數的值由類的每個例項提供。因此,當你建立自行車類以後,必須在使用之前對它進行例項化。當建立類的例項時,就建立了這種型別的乙個物件,然後系統為類定義的例項變數分配記憶體。然後可以呼叫物件的例項方法實現一些功能。相同類的例項共享相同的例項方法。

也就是說:

3、訊息: 名稱

定義封裝性

把過程和資料封裝起來,對資料的訪問只能通過已定義的方法。物件導向設計始於這個基本概念,即現實世界可以被描繪成一系列完全自治、封裝的物件,這些物件通過一系列受保護的介面訪問其他物件。

繼承性是一種連線類的層次模型,並且允許和鼓勵類的重用,它提供了一種明確表達共性的方法。物件的乙個新類可以從現有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生或子類,而原始類稱為新類的基類或父類。派生類可以從父類那裡繼承方法和例項變數,並且類可以修改或增加新的方法使之更適合特殊的需要。

抽象性抽象就是忽略乙個主題中與當前目標無關的那些方面,以便更充分的注意與當前目標有關的方面。抽象並不打算了解全部問題,而是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面,一是過程抽象,而是資料抽象。

多型性多型性是指允許不同類的物件對同一訊息作出不同響應。多型性包括引數化多型性和包含多型性。多型性語言具有靈活、抽象、行為共享、**共享的優勢,很好的解決了應用程式同名的問題。

下面,我們統一的對比一下。

首先,我們看乙個比較實際的問題,從兩種程式設計思想出發,來分別解一下這個題。

}從上面的**我們可以看出來,我們是將問題分解為乙個乙個函式,然後再在主函式中按照需要呼叫就好。這裡我們自頂向下設計,首先在主函式中我們要使用求組合數的方法,所以有了int combination(int n,int m)函式,在組合數的函式中,我們需要求階乘的函式,所以有了int factorial(int n) 函式,這個也是符合我們在程式設計思想部分的內容的。

從shape類中派生出來r********類,並實現getarea()和getperimeter()兩個函式。

#include 

#include

using namespace std;

class

shape

;class

r********

:public shape

double getarea()

double getperimeter()

};int main()

從上面的例子中,我們可以發現,我們將成員資料和成員方法封裝到類中,當r********類中存在和shape類中一樣的成員方法,並且沒有實現時,我們用r********類繼承shape類,然後得到其方法並在r********類中進行實現。最後在主函式中定義物件,然後通過物件呼叫例項化物件的方法即可。

物件導向和面向過程區別

原文 面向過程就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候乙個乙個依次呼叫就可以了。物件導向是把構成問題事務分解成各個物件,建立物件的目的不是為了完成乙個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。例如五子棋,面向過程的設計思路就是首先分析問題的步驟 1 ...

物件導向和面向過程的區別

面向過程就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候乙個乙個依次呼叫就可以了。物件導向是把構成問題事務分解成各個物件,建立物件的目的不是為了完成乙個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。例如五子棋,面向過程的設計思路就是首先分析問題的步驟 1 開始遊...

物件導向和面向過程的區別

面向過程就是分析出解決問題所需要的步驟,然後用函式把這些步驟一步一步實現,使用的時候乙個乙個依次呼叫就可以了。物件導向是把構成問題事務分解成各個物件,建立物件的目的不是為了完成乙個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。例如五子棋,面向過程的設計思路就是首先分析問題的步驟 1 開始遊...