c++学习笔记之(oop与pop的辨析):
在学习c++之前,许多人都和我一样是接触c语言入门的,而c是一门面向过程编程(即pop)的语言。c++最开始并不叫c++,而是被称为带类的c,后来才逐渐演变成一门新的语言,而c++对比起c,最大的进步在于,他是一门支持oop(面向对象编程)的语言,然而oop和pop的概念对于初学者而言比较难以辨析,今天粗略地在这里聊聊我的拙见。
pop(面向过程编程):
pop的编程思想是把问题给步骤化,然后通过编写函数来实现这些步骤,之后按照顺序来调用函数解决问题。
优点:
1.逻辑性比较紧密,通常考虑较全面,流程化编程任务明确。
2.效率高,代码较短小精简,与数据结构知识结合容易开发出高效的程序。
3.流程明确,便于节点分析。
缺点:
1.思考内容过多,耗费大量精力
2.代码重复利用率低,维护成本高
3.难以形成模块化,模块间的耦合难度高,不适合复杂程序的开发。
oop (面向对象编程):
oop编程思想是一种高度抽象的编程思想,他认为万物皆可为对象,例如说一个变量,一个结构体,一个类,都可以是对象。
以下简述几个概念:
对象:
对象是现实世界的一种抽象,是一些可以做事情的东西,在现实世界中,类可以表示为具体的某个事物,而在面向对象的程序中,对象通常是一个类的实例,一个对象通常具有以下三种属性:
1、状态:
状态是是什么,在字典中,状态的意思是“某人或某物在特定时间点下所处之特定状况”,那什么是对象的状态,我的理解应该是对象中的变量值,这些变量值描述这个对象的状态。
2、行为:
对象的行为通常通过类中的成员函数来进行,例如说容器类中的size()便是让容器类本身返回他自身的大小。
3、标识:
标识就是对象的名字,是对象的身份特征,类似于身份证的东西。
类:
类是一些具有相同特征的物体的集合,类定义了事物的属性和行为,举个例子而言,“狗”这一个类会包含他的外形特征,以及他能做的行为能力,例如说吠叫,例如说奔跑等。
总的来说,类可以为程序提供模版和结构。类的属性和行为称为成员,如在类中定义的变量称为成员变量,用来描述类的状态,而在类中定义的函数,称为成员函数,用来描述类的行为。
封装:
封装可以将接口与程序进行分离,即把对象的属性和实现细节给隐藏起来,然后只公开对象的接口,即进行某项操作时,对象无需告知你是如何实现这个操作的,它只需要进行这个操作即可。
同时封装可以控制外部的访问权限,例如在类中public下的成员是在外部可以访问的,而private只有在类中才能够访问,即想要在外部得到private的成员数据,只能通过调用public中的成员函数,通过这个函数来获取。
这样就达到了对成员访问权限的合理控制,使不同类之间的相互影响减少到最低限度,进而增强数据的安全性和简化程序的编写工作。
继承:
即可以让某个类获得另外一个类的属性,我们将被获取的那个类称为父类,而获取属性的那个类叫做子类,一般而言,子类比父类更加具体,利用生物分类来作为例子,界门纲目科属种,如果说父类是某个目的生物,那么子类就是某种科的生物,子类的子类可以是某种属,但显然无论是科还是种,他们都继承了关于目的共同特征。
值得一提的是,在继承中,父类中public的成员是可以继承的,而private的成员则不行。继承的存在使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。
多态:
多态的意思是不同的对象由于不同的属性,在继承得到的成员函数中做出的行为可能不同,假设存在一个类叫动物,其下有一个成员函数称为“叫”;继承这一个类的子类有鸡和狗,调用叫这个成员函数时,鸡对应的行为是鸣叫,而狗对应的行为则为吠叫,这是由于不同的属性,而导致的行为不同。计算机程序运行时,相同的消息可能会送给多个不同的类别之对象,而系统可依据对象所属类别,引发对应类别的方法,而有不同的行为。
方法:
对象所能执行的行为,即成员函数称为对象的方法,在面向对象编程中,我们更应该调用对象的方法去改变对象的属性等。
以上就是oop的几个重要概念了,接下来简述一下oop的优缺点。
优点:
1、模块化,模块与模块间耦合紧密,不同的模块承担不同的任务,使得结构清晰,严谨。
2、封装性,将事务高度抽象,便于流程中的行为分析、操作;
3、代码利用率高,可多次复用,可继承,可覆盖,有好的扩展性。
4、实现简单,可有效地减少程序的维护工作量。
缺点
1、高度抽象,初学者难以理解,底层交互较少,不适合游戏开发,多媒体开发与底层开发。
2、对于事物开发而言,过度的封装会提高本身的复杂程度。
总结:
POP编程是以功能为中心来思考和组织程序,注重功能的实现,达到效果就可以了;
OOP则注重封装,以对象为中心,强调整体性,代码整体变得更规范;但是OOP的耦合性还是很高,一旦代码需要修改,会对很多类造成影响,代码冗余问题严重,而且核心业务中总夹杂着一些它并不关心的通用业务,比如日志记录、性能统计、安全控制、事务处理、异常处理等;