面向对象程序设计(Object Oriented Programming, OOP),有别于面向过程程序设计(Procedure Oriented Programming, POP),它强调“对象”这一个概念,面向对象程序设计就是使用对象进行程序设计。要理解什么是面向对象程序设计,就不得不先理解两个概念————“对象”和“类”。那么,什么是“对象”,什么是“类”呢?

什么是对象

对象(object)代表现实世界中可以明确标识的一个实体。例如:一辆汽车,一个老师,一张桌子,一个圆,或者一笔贷款等都可以视作对象。每个对象都有自己独特的标志,状态和行为。

  • 一个对象的状态 (state, 也称为特征 property 或者属性 attribute)是指那些具有当前值的数据域。例如:把圆视作对象,那半径就是圆对象的状态,不同的圆有不同的半径,它是标识圆的属性。
  • 一个对象的行为(behavior, 也称作动作 action)是由方法(function,也称函数)定义的,调用对象的一个方法就是要求对象完成一个动作。例如:可以为圆对象定义一个名为 getArea() 的方法,则圆对象可以通过调用 getArea() 来返回圆的面积。
什么是类

类(class)用于定义同一类型的对象。类是一个模板,蓝本,或者合约。类用来定义对象的数据域是什么以及方法是做什么的。

对象和类的关系

类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。

  1. 一个对象是类的一个实例
  2. 一个类可以创建多个实例
  3. 创建新实例的过程叫做实例化
  4. 对象可以视为类的具体化

举个栗子:类就好比是一种汽车的设计图,里面定义了汽车的各项参数(汽车款式,材料)————即“数据域”,也定义了汽车的各项功能(启动,行进,转弯)————即“方法”。而对象就好比按照这张设计图造出来的一辆辆汽车。

有关面向对象程序设计

前文提到,面向对象程序设计有别于面向过程程序设计,下面通过用两种编程思想来编写一个五子棋程序的例子,来说明两者的区别:

  • 面向过程编程语言:程序=算法+数据
  • 面向对象编程语言:程序=对象+消息
面向过程思想:
  1. 开始游戏
  2. 黑子先走
  3. 绘制画面
  4. 判断输赢
  5. 轮到白子
  6. 绘制画面
  7. 判断输赢
  8. 返回步骤 2
  9. 输出最后结果

面向过程:是一种以过程为中心的编程思想。

  • 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了
面向对象思想:
  1. 黑白双方,这两方的行为是一模一样的;
  2. 棋盘系统,负责绘制画面;
  3. 规则系统,负责判定诸如犯规、输赢等。
  4. 第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定

面向对象:是一种以事物为中心的编程思想。

  • 它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。

 

不难看出,面向对象思想具有以下特点:

  1. 面向对象是以功能来划分问题,而不是步骤
  2. 更加拟物化