什么是面向对象

面向过程

面向过程是一种以事件为中心的编程思想,编程的时候把解决问题的步骤分析出来,然后用函数把这些步骤实现,在一步一步的具体步骤中再按顺序调用函数。


面向过程

举个例子,一个下五子棋的程序:

下五子棋{

开始游戏();
while{

黑子先走();

绘制画面();

判断输赢();

轮到白子();

绘制画面();

if 判断输赢(){
  break
}
};


输出最后结果;

}

可见,面向过程始终关注的是怎么一步一步地判断棋局输赢的,通过控制代码,从而实现函数的顺序执行。

面向对象

在工作中,简单的问题用面向过程的思路来解决直接有效。但是当问题规模变大时,用面向过程的思想是远远不够的。所以就出现了面向对象的编程思想。

世界上有很多人和事物,每一个都可以看做一个对象,而每个对象都有自己的属性和行为,对象与对象之间通过方法来交互。面向对象是一种以“对象”为中心的编程思想,把要解决的问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个对象在整个解决问题的步骤中的属性和行为。

类是一个抽象的概念,而对象是一个具体的事物。对象是基于类这个抽象的模板而建立的实例。

在下五子棋的例子中,用面向对象的方法来解决的话,首先将整个五子棋游戏分为三个类:

  • 棋子类,定义棋子,颜色,位置坐标,监听下棋动作。

  • 棋盘类,定义棋盘样式,棋谱,位置状态(是否有棋子),增加棋子动作,

  • 规则类,定义规则、判断是否犯规、输赢等。

然后基于上述类创建对象,并赋予每个对象一些属性和行为:

第一类的对象为黑棋和白棋,负责接受用户输入,并告知第二类对象(棋盘系统)棋子布局的变化,棋盘系统对象接收到了棋子的变化,并负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。

可以看出,面向对象是以功能来划分问题,而不是以步骤解决。比如绘制画面这个行为,在面向过程中是分散在了多个步骤中的,可能会出现不同的绘制版本。
比如要加入悔棋的功能,如果要改动面向过程的设计,那么从输入到判断到显示这一连串的步骤和顺序都要改动。如果是面向对象的话,只用改动棋盘对象就行了,棋盘系统保存了黑白双方的棋谱,回溯就可以了,而显示和规则判断则不用 顾及,同时整个对对象功能的调用顺序都没有变化,改动只是局部的。

类,与类的特性

类是同一类事物的统称。如个人证件作为一类都有id,姓名,年龄,照片的属性,都具有验证本人身份的功能

1. 封装

将对象的属性和行为封装起来,只通过对象访问属性或者方法。还可以设置访问权限。

2. 继承

假如想建立驾照类时,我们想到可以将个人证件类拿来复用,保留个人证件具有的属性和方法,但是不具有驾驶信息的属性和合法开车的功能。

3. 多态

一个类可以继承多种接口,一个父类也可以被多种子类所继承。父类的方法也可以被子类重写。这些都是多态的特征,即一个父类有多种子类的形态,一个方法也有多种实现方法。

你可能感兴趣的:(什么是面向对象)