正确答案
试题解析
解析:一般模块的内聚性分为七种,如图2-28所示。(1)功能内聚(FunctionalCohesion)。一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作、紧密联系、不可分割的,则称该模块为功能内聚模块。它是内聚程度最高的,也是模块独立性最强的模块。功能内聚模块的优点是容易修改和维护,因为它们的功能是明确的,模块间的耦合是简单的。但是,如果把一个功能分成两个模块来解决,就会导致模块之间的很强的耦合,而且它们不易单独理解和实现。在把一个系统分解成模块的过程中,应当尽可能使模块达到功能内聚这一级,便于主程序的调用和控制。(2)顺序内聚(SequentialCohesion)。模块内各组成部分和同一个功能密切相关,而且一个组成部分的输出恰好是另一组成部分的输入,这种内聚称为顺序内聚。顺序内聚强调的是一个部分的输出要作为另一个部分的输入,这样,当上一个部分没有完成时下一个部分就不能执行,即强调顺序性,必须顺序执行。由于模块内各处理元素间存在着这种逻辑联系,所以顺序内聚模块的可理解性较强。(3)通信内聚(CommunicationCohesion)。如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称为通信内聚模块。通常,通信内聚模块是通过数据流图来定义的。通信内聚模块的内聚程度比过程内聚模块的内聚程度要高,因为在通信内聚模块中包括了许多独立的功能。但是,由于顺序内聚模块中各功能部分使用了相同的输入/输出缓冲区,因而降低了整个系统的效率。(4)过程内聚(ProceduralCohesion)。如果一个模块内的处理是相关的,而且必须以特定次序执行,则称这个模块为过程内聚模块。使用流程图作为工具设计程序时,常常通过流程图来确定模块划分,把流程图中的某一部分划出组成模块,就得到过程内聚模块。例如,把流程图中的循环部分、判定部分、计算部分分成3个模块,这3个模块都是过程内聚模块。这类模块的内聚程度比时间内聚模块的内聚程度更强一些。另外,因为过程内聚模块仅包括完整功能的一部分,所以它的内聚程度仍然比较低,模块间的耦合程度还比较高。(5)时间内聚(ClassicalCohesion)。时间内聚又称为经典内聚。这种模块大多为多功能模块,但模块的各个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行,如初始化模块和终止模块。初始化模块要为所有变量赋初值,对所有介质上的文件置初态,初始化寄存器和栈等,因此要求在程序开始执行的最初一段时间内,模块中的所有功能要全部执行一遍。时间内聚模块比逻辑内聚模块的内聚程度稍高一些。因为时间内聚模块中所有部分都要在同一时间段内执行,而且在一般情形下,各部分可以以任意的顺序执行,所以它的内部逻辑更简单,存在的开关(或判定)转移更少。(6)逻辑内聚(LogicalCohesion)。这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块的判定参数来确定该模块应执行哪一种功能。例如,根据输入的控制信息的不同,或从文件中读入一个记录,或向文件写出一个记录。这种模块是单入口多功能模块。类似的还有错误处理模块,它接收出错信号,根据不同类型的错误打印出不同的出错信息。(7)巧合内聚(CoincidentalCohesion)。巧合内聚又称为偶然内聚。模块内各部分之间没有联系,或者即使有联系,这种联系也很松散,则称这种模块为巧合内聚模块,它是内聚程度最低的模块。例如,一些没有任何联系的语句可能在许多模块中重复多次,程序员为了节省存储,把它们抽出来组成一个新的模块,这个模块就是巧合内聚模块。这种模块的缺点首先是不易修改和维护。另外,有的书提到信息内聚模块,这种模块可完成多个功能,各个功能都在同一数据结构上操作,每一项功能有唯一的入口点。这种模块具有4个功能:在符号表中查找登记项;把新登记项登录到符号表中;从符号表中删除一个登记项;修改一个指定的登记项。这种模块将根据不同的要求,确定该执行哪一个功能。由于这种模块的所有功能都是基于同一个数据结构(符号表)的,因此称其为信息内聚模块。信息内聚模块可以看成是多个功能内聚模块的组合,并且达到了信息的隐蔽,即把某个数据结构、资源或设备隐蔽在一个模块内,不为别的模块所知晓。这种模块的优点是,当把程序某些方面细节隐藏在一个模块中时,各个模块的独立性就增加了。信息内聚模块的内聚程度介于功能内聚和过程内聚之间。事实上,没有必要精确确定某个模块的内聚级别,最重要的是在设计模块时力争做到高内聚,并且能够根据相关特征辨认出低内聚的模块,有能力通过修改来提高模块的内聚程度,降低模块间的耦合程度,从而获得独立性较高的模块。