精品文档,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,精品文档,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,常见的耦合与内聚,常见的耦合与内聚,非直接耦合:两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。,数据耦合:一个模块访问另一个模块时,彼此之间是通过简单数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的。,标记耦合:一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。其实传递的是这个数据结构的地址;,非直接耦合:两个模块之间没有直接关系,它们之间的联系完全是通,控制耦合:如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。,外部耦合:一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。,公共环境耦合:当两个或多个模块通过一个公共数据环境相互作用时,它们之间的耦合称为公共环境耦合。,控制耦合:如果一个模块通过传送开关、标志、名字等控制信息,明,内容耦合:当一个模块直接修改或操作另一个模块的数据时,或一个模块不通过不正常入口而转入另一个模块时,这样的耦合被称为内容耦合。内容耦合是最高程度的耦合,应该避免使用之。,内容耦合:当一个模块直接修改或操作另一个模块的数据时,或一,偶然内聚:如果一个模块的各成分之间毫无关系,则称为偶然内聚,也就是说模块完成一组任务,这些任务之间的关系松散,实际上没有什么联系。,逻辑内聚:几个逻辑上相关的功能被放在同一模块中,则称为逻辑内聚。如一个模块读取各种不同类型外设的输入。尽管逻辑内聚比偶然内聚合理一些,但逻辑内聚的模块各成分在功能上并无关系,即使局部功能的修改有时也会影响全局,因此这类模块的修改也比较困难。,偶然内聚:如果一个模块的各成分之间毫无关系,则称为偶然内聚,时间内聚:如果一个模块完成的功能必须在同一时间内执行(如系统初始化),但这些功能只是因为时间因素关联在一起,则称为时间内聚。,通信内聚:如果一个模块的所有成分都操作同一数据集或生成同一数据集,则称为通信内聚。,顺序内聚:如果一个模块的各个成分和同一个功能密切相关,而且一个成分的输出作为另一个成分的输入,则称为顺序内聚。,时间内聚:如果一个模块完成的功能必须在同一时间内执行(如系统,过程内聚:如果一个模块内的处理元素是相关的,而且必须以特定次序执行。,功能内聚:如果模块内所有处理元素属于一个整体,完成一个单一的功能。,过程内聚:如果一个模块内的处理元素是相关的,而且必须以特定次,计算多个地点,的日平均温度,初始化变量,sum并打开文件,创建新的温度记录,存储温度记录,关闭文件并,打印平均温度,读取地点,,时间和温度,计算特定地点,的日平均温度,计算多地点日平均温度程序,计算多个地点初始化变量创建新的温度记录存储温度记录关闭文件并,答:从上图的层次图可能看出,这个程序的功能是计算机若干个指定地点的每日平均温度。变量sum保存某地一天之内在指定的时间取样点的温度之和。程序运行时首先初始化变量sum并打开文件,然后读取地点,时间和温度等原始数据,创建用于保存这些数据的温度记录,接下来计算特定地点的日平均温度,存储温度记录。重复调用“读取地点,时间和温度”,“创建新的温度记录”“计算机特定地点的日平均温度”和“存储温度记录”等模块直至计算机出并保存好所有指定地点的日平均温度。最后,打印平均温度并并关闭文件。,从上述叙述可知,“计算多个地点的日平均温度”,“读取地点,时间和温度”,“创建新的温度记录”,“计算特定地点的日平均温度”和“存储温度记录”等5个模块,每个都完成一个单一的功能,模块内所有处理元素都为完成同一个功能服务,彼此结合得十分紧密,因此,这5个模块的内聚类型都是功能内聚。,答:从上图的层次图可能看出,这个程序的功能是计算机若干个指定,初看起来,由于初始化变量sum和打开文件这两个操作都是在程序运行的初始阶段完成的,“初始化变量sum并打开文件”这个模块的内聚类型似乎是时间内聚。但是,初始化变量sum是本程序特有的操作,而打开文件是硬件要求的操作,是任何使用文件的程序都包含的一个操作,并非本程序特有的操作。当可以分配两个或更多个不同级别的内聚类型给一个模块时,规则是分配最低级别的内聚类型给该模块。因此,“初始化变量sum并打开文件”这个模块的内聚类型是偶然内聚。同理,“关闭文件并打印平均温度”这个模块的内聚类型也是偶然内聚。,初看起来,由于初始化变量sum和打开文件这两个操作都是在程序,例2:分析下图,确定模块之间的耦合类型。,p,q,u,t,s,r,1,2,4,3,5,6,模块p,t和u更,新同一个数据库,例2:分析下图,确定模块之间的耦合类型。pqutsr1243,在上图中已经给模块之间的接口编了号码,下表描述了模块间的接口。,编号,输入,输出,1,飞机类型,状态标志,2,飞机零件清单,3,功能代码,4,飞机零件清单,5,零件编号,零件制造商,6,零件编号,零件名称,在上图中已经给模块之间的接口编了号码,下表描述了模块间的接口,答:综合分析上图和上表所提供的信息可知各个模块之间的耦合情况。例如,当模块p调用模块q时(接口1),它传递了一个参数-飞机类型。当模块q把控制返还模块p时,它传回一个状态标志。,某些模块之间的耦合类型是明显的,例如,模块p和q之间(接口1),模块r和t之间(接口5)及模块s和u之间(接口6)都是数据耦合,因为它们传递的都是一个简单变量。,如果两个模块中的一个模块给另一个模块传递控制元素,也就是说,如果一个模块明显地控制另一个模块的逻辑,则它们之间具有控制耦合。例如,当给具有逻辑内聚的模块传递功能代码时就传递了控制元素。另一个控制耦合的例子是把控制开关作为一个参数传递。上图中的模块q调用模块r时(接口3)传递一个功能代码,因此,这两个模块之间是控制耦合。,答:综合分析上图和上表所提供的信息可知各个模块之间的耦合情况,上图右侧文字说明,模块p,t和u更新同一个数据库,因此,它们之间具有公共环境耦合。,当模块p调用模块s时(接口2),如果模块s使用或更新模块p传递给它的零件清单中的所有元素,则模块p和s之间的耦合是数据耦合;但是,如果模块s只访问该清单中的一部分元素,则模块p和s之间的耦合是特征耦合。模块q和s之间(接口4)的耦合情况与此类似。由于上图与上表中给出的信息沿不足以准确地描述各个模块的功能,所以不能确定这两对模块之间的耦合是数据耦合还是特征耦合。,上图右侧文字说明,模块p,t和u更新同一个数据库,因此,它们,