面向对象(Object Oriented)是程序开发领域中的重要思想,这种思想模拟了人类认识客观世界的逻辑,是当前计算机软件工程学的主流方法;类是面向对象的实现手段。Python在设计之初就已经是一门面向对象语言,了解面向对象编程思想对于学习Python开发至关重要。
提到面向对象,自然会想到面向过程。面向过程编程的基本思想是:分析解决问题的步骤,使用函数实现步骤相应的功能,按照步骤的先后顺序依次调用函数。前面章节中所展示的程序都以面向过程的方式实现,面向过程只考虑如何解决当前问题,它着眼于问题本身。
面向对象编程的着眼之处在于角色以及角色之间的联系。使用面向对象编程思想解决问题时,开发人员首先会从问题之中提炼出问题涉及的角色,将不同角色各自的特征和关系进行封装,以角色为主体,通过描述角色的行为去描述解决问题的过程。
下面以五子棋游戏为例说明面向过程和面向对象编程的区别。
1、基于面向过程编程的问题分析
基于面向过程思想分析五子棋游戏,游戏开始后黑子一方先落棋,棋子落在棋盘后棋盘产生变化,棋盘更新并判断输赢:若本轮落棋的一方胜利则输出结果并结束游戏,否则白子一方落棋、棋盘更新、判断输赢,如此往复,直至分出胜负。
2、基于面向对象编程的问题模拟
基于面向对象编程思想考虑问题时需首先分析问题中存在的角色。五子棋游戏中的角色分为两个:玩家和棋盘。不同的角色负责不同的功能,例如:
(1) 玩家角色负责控制棋子落下的位置;
(2) 棋盘角色负责保存棋盘状况、绘制画面、判断输赢。
角色之间互相独立,但相互协作,游戏的流程不再由单一的功能函数实现,而是通过调用与角色相关的方法来完成。
面向对象保证了功能的统一性,基于面向对象实现的代码更容易维护,比如,现在要加入悔棋的功能,如果使用面向过程开发,改动会涉及到游戏的整个流程,输入、判断、显示这一系列步骤都需要修改,这显然非常麻烦;但若使用面向对象开发,由于棋盘状况由棋盘角色保存,只需要为棋盘角色添加回溯功能即可。相较而言,在面向对象程序中功能扩充时改动波及的范围更小。