独立博客链接地址:http://zhuyanfeng.com/archives/221
模块概念
软件结构设计是对组成系统的各个子系统的进一步分解与规划。例如,将子系统按照其功能要素分解成具有一定的功能边界的模块,然后以模块为单位来构造软件。需求分析阶段已经建立起的有关系统的功能模型、数据模型或状态机模型,可以作为软件结构设计的前提依据。
具体说来,软件结构设计包括以下几方面的内容:
(1)确定构造子系统的模块元素。
(2)定义每个模块的功能。
(3)定义模块接口,设计接口的数据结构。
(4)确定模块之间的调用与返回关系。
(5)评估软件结构质量,进行结构优化。
1.模块化
模块概念产生于结构化程序设计思想,这时的模块被作为构造程序的基本单元,例如函数、过程。
在结构化方法中,模块是一个功能单位,因此模块可大可小。它可以被理解为所建软件系统中的一个子程序系统,也可以是子程序系统内一个涉及多项任务的功能程序块,并可以是功能程序块内的一个程序单元,例如函数、过程。也就是说,模块实际上体现出了系统所具有的功能层次结构。
模块可以使软件系统按照其功能组成进行分解,而通过对软件系统进行分解,则可以使一些大的复杂的软件问题分解成诸多小的简单的软件问题。从软件开发的角度来看,这必然有利于软件问题的有效解决。
模块化可以使软件问题简化。但是,得出这个结论需要有下面的前提条件:大模块被分解成诸多小模块之后,小模块基本上处于相互隔离的独立状态,它们之间没有太多的通信。否则,小模块之间由于存在太多的通信,将会导致小模块接口复杂起来,其结果是,虽然每个模块内部简化了,但整个软件问题反而复杂起来。
2.抽象化
概要设计中的功能模块往往被看成是一个抽象化的功能黑盒子,其特征如下图所示。虽然它已是一个与软件实现直接相关的实体单元,可以看到它清晰的外观,但是却看不到它内部更加具体的实现细节。
应该说,概要设计中的结论,对于软件内部构造而言则仍是抽象的。比如概要设计中的功能模块,尽管它有惟一的名称标识,有明确的功能定义,并设置有数据的输入输出接口。但是,模块的内部实现细节则处于待定状态,需要等到详细设计完成以后才能得出更加具体的算法结论。这种由抽象到具体的不断演变也一直贯穿于软件工程过程之中,这就是自顶向下、逐步细化。
3.信息隐蔽
信息隐蔽是指每个模块的内部实现细节对于其他模块来说是隐蔽的。也就是说,模块中所包含的信息,例如,模块内部的数据、语句或过程等,不允许其他不需要这些信息的模块使用。显然,信息隐蔽有利于模块相互之间的隔离,可以使每个模块更加具有独立性,并可以使模块之间的通信受到限制。例如,模块之间只能传递那些对于其功能实现而言是必须的信息。
通过限制模块需要使用的数据的作用范围,例如,定义模块内部局部变量,可以产生出模块内部信息隐蔽的效果。
模块内部信息隐蔽的好处是可以使软件系统更加健壮,更加方便维护。
以模块中的错误为例,假如模块内部信息是隐蔽的,则模块中存在的这个错误将比较难于扩散到其他模块。否则,系统可能因为一个小错误的扩散,而使整个系统崩溃。实际上,信息隐蔽还使软件错误定位更加方便。由于软件出错位置容易发现,因此,整个软件纠错工作的效率、质量都会随之提高。
一些模块的功能有时需要根据用户需求的变更而适时地进行一些功能改造。当需要对模块进行功能改造时,模块内部的信息隐蔽会使对模块改造所带来的影响限制在需要改造的模块之内,而与其他模块无关。显然,这将使软件系统的局部修改变得更加便利。
模块的独立性