模块独立性原理

1. 理解模块独立的重要性

2. 掌握模块独立的概念

3. 重点掌握度量模块独立程度的两个标准:

耦合和内聚

5.2.1   模块化

5.2.2   抽象

5.2.3   逐步求精

5.2.4   信息隐藏和局部化

5.2.5   模块独立

5.2.5  模块独立

1. 模块独立的概念:

?是模块化、抽象、信息隐藏和局部化概念的直

接结果。

?是指软件系统中每个模块只完成软件要求的具

体的子功能,而和软件系统中其他模块的接口

尽量简单。

2. 如何做到模块独立?

?开发具有独立功能而且和其他模块之间没有过

多的相互作用的模块,就可以做到模块独立。

1. 模块独立的概念是:

2. 如何做到模块独立?

3. 模块独立的重要性:

? 有效的模块化的软件比较容易开发;

? 独立的模块比较容易测试和维护。

4. 模块独立程度的度量标准

模块的独立程度可以由两个定性标准度量

(1)耦合:不同模块之间的互联程度的度量

(2)内聚:模块内部彼此结合的紧密程度的度量

(1)耦合( Coupling )

问题1. 耦合是越强越好还是越弱越好?

问题2. 耦合的强弱取决于什么?

   ? 模块之间接口的复杂程度

? 调用模块的方式

? 通过接口的数据

问题3. 怎样具体区分模块间耦合程度的强弱呢?

非直接   数据    特征   控制   公共环  内容

耦合     耦合    耦合   耦合   境耦合  耦合

①  非直接耦合(Nondirect  Coupling)

两个模块没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,非直接耦合的模块独立性最强。

②  数据耦合(Data  Coupling)

两个模块彼此间通过参数来交换信息,而且交换的信息仅仅是数据。数据耦合属于松散耦合。

#include <stdio.h>

int Multiply(int x, int y)

{

return (x * y);

}

void main()

{

int x = 0;

int y = 0;

scanf ("%d%d",  &x, &y);

printf ("x * y = %d\n",  Multiply (x,y));

}

③ 特征耦合(Stamp  Coupling)

当把整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素时,就出现了特征耦合。

④  控制耦合(Control  Coupling)

两个模块彼此间通过参数来交换信息,如果传递的信息中有控制信息,这种耦合称为控制耦合。

void output ( flag )

{   If ( flag )  printf ("OK! ");

else  printf ("NO! "); }

main()

{   int flag;

output ( flag );

}

⑤  公共环境耦合(Common  Coupling)

当两个或多个模块通过一个公共数据环境相互作用时,它们之间的耦合称为公共环境耦合。

公共数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。

公共耦合的复杂程度随耦合模块的个数增加而显著增加。

若只是两模块间有公共数据环境,则公共耦合有两种情况:松散公共耦合和紧密公共耦合。

⑥  内容耦合(Content  Coupling)

一个模块直接访问另一个模块的内部数据;

一个模块不通过正常入口转到另一模块内部;

两个模块有一部分程序代码重迭(只可能出现在汇编语言中);

一个模块有多个入口。

坚决避免使用内容耦合

★ 设计原则

①  尽量使用数据耦合,

② 少用控制耦合和特征耦合,

③  限制公共环境耦合的范围,

④ 完全不用内容耦合。

例1.分析下图,确定模块之间的耦合类型。

表1  模块接口描述

(模块p、t、u更新同一个数据库)

图1   一个程序的模块互联图

(2)内聚( Cohesion )

问题1. 模块内聚程度是越高越好还是越低越好?

问题2. 内聚和耦合之间存在什么关系?

问题3. 内聚可以分为哪几类?

? 低内聚:偶然内聚,逻辑内聚,时间内聚

? 中内聚:过程内聚,通信内聚

? 高内聚:顺序内聚,功能内聚

①  偶然内聚(Coincidental  Cohesion)

②  逻辑内聚(Logical  Cohesion)

③   时间内聚(Classical  Cohesion)

时间内聚又称为经典内聚。这种模块大多为多功能模块,但模块的各个功能的执行

与时间有关,通常要求所有功能必须在同一时间段内执行。

例如,初始化模块和终止模块就是时间内聚模块。

④  过程内聚(Procedural  Cohesion)

⑤  通信内聚(Communication  Cohesion)

⑥  顺序内聚(Sequential  Cohesion)

⑦  功能内聚(Functional  Cohesion)

? 一个模块内所有处理元素属于一个整体,完成一个单一的功能,则称为功能内聚。

? 功能内聚是最高程度的内聚,内聚性最强。

例2.分析下图的层次图,确定每个模块的内聚类型。

时间: 2024-10-28 19:38:40

模块独立性原理的相关文章

让你提前认识软件开发(52):系统某模块工作原理详述

第3部分 软件研发工作总结 系统某模块工作原理详述 [文章摘要] 某模块在系统中占有非常重要的地位,该模块能够对符合条件的动态信箱进行清理.本模块直接清理的信箱包括:过期动态信箱.冷冻信箱和空动态信箱:删除非动态信箱由本模块发送消息到其它模块完成. 本文对该模块的工作原理的详细介绍,为相关模块的开发和测试提供了有益的参考,同时也有利于现场人员对本模块进行维护. [关键词] 系统  模块  数据库  流程 1. 本模块删除的信箱类型 本模块删除的信箱类型如图1所示: 图1 本模块删除的信箱类型 2

模块独立性之高内聚

模块独立性由两个定性标准度量 模块自身的内聚,也称为块内联系或模块强度. 模块之间的耦合,也成为块间联系. 模块独立性愈高,则块内联系越强,块间联系越弱,即高内聚,低耦合. 内聚性分类 内聚性是从功能的角度对模块内部聚合能力的度量. 高内聚是模块独立性追求的目标. 内聚性分类(以计算员工年龄,退休时间举例) 1.功能性内聚:模块各个成分结合在一起,完成一个特定的功能.功能性模块具有内聚性强.与其他模块联系少的特点. 举例:  一个模块根据员工出生日期计算员工年龄,另一个模块根据员工出生日期计算退

模块独立性准则

模块独立性由两个定性标准度量 模块自身的内聚 模块之间的耦合 内聚性分类: 偶然性内聚(最不好的一种内聚):模块内的各个任务在功能上没有实质性联系,纯属“偶然”因素组合了块内各个互不相关的任务. 一个处理正方形的模块有两个功能:计算面积,画出这个正方形. 改进:分成两个模块,计算面积和画出正方形 逻辑性内聚:模块通常由若干个逻辑功能相似的任务组成,通过模块外引入的一个开关量选择其一执行.这种内聚增大了模块间的耦合. 一个模块负责打印季度开支报告.月份开支报告和日开支报告,具体打印哪一个报告由传入

python模块导入原理

转自:http://blog.csdn.net/u012422440/article/details/41791433 今日在自学Python,借此机会,正好重新开始写博文,既可以巩固python的知识,也可顺便提高一下文笔. 一.python模块基础 言归正传,Python的模块是python语言中代码复用的最高级别,也是系统命名空间的的划分标准,也是供顶层文件(就是包含程序主要控制流程的部分)调用的工具库文件.实现模型其实很简单,任何一个python文件都可以当做模型通过import进行导入

nginx模块和原理

Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(location是Nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作. Nginx的模块从结构上分为核心模块.基础模块和第三方模块: 核心模块:HTTP模块.EVENT模块和MAIL模块 基础模块:HTTP Access模块.HTTP FastC

软件模块划分原理

在软件高层设计中,如何分解模块是首要考虑的问题.目前业界公认模块划分要按照“高内聚,低耦合”的原则来进行,那么如何划分才能满足“高内聚,低耦合”呢?下面来对模块分解原理方面进行一些探索,有考虑不周和不成熟之处还请大家不吝指正. 模块是按功能来分解的吗? 许多人可能有过经验,面对一堆功能性需求,多个不同的需求可能要放到同一个模块里,而某个需求又需要分解到多个模块里去实现. 比如一个词典软件(类似金山词霸的软件),通常有查询词典的功能需求和添加用户词库的功能需求,显然不可能简单地为这两个功能各分解一

ZigBee模块组网原理

随着无线通信技术的快速发展,对短距离无线通信技术的需求也变得越来越迫切.ZigBee就是一种新型的短距离.低速率无线通信技术,它是一种介于无线远距离技术与蓝牙之间的技术方案.利用多个ZigBee模块通过无线通信的方式组成的一个多级中继的自组织的网络系统,且ZigBee之间可以相互协作地感知.采集和处理区域中的ZigBee设备,它能够广泛应用于医疗护理.环境监测.军事.商业.电力.交通.金融.农业.能源.智能家居.自动化等领域. 为那通信 ——433 Zigbee是一种基于自组网.多点中继,可实现

浏览器加载 CommonJS 模块的原理与实现 (阮一峰大哥的 http://www.ruanyifeng.com/blog/2015/05/commonjs-in-browser.html)

就在这个周末,npm 超过了 cpan ,成为地球上最大的软件模块仓库. npm 的模块都是 JavaScript 语言写的,但浏览器用不了,因为不支持 CommonJS 格式.要想让浏览器用上这些模块,必须转换格式. 本文介绍浏览器加载 CommonJS 的原理,并且给出一种非常简单的实现. 一.原理 浏览器不兼容CommonJS的根本原因,在于缺少四个Node.js环境的变量. module exports require global 只要能够提供这四个变量,浏览器就能加载 CommonJ

父传子,子传父,模块切换原理

// 父组件 add-song.vue // 添加歌曲模板 <template> <transition name="slide"> <div class="add-song" v-show="showFlag" @click.stop> <div class="header"> <h1 class="title">添加歌曲到列表</h1&g