面向过程与面向对象

定义

面向过程

     面向过程是一种以事件为中心的编程思想,以功能(行为)为导向,按模块化的设计(即,自顶而下的程序设计方法)。通俗地讲,就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,实现的时候一个一个依次调用就可以了
面向对象

     面向对象是一种以事物为中心的编程思想,以数据(属性)为导向,将具有相同一个或者多个属性的物体(即对象)抽象为,将他们包装起来;而有了这些数据(属性)之后,我们再考虑他们的行为(对这些属性进行怎样的操作),是把构成问题的事物分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为。自下向上的程序设计方法。

面向对象的优点

    面向对象相对于面向过程较显著的优势莫过于可扩展性、可维护性。面向对象所提供的可扩展性保证了当软件必须增加新的功能时,能够在现有系统结构的基础上,方便的创建新的子系统,而不需要改变软件系统现有的结构,也不会影响已经存在的子系统。可维护性则保证了当用户需求发生变化时,只需要修改局部的子系统的少量程序代码,而不会牵一发动全身。

    面向对象还具有可重用性,从而可以减少软件中的重复代码,避免重复编程。

    不管是面向对象,还是面向过程,都体现了一种软件重用的思想!只不过面向过程中重用的是过程和函数,但是面向对象重用的是类。

面向过程

自顶向下的程序设计方法

核心设计依赖于细节实现

以函数为中心,用函数来作为划分程序的基本单位

数据单独存储

分析综合的思维方式

面向对象

自下而上的程序设计方法

细节实现依赖于核心设计

以数据(属性)为中心,,类作为表现数据的工具,是划分程序的基本单位。

数据与操作存储在一起

构造的思维方式

举例

五子棋

按面向过程的设计思路:

1、开始游戏,

2、黑子先走,

3、绘制画面,

4、判断输赢,

5、轮到白子,

6、绘制画面,

7、判断输赢,

8、返回步骤2

9、输出最后结果。

把上面每个步骤用各自的函数来实现,就可以了。

面向对象的设计思路:

    整个五子棋可以分为 1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。

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

     可以明显地看出,面向对象是以事物来划分问题,而不是步骤。同样是绘制棋局,这样的行为在面向过程的设计中分散在了许多步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。

     功能上的统一保证了面向对象设计的可扩展性。比如我要加入悔棋的功能,如果要改动面向过程的设计,那么从输入到判断到显示这一连串的步骤都要改动,甚至步骤之间的顺序都要进行大规模调整。如果是面向对象的话,只用改动棋盘对象就行了,棋盘系统保存了黑白双方的棋谱,简单回溯就可以了,而显示和规则判断则不用顾及,同时整个对对象功能的调用顺序都没有变化,改动只是局部的。

    再比如我要把这个五子棋游戏改为围棋游戏,如果你是面向过程设计,那么五子棋的规则就分布在了你的程序的每一个角落,要改动还不如重写。但是如果你当初就是面向对象的设计,那么你只用改动规则对象就可以了。

你可能感兴趣的:(UML)