網(wǎng)站首頁(yè) 編程語(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)
面向?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
相關(guān)推薦
- 2022-09-21 Flutter定義tabbar底部導(dǎo)航路由跳轉(zhuǎn)的方法_Android
- 2022-05-10 uniapp中的@tap和@click的區(qū)別
- 2022-09-16 nginx緩存以及清除緩存的使用_nginx
- 2022-02-17 React + TS 完成 TodoList
- 2022-05-03 C#面向?qū)ο笤O(shè)計(jì)原則之接口隔離原則_C#教程
- 2022-04-17 css制作一個(gè)簡(jiǎn)單的上下跳動(dòng) 動(dòng)畫
- 2022-09-16 Pandas缺失值刪除df.dropna()的使用_python
- 2023-11-26 解決:element ui表格表頭自定義輸入框單元格el-input不能輸入問(wèn)題
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支