各位学员大家好,大家在学习软件工程知识时,会涉及到模块的内聚和耦合的知识,我们经常说“高内聚,低耦合”,你知道是怎么一回事吗?为了让大家快速掌握这方面的知识点,接下来就带领大家一起来学习一下!
例题1:模块A将其中的学生信息,即学生姓名、学号、手机号等放到一个结构体中,传递给模块B,则模块A和B之间的耦合类型为( )耦合。
A、数据
B、标记
C、控制
D、内容
解析:本题考查模块耦合关系的基础知识。
耦合是模块之间的相对独立性(互相连接的紧密程度)的度量。耦合取决于各个模块之间接口的复杂程度、调用模块的方式以及通过接口的信息类型等。一般来说,模块之间的耦合有七种类型,根据耦合性从低到高为非直接耦合(无直接耦合)、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合和内容耦合。
1)、非直接耦合(无直接耦合):两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,它们之间不传递任何信息,因此模块间的耦合性最弱,模块独立性最高。
2)、数据耦合:指两个模块之间有调用关系,传递的是简单的数据值(不是控制参数,公共数据结构或外部变量),相当于高级语言中的值传递。
3)、标记耦合:指两个模块之间通过参数表(数据结构)传递记录信息。
4)、控制耦合:指一个模块调用另一个模块时,传递的是控制变量,被调用模块通过该控制变量的值有选择地执行模块内的某一功能。因此,被调用模块内应具有多个功能,那个功能起作用受调用模块控制。也就是说一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能。
5)、外部耦合:模块间通过软件之外的环境联结( 如I/O将模块耦合到特定的设备、格式、通信协议上)时称为外部耦合。
6)、公共耦合:指通过一个公共数据环境相互作用的那些模块间的耦合。
7)、内容耦合:一个模块直接访问另一个模块的内部数据,或者通过非正常入口转入另一个模块内部,或者两个模块有一部分程序代码重叠,又或者一个模块有多种入口。这种模块之间的耦合称之为内容耦合。
题干中说明传递的参数是一个参数表(学生姓名、学号、手机号等放到一个结构体中),所以是标记耦合。故该题目的正确答案为B。
例题2:某模块内涉及多个功能,这些功能必须以特定的次序执行,则该模块的内聚类型为( )内聚。
A、时间
B、过程
C、信息
D、功能
解析:本题考查模块内聚的基础知识。
内聚是一个模块内部各个元素彼此结合的紧密程度的度量。一个内聚程度高的模块(在理想情况下)应当只做一件事。一般模块的内聚性分为7种类型,分类(内聚程度由弱到强)分别为:
1)、偶然(巧合)内聚:模块完成的动作之间没有任何关系,或者仅仅是一种非常松散的关系。
2)、逻辑内聚:指模块内执行若干个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。
3)、瞬时(时间)内聚:模块内部的各个组成部分所包含的处理动作必须在同一时间间隔内执行,例如初始化模块。
4)、过程内聚:指一个模块完成多个任务,这些任务必须按指定的过程执行。
5)、通信(信息)内聚:指模块内的所有处理元素都在同一个数据结构上操作,或者各处理使用相同的输入数据或者产生相同的输出数据。
6)、顺序内聚:指一个模块中的各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素的输出就是下一功能元素的输入。
7)、功能内聚:指模块内的所有元素共同作用完成一个功能,缺一不可,这是最强的内聚。
题干中明确要求功能是以特定的次序执行,所以是过程内聚。故该题目的正确答案为B。
巩固练习题
(1)某系统中有一个中央数据存储,模块A负责接收新来的数据并修改中央数据存储中的数据,模块B负责访问中央数据存储中的数据则这两个模块之间的耦合类型为( 1 )。若将这两个模块及中央数据合并成一个模块,则该模块的内聚类型为( 2 )。
1、A、数据
B、标记
C、控制
D、公共
2、A、逻辑
B、时间
C、通信
D、功能
(2)当一个模块直接使用另一个模块的内部数据,或者通过非正常入口转入另一个模块内部,这种模块之间的耦合为()。
A、数据耦合
B、标记耦合
C、公共耦合
D、内容耦合
(3)模块A、B和C都包含相同的5个语句,这些语句之间没有联系,为了避免重复,把这5个语句抽取出来组成一个模块D,则模块D的内聚类型为(1 ) 内聚。以下关于该类内聚的叙述中不正确的是(2 )。
1、 A、功能
B、通信
C、逻辑
D、巧合
2、A、从模块独立性来看,是不好的设计
B、是最弱的一种内聚类型
C、是最强的一种内聚类型
D、不易于软件的修改和维护
练习题参考答案
(1)解析:本题考查模块耦合和内聚的基础知识。
选项中涉及的模块耦合类型如下所示:
1)、数据耦合:指两个模块之间有调用关系,传递的是简单的数据值(不是控制参数,公共数据结构或外部变量),相当于高级语言中的值传递。
2)、标记耦合:指两个模块之间通过参数表(数据结构)传递记录信息。
3)、控制耦合:指一个模块调用另一个模块时, 传递的是控制变量,被调用模块通过该控制变量的值有选择地执行模块内的某一功能。 因此,被调用模块内应具有多个功能,那个功能起作用受调用模块控制。也就是说一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能。
4)、公共耦合:指通过一个公共数据环境相互作用的那些模块间的耦合。
题干中说系统中有一个中央数据存储,模块A负责接收新来的数据并修改中央数据存储中的数据,模块B负责访问中央数据存储中的数据,可见模块A和模块B都是通过中央数据存储来相互作用,所以这两个模块之间的耦合类型为公共耦合。故该题目的第一空的正确答案为D。
选项中涉及的模块内聚类型如下所示:
1)、逻辑内聚:指模块内执行若干个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。
2)、瞬时(时间)内聚:模块内部的各个组成部分所包含的处理动作必须在同一时间间隔内执行,例如初始化模块。
3)、通信(信息)内聚:指模块内的所有处理元素都在同一个数据结构上操作,或者各处理使用相同的输入数据或者产生相同的输出数据。
4)、功能内聚:指模块内的所有元素共同作用完成一个功能,缺一不可,这是最强的内聚。
若将这两个模块及中央数据合并成一个模块,那么在同一模块内部,处理元素在同一个数据结构上操作,则该模块的内聚类型为通信内聚。故该题目的第二空的正确答案为C。
(2)解析:本题考查模块耦合的基础知识。
选项中涉及到的模块耦合类型如下所示:
1)、数据耦合:指两个模块之间有调用关系,传递的是简单的数据值(不是控制参数,公共数据结构或外部变量),相当于高级语言中的值传递。
2)、标记耦合:指两个模块之间通过参数表(数据结构)传递记录信息。
3)、公共耦合:指通过一个公共数据环境相互作用的那些模块间的耦合。
4)、内容耦合:一个模块直接访问另一个模块的内部数据,或者通过非正常入口转入另一个模块内部,或者两个模块有一部分程序代码重叠,又或者一个模块有多种入口。这种模块之间的耦合称之为内容耦合。
题干中说明当一个模块直接使用另一个模块的内部数据,或者通过非正常入口转入另一个模块内部,这种模块之间的耦合肯定是内容耦合。故该题目的正确答案为D。
(3)解析:本题考察模块内聚类型的基础知识。
涉及到的内聚类型(内聚程度由弱到强)如下所示:
1)、偶然(巧合)内聚:模块完成的动作之间没有任何关系,或者仅仅是一种非常松散的关系。
2)、逻辑内聚:指模块内执行若干个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。
3)、通信(信息)内聚:指模块内的所有处理元素都在同一个数据结构上操作,或者各处理使用相同的输入数据或者产生相同的输出数据。
4)、功能内聚:指模块内的所有元素共同作用完成一个功能,缺一不可,这是最强的内聚。
由题干可知这些语句之间没有联系,所以他们之间的内聚关系为巧合内聚,故该题目第一空的正确答案为D,巧合内聚是最弱的一种内聚类型,故该题目第二空的正确答案为C。
写于2020年9月30日
作者:昊洋讲师
版权所有,侵权必究