日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

面向對象和面向過程:兩種程序設計思想的基礎介紹和對比

作者:修茍也要敲代碼嘛 更新時間: 2022-09-25 編程語言

目錄

面向過程

數據結構(Data Structure)?

算法(Algorithm)

面向對象

對象

封裝

面向程序和面向對象的對比討論

1.用一個形象的例子再次辨析兩種思想:

2.面向程序和面向對象優勢比較

結語


面向過程

面向過程:程序=算法+數據結構

面向過程的核心理念是“步驟分解”,即把需要解決的問題分成一個個步驟,并用不同函數來實現它們。設計思維“自頂向下,逐步求精”,按照邏輯順序從上到下完成整個過程的編寫。

讓我們用一個簡單的數學問題來更好地理解面向過程的特征:求解一個長方形的周長和面積

//使用面向過程設計思想求長方形周長面積
#include <iostream>
using namespace std;

double Peri(double a, double b) { //周長函數實現求周長需求
	double peri;
	peri = 2 * a + 2 * b;
	return peri;
}


double Area(double a, double b) { //面積函數實現求面積需求
	double area;
	area = a * b;
	return area;
}

int main() {
	double a, b;
	double z, m;
	cout << "請輸入長方形的兩條邊長," << endl;
	cin >> a >> b;
	Peri(a, b);
	z = Peri(a, b);
	cout << "長方形的周長為" << z << endl;
	Area(a, b);
	m = Area(a, b);
	cout << "長方形的面積為" << m << endl;
	return 0;

}

附上對數據結構和算法定義的簡單介紹:

數據結構(Data Structure)?

指解決某一特定問題的數據集合的組織表示,包括數據本身內容和數據之間的關系。

相關知識點:棧和隊列;數組;串;樹;圖

算法(Algorithm)

指求解問題的抽象思路,輸入的數據經過程序加工后得到輸出結果。

算法和程序的區別:算法是抽象步驟,指導程序解決問題;程序是具體實現,是算法的具象化,有很多種計算機語言的版本。

面向對象

面向對象:程序=(對象+對象+對象+.......)+信息(起啟動作用)

對象=算法+數據結構

?比起面向過程是按照步驟一步步進行,面向對象設計著重于研究每個對象在解決問題過程中的行為,把程序看作一系列對象的總和。以下將通過對對象,封裝概念的介紹幫助讀者進一步理解面向對象程序設計思路。(此處篇幅原因只是簡單介紹,關于對象和類的詳細文章可見主頁)

對象

對象是靜態屬性動態行為(此處行為指對象根據外界信息的反應)構成的單元。

以按鈕為例,靜態屬性就是它的顏色,大小,材質,動態行為就是摁下按鈕以后會發生的事。

在c++語言中,每個對象都是由數據和函數兩部分組成,數據可以視作靜態屬性,而函數就是動態行為。

封裝

在面向過程程序設計中,所有的數據和函數都是公開透明的,一個函數能用任意一組數據,一組數據能被多個函數利用,因此,一旦程序報錯,找到具體的錯誤步驟將會變得尤為艱難,導致管控不利。

這一缺點在面向對象思維中被妥善解決:封裝處理讓對象的一部分屬性和功能轉為私密,從外看不到不可知。使用者不再需要了解內部細節,只需要從外部操作。(類比機器使用,我們只需要知道摁什么按鈕能實現什么功能,而不用了解這些按鈕背后的原理。)

類是一種數據類型,是對象封在一起的集合體。可以把類通俗地理解為數學里的集合概念(僅供理解,并不完全相同),它代表了某一批對象的特征和共性,同時真正體現了封裝概念。以下程序進行了類格式的簡單介紹。

//類的格式(詳細介紹請見主頁文章)
class 類名
{
private:  //私密部分,只能被類內函數調用
    數據;
    函數;
public:
    數據;
    函數; //公開部分,類內類外自由調用
protected:
    數據;
    函數;//受保護部分,只允許在類中派生類使用
}

總結一下,面向對象關注的只有以下兩點

1.設計對象,實現操作數據和操作數據的函數的組合

2.怎么發送指令,完成任務

以下是用面向對象思維的具體案例:求解長方形的周長和面積,可以和之前面向過程的對比食用哦。

//使用面向對象程序設計思想求長方體周長和面積
class rectangle //定義類:長方體
{
private:
double a;//定義長
double b;//定義寬
public:
void Peri(double a,double b);
{ double peri;
	peri = 2 * a + 2 * b;
	return peri;
}

double Area(double a, double b) 
{
	double area;
	area = a * b;
	return area;
}
double z;
z=Peri(a,b);
double m;
m=Area(a,b);
cout<<"長方體周長為"<<z<<endl;
cout<<"長方體面積為"<<m<<endl;
}

面向程序和面向對象的對比討論

1.用一個形象的例子再次辨析兩種思想:

面向程序就像是看著烘培課程做蛋糕,需要搞清楚每一步要做什么,打幾個雞蛋,放多少g面粉,最后作出一個蛋糕

面向對象就像是叫外賣點一個蛋糕,打開菜單,確定要哪個,購買送到家一氣呵成,我們不再需要弄明白蛋糕是怎么做的

2.面向程序和面向對象優勢比較

面向程序的優勢:效率高

面向對象其實就是在面向程序的基礎上再進行了對象化封裝處理,相當于在面向程序的代碼上再加工,所以單論運行效率一定是面向程序高于面向對象。

面向對象的優勢:封裝,繼承性,多態性,擴展性強,易維護

封裝:見上文

繼承性:在定義和實現一個類的時候,可以在一個已經存在的類的基礎之上來進行,把這個已經存在的類所定義的內容作為自己的內容,并加入若干新的內容。

在軟件開發中,類的繼承性使所建立的軟件具有開放性、可擴充性,這是信息組織與分類的行之有效的方法,它簡化了對象、類的創建工作量,增加了代碼的可重用性,從而大大提高了工作效率。

多態性:相同函數落在不同的數據上能得到不同結果,允許每個對象以適合自身的方式去響應共同的消息。

擴展性強:如果在原來的基礎上需要增加需求,只需要在類中整體修改,不需要再一行一行代碼進行修改。

易維護:如果出錯,可以較為精準地定位到出錯的對象從而排查出錯誤代碼,面向程序需要一行一行檢查。


結語

? ? ? ? 初學者學習c++時,首先接觸到的往往是面向程序思想,因為它和人的思考邏輯順序一致,易于被理解,在編程時,我們總會不自覺地去考慮怎么來完成某一需求,分析出具體的步驟,然后按照步驟來一步步實現。但是在現實 活當中,并不是每一件事都可以自己獨立來完成,需要多人合作才可以完成某一項復雜的工作。這樣來看的話,面向對象思想似乎更符合人們的做事方式,也更生活化。

原文鏈接:https://blog.csdn.net/liu_shu_hong/article/details/127031219

欄目分類
最近更新