什么是面向过程
面向过程就是指分析解决一个问题或者需求所需要的步骤,把步骤都封装成对应的事件函数,再按步骤去调用对应的函数。
举个栗子:
如何通过面向过程编程实现一个五子棋小游戏?
首先五子棋的游戏过程是:
开始游戏
黑子先走
绘制画面
判断输赢
轮到白子
绘制画面
判断输赢
重复步骤
输出最后结果
下五子棋 {
开始游戏()
黑子先走()
绘制画面()
判断输赢()
轮到白子()
绘制画面()
判断输赢()
返回到 黑子先走()
输出最后结果
}
复制代码
由此可见,面向过程函数,是通过一次次调用对应的步骤函数,通过输赢函数来判断是否结束函数还是重复调用步骤函数,直至出现输赢后结束函数。
什么是面向对象
面向对象编程不是通过封装步骤函数来实现,而是把很多事物都看成一个对象,把要解决的问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个对象在整个解决问题的步骤中的属性和行为。对象与对象之间通过方法来交互。
如何通过面向对象编程实现一个五子棋小游戏?
首先将整个五子棋游戏分为三个对象:
黑白双方,棋子的行为和属性基本是一样的。通过颜色属性控制黑白双方,行为都是负责接收用户输入,并告知棋盘系统棋子布局的变化,以及通知规则系统判断输赢
棋盘系统,负责绘制画面。通过接收到黑白双方棋子的变化,负责在棋盘上绘制出这种变化
规则系统,负责判定犯规、输赢等。通过接收到黑白双方棋子的变化,判定当前棋局的输赢
由此可见,面向对象是以功能来划分问题,而不是以步骤解决。
优缺点
面向过程
优点:步骤清晰,性能高
缺点:难以维护、代码复用性低、不易扩展
面向对象
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态三个特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护
缺点:性能低,需要实例化等,开销比较大,比较消耗资源
面向对象的三大特征之封装、继承、多态
封装
所谓封装:也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装是面向对象的特征之一,是对象和类概念的主要特性。 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。
继承
所谓继承:是指可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。继承概念的实现方式有二类:实现继承与接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;
多态
所谓多态:就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。