面向对象和面向过程:两种程序设计思想的基础介绍和对比

一、面向过程程序设计

面向过程:程序=算法+数据结构

面向过程的核心理念是“步骤分解”,即把需要解决的问题分成一个个步骤,并用不同函数来实现它们。设计思维“自顶向下,逐步求精”,按照逻辑顺序从上到下完成整个过程的编写。

让我们用一个简单的数学问题来更好地理解面向过程的特征:求解一个长方形的周长和面积

//使用面向过程设计思想求长方形周长面积
#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)

指求解问题的抽象思路,输入的数据经过程序加工后得到输出结果。

算法和程序的区别:算法是抽象步骤,指导程序解决问题;程序是具体实现,是算法的具象化,有很多种计算机语言的版本。

二、面向对象程序设计

面向对象:程序=(对象+对象+对象+.......)+信息(起启动作用)

对象=算法+数据结构

 比起面向过程是按照步骤一步步进行,面向对象设计着重于研究每个对象在解决问题过程中的行为,把程序看作一系列对象的总和。以下将通过对对象,封装概念的介绍帮助读者进一步理解面向对象程序设计思路。(此处篇幅原因只是简单介绍,关于对象和类的详细文章可见主页)

1.对象

对象是静态属性动态行为(此处行为指对象根据外界信息的反应)构成的单元。

以按钮为例,静态属性就是它的颜色,大小,材质,动态行为就是摁下按钮以后会发生的事。

在c++语言中,每个对象都是由数据和函数两部分组成,数据可以视作静态属性,而函数就是动态行为。

2.封装

在面向过程程序设计中,所有的数据和函数都是公开透明的,一个函数能用任意一组数据,一组数据能被多个函数利用,因此,一旦程序报错,找到具体的错误步骤将会变得尤为艰难,导致管控不利。

这一缺点在面向对象思维中被妥善解决:封装处理让对象的一部分属性和功能转为私密,从外看不到不可知。使用者不再需要了解内部细节,只需要从外部操作。(类比机器使用,我们只需要知道摁什么按钮能实现什么功能,而不用了解这些按钮背后的原理。)

3.类

类是一种数据类型,是对象封在一起的集合体。可以把类通俗地理解为数学里的集合概念(仅供理解,并不完全相同),它代表了某一批对象的特征和共性,同时真正体现了封装概念。以下程序进行了类格式的简单介绍。

//类的格式(详细介绍请见主页文章)
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++时,首先接触到的往往是面向程序思想,因为它和人的思考逻辑顺序一致,易于被理解,在编程时,我们总会不自觉地去考虑怎么来完成某一需求,分析出具体的步骤,然后按照步骤来一步步实现。但是在现实 活当中,并不是每一件事都可以自己独立来完成,需要多人合作才可以完成某一项复杂的工作。这样来看的话,面向对象思想似乎更符合人们的做事方式,也更生活化。

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值