您的位置:首页 > 编程语言

【编程】面向过程—面向对象—面向服务

2016-09-09 10:21 507 查看

.面向过程

- 含义:

顾名思义面向过程就是一种以过程为中心的编程思想,亦可以叫做“面向记录”面对过程能做到的就是分析出解决问题所需要的步骤,然后使用函数把步骤一步一步实现,使用的时候一个一个依次解决就好了。



分着来举例

比如我们去机房上课,我们开始开机上课是一个事件,下课关机走人又是一个事件,在编程序的时候我们关心的是某一个事件,而不是上课本身,对于面向过程这一种思想来编写上课程序只要分别对上课下课写程序就好,不用关心怎么上课等内容。

.面向对象

- -含义:

面向对象就是一种以一种事物为中心的编程思想,他让我们在分析和解决问题时把思维和重点转向现实中的客体中来,把构成事物分解成各个对象,建立对象是为了描述某个事物在整个解决问题的步骤中的行为,然后通过UML工具理清这些客体之间的联系,最后用面向对象的语言实现这种客体以及客体之间的联系。



分着来举例

比如我们来机房上课,上课开机和下课关机是一类事物,上课下课可以有自己的属性,学生,老师等,有自己的方法,用中文讲课,用英文讲课等,怎么讲课是怎么上课的行为而不是上课的每个事件。

面向过程_面向对象用一个例子来说明:

五子棋:

面向过程的设计思路就是首先分析问题的步骤:

1:开始游戏

2:黑子先走

3:绘制画画

4:判断输赢

5:轮到白子

6:绘制画面

7:判断输赢

8:返回步骤

9:输出最后结果

把上面每个步骤用分别的函数来实现,问题就解决了

面向对象的设计则是从另外的思路来解决问题:

1:黑白双方,这两的方的行为一模一样

2:棋盘系统,负责绘制画面

3:规则系统,负责判定诸如犯规,输赢等

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

功能扩充:

悔棋:

在功能上的统一保证了面向对象设计的可扩展性

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

改变规则:

再比如我要把这个五子棋改为围棋游戏,如果是面向过程设计,那么五子棋的规则就分布在了你的程序的每个角落,要改动还不如重写;但是如果你当初就是面向对象的设计,那么你只用改动规则对象就可以了,五子棋和围棋的区别不就是规则吗?(当然棋盘大小好像也不一样,但是你会觉得这是一个难题吗?直接在棋盘对象中进行一番小改动就可以了。)而下棋的大致步骤从面向对象的角度来看没有任何变化。

总结:

我们习惯了面向过程编程时,发现在程序过程中到处找不到需要面向对象的地方,最主要的原因,是思维没有转变。程序员通常在拿到一个需求的时候,第一反应就是如何实现这个需求,这是典型的面向过程的思维过程,而且很快可能就实现了他。而面向对象,面对的却是客体,就是根据需求找到其中的客体,再找到这些客体之间的联系。因此面向过程和面向对象的思维转变是关键点,就是在第一步设计,那到需求后,一定先不要考虑如何实现它,而是通过UML建模,然后按照UML模型去实现它。这种思路的转变,可能需要个过程。

把两种编程思想放在WEB开发中:

在我们进行WEB开发,普通三层开发中,基本上是基于对象的实现,因为只是实现了封装,但是没有使用继承和多态,不过这也正常,WEB开发,大部分功能就是简单的增删改查,中间的BLL层基本就是直接New一个DAL的实例就return了,关系数据库已经为我们做了很多工作,所以大部分的工作,就是简单读取然后显示了,因此没有复杂的需求的时候,基于过程也没有不对,面向过程也没什么不对,实用是压倒一切的因素。

.面向服务

面向服务就是描述服务之间的松耦合,松耦合的系统来源于业务,而面向对象的模型是紧耦合,面向服务的体系结构不是一个新鲜事物,是更传统的面向对象模型的替代模型。



总结:

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

PS: 本文的图片来自网络。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编程