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

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

面向?qū)ο蠛兔嫦蜻^(guò)程:兩種程序設(shè)計(jì)思想的基礎(chǔ)介紹和對(duì)比

作者:修茍也要敲代碼嘛 更新時(shí)間: 2022-09-25 編程語(yǔ)言

目錄

面向過(guò)程

數(shù)據(jù)結(jié)構(gòu)(Data Structure)?

算法(Algorithm)

面向?qū)ο?/p>

對(duì)象

封裝

面向程序和面向?qū)ο蟮膶?duì)比討論

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

2.面向程序和面向?qū)ο髢?yōu)勢(shì)比較

結(jié)語(yǔ)


面向過(guò)程

面向過(guò)程:程序=算法+數(shù)據(jù)結(jié)構(gòu)

面向過(guò)程的核心理念是“步驟分解”,即把需要解決的問(wèn)題分成一個(gè)個(gè)步驟,并用不同函數(shù)來(lái)實(shí)現(xiàn)它們。設(shè)計(jì)思維“自頂向下,逐步求精”,按照邏輯順序從上到下完成整個(gè)過(guò)程的編寫。

讓我們用一個(gè)簡(jiǎn)單的數(shù)學(xué)問(wèn)題來(lái)更好地理解面向過(guò)程的特征:求解一個(gè)長(zhǎng)方形的周長(zhǎng)和面積

//使用面向過(guò)程設(shè)計(jì)思想求長(zhǎng)方形周長(zhǎng)面積
#include <iostream>
using namespace std;

double Peri(double a, double b) { //周長(zhǎng)函數(shù)實(shí)現(xiàn)求周長(zhǎng)需求
	double peri;
	peri = 2 * a + 2 * b;
	return peri;
}


double Area(double a, double b) { //面積函數(shù)實(shí)現(xiàn)求面積需求
	double area;
	area = a * b;
	return area;
}

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

}

附上對(duì)數(shù)據(jù)結(jié)構(gòu)和算法定義的簡(jiǎn)單介紹:

數(shù)據(jù)結(jié)構(gòu)(Data Structure)?

指解決某一特定問(wèn)題的數(shù)據(jù)集合的組織表示,包括數(shù)據(jù)本身內(nèi)容和數(shù)據(jù)之間的關(guān)系。

相關(guān)知識(shí)點(diǎn):棧和隊(duì)列;數(shù)組;串;樹(shù);圖

算法(Algorithm)

指求解問(wèn)題的抽象思路,輸入的數(shù)據(jù)經(jīng)過(guò)程序加工后得到輸出結(jié)果。

算法和程序的區(qū)別:算法是抽象步驟,指導(dǎo)程序解決問(wèn)題;程序是具體實(shí)現(xiàn),是算法的具象化,有很多種計(jì)算機(jī)語(yǔ)言的版本。

面向?qū)ο?/h1>

面向?qū)ο螅撼绦?(對(duì)象+對(duì)象+對(duì)象+.......)+信息(起啟動(dòng)作用)

對(duì)象=算法+數(shù)據(jù)結(jié)構(gòu)

?比起面向過(guò)程是按照步驟一步步進(jìn)行,面向?qū)ο笤O(shè)計(jì)著重于研究每個(gè)對(duì)象在解決問(wèn)題過(guò)程中的行為,把程序看作一系列對(duì)象的總和。以下將通過(guò)對(duì)對(duì)象,封裝概念的介紹幫助讀者進(jìn)一步理解面向?qū)ο蟪绦蛟O(shè)計(jì)思路。(此處篇幅原因只是簡(jiǎn)單介紹,關(guān)于對(duì)象和類的詳細(xì)文章可見(jiàn)主頁(yè))

對(duì)象

對(duì)象是靜態(tài)屬性動(dòng)態(tài)行為(此處行為指對(duì)象根據(jù)外界信息的反應(yīng))構(gòu)成的單元。

以按鈕為例,靜態(tài)屬性就是它的顏色,大小,材質(zhì),動(dòng)態(tài)行為就是摁下按鈕以后會(huì)發(fā)生的事。

在c++語(yǔ)言中,每個(gè)對(duì)象都是由數(shù)據(jù)和函數(shù)兩部分組成,數(shù)據(jù)可以視作靜態(tài)屬性,而函數(shù)就是動(dòng)態(tài)行為。

封裝

在面向過(guò)程程序設(shè)計(jì)中,所有的數(shù)據(jù)和函數(shù)都是公開(kāi)透明的,一個(gè)函數(shù)能用任意一組數(shù)據(jù),一組數(shù)據(jù)能被多個(gè)函數(shù)利用,因此,一旦程序報(bào)錯(cuò),找到具體的錯(cuò)誤步驟將會(huì)變得尤為艱難,導(dǎo)致管控不利。

這一缺點(diǎn)在面向?qū)ο笏季S中被妥善解決:封裝處理讓對(duì)象的一部分屬性和功能轉(zhuǎn)為私密,從外看不到不可知。使用者不再需要了解內(nèi)部細(xì)節(jié),只需要從外部操作。(類比機(jī)器使用,我們只需要知道摁什么按鈕能實(shí)現(xiàn)什么功能,而不用了解這些按鈕背后的原理。)

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

//類的格式(詳細(xì)介紹請(qǐng)見(jiàn)主頁(yè)文章)
class 類名
{
private:  //私密部分,只能被類內(nèi)函數(shù)調(diào)用
    數(shù)據(jù);
    函數(shù);
public:
    數(shù)據(jù);
    函數(shù); //公開(kāi)部分,類內(nèi)類外自由調(diào)用
protected:
    數(shù)據(jù);
    函數(shù);//受保護(hù)部分,只允許在類中派生類使用
}

總結(jié)一下,面向?qū)ο箨P(guān)注的只有以下兩點(diǎn)

1.設(shè)計(jì)對(duì)象,實(shí)現(xiàn)操作數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)的組合

2.怎么發(fā)送指令,完成任務(wù)

以下是用面向?qū)ο笏季S的具體案例:求解長(zhǎng)方形的周長(zhǎng)和面積,可以和之前面向過(guò)程的對(duì)比食用哦。

//使用面向?qū)ο蟪绦蛟O(shè)計(jì)思想求長(zhǎng)方體周長(zhǎng)和面積
class rectangle //定義類:長(zhǎng)方體
{
private:
double a;//定義長(zhǎng)
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<<"長(zhǎng)方體周長(zhǎng)為"<<z<<endl;
cout<<"長(zhǎng)方體面積為"<<m<<endl;
}

面向程序和面向?qū)ο蟮膶?duì)比討論

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

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

面向?qū)ο缶拖袷墙型赓u點(diǎn)一個(gè)蛋糕,打開(kāi)菜單,確定要哪個(gè),購(gòu)買送到家一氣呵成,我們不再需要弄明白蛋糕是怎么做的

2.面向程序和面向?qū)ο髢?yōu)勢(shì)比較

面向程序的優(yōu)勢(shì):效率高

面向?qū)ο笃鋵?shí)就是在面向程序的基礎(chǔ)上再進(jìn)行了對(duì)象化封裝處理,相當(dāng)于在面向程序的代碼上再加工,所以單論運(yùn)行效率一定是面向程序高于面向?qū)ο蟆?/p>

面向?qū)ο蟮膬?yōu)勢(shì):封裝,繼承性,多態(tài)性,擴(kuò)展性強(qiáng),易維護(hù)

封裝:見(jiàn)上文

繼承性:在定義和實(shí)現(xiàn)一個(gè)類的時(shí)候,可以在一個(gè)已經(jīng)存在的類的基礎(chǔ)之上來(lái)進(jìn)行,把這個(gè)已經(jīng)存在的類所定義的內(nèi)容作為自己的內(nèi)容,并加入若干新的內(nèi)容。

在軟件開(kāi)發(fā)中,類的繼承性使所建立的軟件具有開(kāi)放性、可擴(kuò)充性,這是信息組織與分類的行之有效的方法,它簡(jiǎn)化了對(duì)象、類的創(chuàng)建工作量,增加了代碼的可重用性,從而大大提高了工作效率。

多態(tài)性:相同函數(shù)落在不同的數(shù)據(jù)上能得到不同結(jié)果,允許每個(gè)對(duì)象以適合自身的方式去響應(yīng)共同的消息。

擴(kuò)展性強(qiáng):如果在原來(lái)的基礎(chǔ)上需要增加需求,只需要在類中整體修改,不需要再一行一行代碼進(jìn)行修改。

易維護(hù):如果出錯(cuò),可以較為精準(zhǔn)地定位到出錯(cuò)的對(duì)象從而排查出錯(cuò)誤代碼,面向程序需要一行一行檢查。


結(jié)語(yǔ)

? ? ? ? 初學(xué)者學(xué)習(xí)c++時(shí),首先接觸到的往往是面向程序思想,因?yàn)樗腿说乃伎歼壿嬳樞蛞恢拢子诒焕斫猓诰幊虝r(shí),我們總會(huì)不自覺(jué)地去考慮怎么來(lái)完成某一需求,分析出具體的步驟,然后按照步驟來(lái)一步步實(shí)現(xiàn)。但是在現(xiàn)實(shí) 活當(dāng)中,并不是每一件事都可以自己獨(dú)立來(lái)完成,需要多人合作才可以完成某一項(xiàng)復(fù)雜的工作。這樣來(lái)看的話,面向?qū)ο笏枷胨坪醺先藗兊淖鍪路绞剑哺罨?/p>

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

欄目分類
最近更新