2、确定应该记录的数据。对结构化方法,就是细化数据流,并整理出一个一个的表。对面向对象方法,就是寻找和定义对象,并归纳各对象应记录的属性。一般O-R关系转换都是套用流行的方法,可能有些组织对此都有规定。
3、模块的组织。如果实在是要避免歧义的话,应该说成是“将数据和功能分配到不同的文件中,用文件来合理地组织代码”。对结构化方法,就是划分模块,每个模块应该包含哪些文件以及每个文件的内容。对面向对象方法,就是在已有对象的基础上,将功能分配到对象上。相比较结构化方法,面向对象在这里强制要求:将数据和功能分配到不同的文件中时,是以数据为中心。事实上,使用结构化方法划分模块时,如果希望模块具有信息内聚性,那么,也是以数据为中心。“有信息内聚性的模块,本质上是抽象数据类型的实现”[P89,《软件工程JAVA语言实现》]。
4、接下来就应该是编程了。如果都使用JAVA的话,我很难想象出两种结果的代码能有多大的区别。
以上列出了两个例子,其意图在于说明某些情况下,我们进行系统分析时,当我们希望模块有信息内聚性时,结构化方法和面向对象的方法得到的过程和结果不会有很大差别。
需要对关于使用这两个例子作一些说明:
1、在UMLCHINA网站上经常看到一些文章特别强调面向对象方法中寻找USECASE和结构化方法中功能模块的划分不同。在所有的这些文章中,我也一直没有找到能够让我明白为什么不同的文字。当然,不排除以下原因:
1、1:我使用系统分析方法进行进行系统分析并指导编程的时间不长。
1、2:我的理解有问题的原因,比方说,可能在某个环节上钻入了牛角尖。
1、3:我涉及的行业领域的原因。我一直参与项目,开发数据库管理应用。
1、4:其他原因。
一个系统必然先得划分为不同的子系统。子系统如果仍然太大了,那么也必须划分为不同的子系统。以此类推。面向对象方法中的用例分解和结构化的功能模块的划分是对应的。如果用面向对象的观点来看,系统是由各个级别的对象装配而成。一个系统就是一个大对象,子系统也是对象。因为完全地从下至上地构造系统是难以想象的,所以需要进行用例分解。对于一个中型系统,像上述的第一个例子,我自问难以找出用例分解和模块分解的区别。尤其是应用不同方法时如果产生区别的话,应该在思路上会在某一个或多个关键点上有重大区别。《软件工程JAVA语言实现》中说:“如果采用面向对象的范型,则在分析阶段中有一个确定对象的步骤。因为对象是一种模块,所以结构化设计是在面向对象范型的分析阶段执行的”[P13]。对此我深表赞同。当用例分解得足够小时,该用例就类似于第二个例子。
在面向对象方法中,寻找用例时引入的对象和用于编程的对象是不同的,而结构化方法中一个功能模块也不必就对应一个程序模块。
事实上,老宋也用UML建模,但他坚持他使用的不是面向对象方法。因为他说自己从没用过面向对象的方法分析问题。
2、前面的论述其实说明了:在给定的限制下,面向对象方法中的对象和结构化方法中的具有信息内聚性的模块区别很小。但有些情况下则不然。
就我个人的经验来看,在项目的系统分析和产品的系统分析中,面向对象方法的应用效果很可能不同。
文章来源于领测软件测试网 https://www.ltesting.net/