第五章习题答案
1、为每种类型的模块耦合举一个具体例子。
答:耦合是对一个软件结构内不同模块之间互连程度的度量。
耦合强弱取决于模块间接口的复杂程度,进入或访问某一模块的点,
以及通过接口的数据,一般模块之间可能的连接方式有7种,构成耦合的7种类型,它们之间的关系为:
担立II 騎
下面举例说明以上各种耦合:
a. 非直接耦合(Non direct Coupli ng)在这种情况下,两个模块之间
没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,这就是非直接耦合。
例如在实数的运算中,有两个模块分别完成几个实数的求和,求乘积功能,这两个模块之间没有直接联系,只有在主模块调用中有执行的前后顺序而已,这个例子即属于非直接耦
合。
b. 数据耦合(Data Couplin®即一个模块访问另一个模块时,彼此
之间是通过数据参数来交换输入,输出信息的,这种耦合为数据输入,输出信息的这种耦合为数据耦合。
如有两个模块,其中A完成两个烽的比较,求出其中最大的并返回该值,模块B是完成了个数的比较,
求出其中最大的并返回该最大值,为完成四个数的比较,模块B调用模块A即可完成,在这种调用关系中,模块A的运算结果作为一个参烽参加B的运算,这两个模块之间即发生数据耦合。
数据耦合是松散的耦合,模块间的独立性比较强。
c. 标记耦合(Stamp Coupling,即一组模块通过参数传递记录信息,这就是标
记耦合。
事实上,这组模块共享了这个记录,它是某一数据结构的子结构,而不是简单变量。
d. 控制耦合(Control Coupling)即一个模块通过开关标志,名字等控制住处明显的控制,选择另一模块的功能,这就是控制耦合,如
下图所示,这一种耦合实质是在单一接口上实现选择多功能模块中的某项功能,如程序设计中用到多路选择结构即是最好的例子。
e. 外部耦合(External Coupling即一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递全局数据结构,而且不是通过参数表传递全局变量的信息。
如C语言中都访问被说明为extern 类型的外部变量的各个模块之间即发生外部耦合。
外部耦合引起的问题类似于下面要介绍的公共耦合,区别在于外部耦合中不存在依赖于一个数据结构内部各项的物理安排。
f. 公共耦合(Common Coupling若一组模块都访问同一个公共数据环境,则它们之间的耦合就是公共耦合。
公共的数据环境可以是全局的数据结构,共享的通信区,内存的公共覆盖区等。
如几个模块对同一个数据库的查询就属于这种耦合。
公共耦合可以分为松散的公共耦合和紧密的公共耦合,其中松散的公共耦合是单向操作,如两个或多个模块对同一个文件的读操作;而紧密的公共耦合是双向的操作,如两个或多个模块对同一文件的读写操作。
下面用图表示松散的和紧密的公共耦合
模块注
模块b
两个模块有部分代码重叠;
------- k
EnlryL: --------
► Entry2^
一个模块有多个入口
2、为每种类型的模块内聚举一个具体例子。
答:内聚标志一个模块内各个元素彼此结合的紧密程度,它是信
g. 内容耦合。
即有下列情况时即出现内容耦合。
(1) 一个模块访问另一个模块数据;
(2) —个模块不通过正常入口而转到另一个模块的内部;
(3) 两个模块有一部分代码重叠;
(4) 一个模块有多个入口。
匮麼的皑步與言
一个模块访问另一个模块数据;
息隐蔽和局部化的自然扩展,一般模块的内聚性分为7种,它们的关系如下图示
下面举例说明各种内聚的情况
a. 偶然内聚。
即模块内各部分之间没有联系,或者即使有联系也很松散,这种即为偶然内聚,它是
内聚程度最低的模块。
如一些没有任何联系的语句可能在许多模块中重复多次,程序员为了节省存储,把它们抽出来组成一个新的模块,这个模块就是偶然内聚模块,例如C语言中的# define TRY ODBCC …
b. 逻辑内聚(Logical Cohesion即这种模块把几种功能组合在一起,每次调用时,由传送给模块的
判定参数来确定该模块应执行哪一种功能。
如根据输入的控制信息,或从文件中读入一个记录,或向文件写出一个记录。
c. 时间内聚(Classical Cohesion这种模块大多数为多功能模块,但模块的各人功能的执行与时间
有关,通常要求所有功能必须在同一时间段内执行,例如初始化模块和终止模块。
d. 过程内聚(Procedural Cohesion即一个模块内的处理是相关的,
而且必须以特定次序执行,则
这个模块称为过程内聚模块。
例如我们把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。
e. 通信内聚(Communication Cohesion)如果一个模块内部各功能部分都使用可相同的数据输入,
或产生了可相同的数据输入,或产生了可相同的输出数据,则称之为通信内聚模块。
通常,通信内聚模块是通过数据流图来定义的。
f. 顺序内聚,即一个模块内处理元素和同一功能紧密切相关,而且
这些处理必须顺序执行(通常一
个处理元素的输出数据据作为下一处理元素的输入数据) 如在对员工加工资的数据库操作中,读取数据和更新数据即具有顺序内聚的关系。
g. 功能内聚(Functional Cohesion)即模块内部所有处理元素属于
一个整体,完成一个单一的功能,
则称为功能内聚,功能内聚是最高程度的内聚。
3、用面向数据流的方法设计下列系统的软件结构。
(1)存储系统(参见习题2第2题)。