- 1、本文档共32页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
模块与接口规范 模块及模块接口设计原则 一.何为模块 模块由接口和实现两部分组成。 --接口指明模块的功能,即模块能做什么。它声明了使用该模块代码的标识符,类型和函数原型等; --实现指模块是如何完成起接口声明的功能。一个具体的功能模块接口是唯一固定的,但是它的实现可能会有很多种。每个实现可能使用不同的算法和数据结构,但是都必须符合接口给出的使用声明。 二. 模块划分基本准则 模块的划分以功能为标准,相对独立的功能划分为不同的模块,各模块之间根据需要可以进行数据通信,但是必须保持功能上的相对独立性。 “功能独立”的模块可以降低开发、测试、维护等阶段的代价。但是“功能独立”并不意味着模块之间保持绝对的孤立。一个系统要完成某项任务,需要各个模块相互配合才能实现,此时模块之间就要进行信息交流。 三. 模块与接口设计准则 接口是对模块功能的声明,只需要指明客户调用程序可能使用的标识符(包括数据类型,函数原型等)即可,应尽可能隐藏内部细节和算法。 声明与实现分离 由于标准C语言没有提供命名空间机制,较大规模软件中,不同模块的全局变量和函数也很可能重名,导致重复定义错误。同时被多个模块使用的全局变量,是增大模块间耦合性的重要因素之一,为减少模块间耦合性,应尽量少用或不用多个模块共用的全局变量。 内聚是一个模块内部各成分之间相关联程度的度量。根据内聚性的强弱,有以下几种类型: 好的模块设计要有尽可能高的内聚性,尽量避免随机内聚,禁止将毫无 关系的成分放入同一模块。随机内聚会使模块的功能不明确,破坏模块的功能独 立性。也给模块的维护、测试及升级等造成不便。 防止把没有关联的功能放到一个模块中。 函数的功能要单一,不要设计“多功能”函数。 耦合(Coupling) 是模块之间依赖程度的度量。内聚和耦合是密切相关的,与其它模块存在强耦合的模块通常意味着弱内聚,而强内聚的模块通常意味着与其它模块之间存在弱耦合。模块设计追求强内聚,弱耦合。 耦合按从强到弱的顺序可分为以下几种类型: 减少多个模块间的全局变量 减少模块间接口复杂度,函数参数不得超过7个。 减少模块间控制参数,模块通信尽量只使用数据通信。 如果模块间需要进行数据通信,尽量采用文本形式的简单数据格式。不要定义复杂二进制数据格式,除非文本格式无法满足功能要求。 如果一个模块可以被扩充,则称模块具有可扩充性。当着手一个新模块时,很难一次性解决所有问题,应该先纵观问题的一些重要方面,同时作好以后补充的准备。 模块功能的完善化 消除重复功能,改善软件结构 避免或减少使用病态联接 设计功能可预测的模块,但要避免过分受限制的模块 模块的大小要适中 模块的效率,从根本上取决于实现的算法和数据结构。 根据模块的输入输出依赖程度,构建不同抽象层次。 模块提供的公用函数,如果参数是由用户输入,必须提供容错处理。 模块的对外接口函数,必须对传入的参数做合法性检测,并使用断言来报错。 * * M1 M2 M6 M3 M4 M5 从功能上划分模块,保持“功能独立”是模块化设计的基本原则。 1.封装与隐藏 application M1 t interface1 M2 Mn 2.模块的独立性 为了保证模块的独立封装性,就必须将声明与实现分离开来。C语言对此只提供最基本的支持。在标准C语言中,接口在头文件中声明,头文件的扩展名为.h。 规定:调用程序可使用的宏定义,数据结构类型,变量以及函数原型等必须在头文件中声明。调用程序使用预处理指令#include导入接口声明。禁止将函数的实现和变量的定义放在头文件。 规定:只在本模块内部使用的函数和全局变量,必须用static关键字修饰,以限制只能在本模块内使用。 3.强内聚性 (1)随机内聚: 如果一个模块的各成分之间毫无关系,则称为随机内聚。 (2)逻辑内聚: 几个逻辑上相关的功能被放在同一模块中,则称为逻辑内聚。如一个模块读取各种不同类型外设的输入。尽管逻辑内聚比偶然内聚合理一些,但逻辑内聚的模块各成分在功能上并无关系,即使局部功能的修改有时也会影响全局,因此这类模块的修改也比较困难。 (3)时间内聚: 如果一个模块完成的功能必须在同一时间内执行(如系统初始化),但这些功能只是因为时间因素关联在一起,则称为时间内聚。 (4)过程内聚: 如果一个模块内部的处理成分是相关的,而且这些处理必须以特定的次序执行,则称为过程内聚。 (5)通信内聚: 如果一个模块的所有成分都操作同一数据集或生成同一数据集,则称为通信内聚。 (6)顺序内聚: 如果一个模块的各个成分和同一个功能密切相关,而且
文档评论(0)