網站首頁 編程語言 正文
目錄
面向過程
數據結構(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
相關推薦
- 2023-02-05 C語言模擬實現memmove的示例代碼_C 語言
- 2022-10-05 C++淺析數據在內存中如何存儲_C 語言
- 2022-12-05 Spark中的數據讀取保存和累加器實例詳解_相關技巧
- 2022-08-13 Redis 性能影響 - 內存碎片和緩沖區
- 2022-04-22 Element UI 表格操作列按鈕顯示不全
- 2022-09-29 C#/VB.NET中從?PDF?文檔中提取所有表格_C#教程
- 2022-06-16 基于Python+Matplotlib實現直方圖的繪制_python
- 2023-02-10 docker容器間互相訪問(docker?bridge網絡)_docker
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支