LOGOEmail:liangsun@dlut.edu.cn大连理工大学计算机科学与技术学院1软件工程主讲:孙亮4.2设计原理4.模块独立性(moduleindependence)概括了把软件划分为模块时要遵守的准则,也是判断模块构造是否合理的标准。一般地,坚持模块独立性是获得良好设计的关键两个定性度量标准-内聚和耦合耦合用于衡量不同模块彼此之间相互依赖(连接)的紧密程度24.2设计原理内聚用于衡量一个模块内部各个元素间彼此结合的紧密程度模块独立的概念:模块化、信息隐蔽和局部化的直接结果•完成特定功能•模块之间关系简单需要模块独立的原因•易开发•易测试34.2设计原理耦合强度取决于模块接口的复杂程度、通过接口的数据等应该追求尽可能松散耦合的系统:影响系统的可理解性、可测试性、可靠性和可维护性耦合的七种类型44.2设计原理耦合强度非直接耦合/无耦合:最低数据耦合:低耦合/可以只包括该耦合控制耦合:中耦合/通常模块分解可以用数据耦合公共环境耦合:全程变量、共享通信区、内存公共覆盖区、存储介质上文件或设备等;复杂程度随耦合模块个数变化;/一读一取;属松散耦合;既读又取;介于数据耦合与控制耦合之间54.2设计原理内容耦合:最高程度耦合无直接耦合:两个模块没有直接关系(模块1和模块2),模块独立性最强64.2设计原理实例讲评:无直接耦合示例74.2设计原理数据耦合:一模块调用另一模块时,被调用模块的输入、输出都是简单的数据(若干参数)。属松散耦合实例讲评:数据耦合示例84.2设计原理实例讲评:数据耦合程序示例94.2设计原理特征耦合•也称标记耦合(复合型耦合)•如两个模块通过传递数据结构(不是简单数据,而是纪录、数组等)加以联系,或都与一个数据结构有关系,则称这两个模块之间存在标记耦合104.2设计原理实例讲评:特征耦合实例114.2设计原理实例讲评:特征耦合示例124.2设计原理实例讲评:特征耦合示例134.2设计原理将特征耦合修改为数据耦合举例144.2设计原理实例讲评:将特征耦合修改为数据耦合示例154.2设计原理控制耦合模块向下属模块传递的信息(开关量、标志等控制被调用模块决策的变量)控制了被调用模块的内部逻辑164.2设计原理实例讲评:控制耦合示例174.2设计原理去除模块间控制耦合的方法控制耦合增加了理解和编程的复杂性,调用模块必须知道被调模块的内部逻辑,增加了相互依赖•将被调用模块内的判定上移到调用模块中进行•被调用模块分解成若干单一功能模块184.2设计原理改控制耦合为数据耦合举例194.2设计原理实例讲评:改控制耦合为数据耦合示例204.2设计原理外部耦合一组模块与同一外部环境关联(例如,I/O模块与特定的设备、格式和通信协议相关联),它们之间便存在外部耦合外部耦合必不可少,但这种模块数目应尽量少公共耦合(公共数据区耦合)一组模块引用同一个公用数据区(也称全局数据区、公共数据环境)公共数据区指:全局数据结构、共享通讯区,内存公共覆盖区等214.2设计原理实例讲评:公共耦合实例224.2设计原理实例讲评:公共耦合示例234.2设计原理公共耦合存在的问题1.软件可理解性降低2.诊断错误困难3.软件可维护性差4.软件可靠性差(公共数据及全程变量无保护措施)慎用公共数据区和全程变量!!!244.2设计原理内容耦合254.2设计原理耦合设计原则尽量使用数据耦合少用控制耦合限制公共环境耦合范围完全不用内容耦合264.2设计原理内聚概念:衡量一个模块内部各元素彼此结合的紧密程度简单地说,理想内聚的模块只做一件事情。设计时应该力求做到高内聚,通常中等程度的内聚也是可以采用的,而且效果和高内聚相差不多。但是,坚决不要使用低内聚274.2设计原理内聚类型:七种类型低内聚:偶然内聚:出现错误的概率比其他类型的模块要高/0分;284.2设计原理偶然内聚(巧合内聚)实例讲评:偶然内聚示例294.2设计原理逻辑内聚:把几种相关功能(逻辑上相似的功能)组合在一模块内,每次调用由传给模块的参数确定执行哪种功能修改困难/1分304.2设计原理实例讲评:逻辑内聚示例314.2设计原理时间内聚时间内聚,比逻辑内聚好一些/3分。模块完成的功能必须在同一时间内执行,这些功能只因时间因素关联在一起实例讲评:时间内聚示例例如:初始化系统模块、系统结束模块、紧急故障处理模块等均是时间性聚合模块324.2设计原理实例讲评:时间内聚:初始化模块334.2设计原理过程内聚(顺序性组合)过程内聚:程序流程图作为工具设计软件时得到模块/5分模块内各处理成分相关,且必须以特定次序执行属中内聚344.2设计原理实例讲评:过程内聚:定时器与中断标志354.2设计原理实例讲评:过程内聚364.2设计原理通信内聚模块内各部分使用相同的输入数据,或产生相同的输出结果通信内聚:7分属中内聚374.2设计原理实例讲评:通信内聚示例384.2设计原理实例讲评:通信内聚示例394.2设计原理顺序内聚数据流图作为工具设计软件时得到的模块/9分信息内聚模块完成多个功能,各功能都在同一数据结构上操作,每一功能有唯一入口属高内聚404.2设计原理实例讲评:顺序内聚示例414.2设计原理功能内聚最高内聚/理想内聚只做一件事/10分模块仅包括为完成某个功能所必须的所有成分模块所有成分共同完成一个功能,缺一不可内聚性最强属高内聚424.2设计原理实例讲评:功能内聚示例434.2设计原理内聚设计原则:力求高内聚中等内聚也可以采用低内聚不要用与耦合关系:高内聚意味松耦合实践表明,内聚更重要,应该把更多注意力集中到提高模块的内聚程度上44LOGO45