第二次作业:面向过程(或者叫结构化)分析方法与面向对象分析方法到底区别在哪里?
引用一个例子: “我喜欢把软件系统描述成对现实世界的映射,现实世界中的我去ATM机取了100元钱,映射到软件就是从我的银行帐户对应的数据库记录中余额(Balance)那一字段减去100。所谓的结构化方法和面向对象方法,就是两种不同的映射手段,结构化方法是以处理过程为中心,强调先定义数据结构(ER实体关系建模),然后分析处理逻辑(DFD数据流图);面向对象方法则主张两者之间的自然映射,在ATM取款的例子中,我被映射为Customer对象,我的帐户被映射为Account对象(在对象-关系映射中再对应到数据库表Account中的一条数据记录)。正因为OO方法采用对现实世界的自然映射,现实世界中的业务流程发生变化时,软件实现也可以比较方便地跟着转变;而采用结构化方法的映射(或是采用OO方法,但对业务流程的映射关系建立不当),软件上相应修改的工作量就会大一些。”
实际上,面向过程的分析方法就是分析出解决问题的不走,然后用函数依次实现这些步骤,再一个个调用。
而面向对象是把问题分为不同的对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个对象在解决这个问题的步骤中的行为。
再引用一个例子:例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。把上面每个步骤用分别的函数来实现,问题就解决了。
而面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为 1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的i变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。
由此可见:面向对象以功能划分问题,所谓的面向对象就是在程序设计中按类来设计系统,在程序设计中如果采用面向对象的编程方式可以更好的以人类的正常思维进行分析,相比之下,传统的面向过程程序设计则采用另外一种编程方式,它是采用按模块功能进行系统分析的。
例子以及部分内容摘自:http://blog.csdn.net/tonywgx/article/details/6921232