衡量模块独立性的两个定性标准

衡量模块独立性的两个定性标准

    • - 耦合:
    • - 内聚

内聚和耦合
模块的独立程度可以由两个定性标准衡量,这两个标准分别是内聚和耦合。
耦合衡量不同模块彼此间互相依赖(连接)的紧密程度;内聚衡量一个模块内部各个元素彼此结合的紧密程度。

- 耦合:

定义:
是对一个软件结构内不同模块之间互连程度的度量。耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。
分类:
(1)数据耦合:两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据。
(2)控制耦合:如果传递的信息中有控制信息(尽管有时这种控制信息以数据形式出现)
(3)特征耦合:当把整个数据结构作为参数传递而被调用的模块只使用其中一部分数据元素时
(4)公共环境耦合:当两个或多个模块通过一个公共数据环境相互作用时
(5)内容耦合:最高程度的耦合;如果出现以下情况之一,两个模块就发生了内容耦合:
a. 一个模块访问另一个模块的内部数据
b. 一个模块不通过正常入口而转到另一个模块的内部c. 两个模块有一部分代码重叠(只可能出现在汇编语言)
d. 一个模块有多个入口(意味着一个模块有几种功能)
耦合设计原则:尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合。

- 内聚

定义:
标志着一个模块内哥哥元素彼此解和的紧密程度,它是信息隐藏和局部化概念的自然扩展。简单的说,理想内聚只做一件事情。(内聚和耦合是密切相关的,模块内的高内聚往往意味着模块间的低耦合,内聚和耦合都是进行模块化设计的有利工具,但是内聚更重要
分类
A. 高内聚:
(1) 顺序内聚:如果一个模块内的处理元素和同一功能密切相关,而且这些处理必须顺序执行(9分)
(2) 功能内聚:如果模块内所有处理元素属于一个整体,完成一个单一的功能(10分)
B. 中内聚:
(1) 过程内聚:如果一个模块内的处理元素是相关的,而且必须经过特定的次序执行(5分)
(2) 通信内聚:如果模块中所有元素都使用同一输入数据和(或)产生统一输出数据(7分)
C. 低内聚:
(1) 偶然内聚:如果一个模块完成一组任务,这些任务彼此间即使有关系,关系也是很松散的。(0分)
(2) 逻辑内聚:如果一个模块完成的任务在逻辑上属于相同或相似的一类。(1分)
(3) 时间内聚:如果一个模块包含的任务必须在同一时间内执行(3分)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/569118.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】Docker学习_本地/容器文件互传(5)

1、查找所有容器 #docker ps a 2、找出我们想要的容器名字并查找容器长ID #docker inspect -f {{.ID}} python 3、拷贝本地文件到容器 docker cp 本地路径 容器长ID:容器路径docker cp /Users/xubowen/Desktop/auto-post-advance.py 38ef22f922704b32cf2650407e16b146bf61c221…

数据流图典型例题

数据流图典型例题 1.假设一家工厂的采购部每天需要一张订货报表,报表按零件编号排序,表中列出所有需要再次订货的零件。对于每个需要再次订货的零件应该列出下列数据:零件编号、零件名称、订货数量、目前价格、主要供应商、次要供应商。零件…

对称机密算法与非对称机密算法

1、对称加密算法, 加密和解密用的是同一个密钥,常见的为AES算法。缺点:秘钥才传输过程中可能被截取,存在安全问题, 2、非对称加密算法,常见的为RSA算法,它不是像对称机密的算法, 双方…

白盒测试的逻辑覆盖辨析(语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖)

白盒测试逻辑覆盖(语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖) 逻辑覆盖测试: 语句覆盖:每条语句至少执行一次判定覆盖:每一判定的每个分支至少执行一次条件覆盖:每一判定中的每个条件&…

03 CSS听课笔记

CSS:页面美化和布局控制 1. 概念: Cascading Style Sheets 层叠样式表层叠:多个样式可以作用在同一个html的元素上,同时生效 2. 好处:(1)功能强大(2)将内容展示和样式控制分离   * 降低耦合度。解耦   * 让分工协作…

安装MySQL时出现“服务没有响应控制功能。请键入 NET HELPMSG 2186 以获得更多的帮助。”的问题解决

安装MySQL时出现“服务没有响应控制功能”的问题解决第一步:设置环境变量第二步:初始化my.ini第三步:添加文件第一步:设置环境变量 安装MySQL时,运行“net start mysql”时出现“服务没有响应控制功能。请键入 NET HE…

vue-cli webpack 引入jquery

今天费了一下午的劲,终于在vue-cli 生成的工程中引入了jquery,记录一下。(模板用的webpack) 首先在package.json里的dependencies加入"jquery" : "^2.2.3",然后install 在webpack.base.conf.js里加入 var webpack requi…

时间序列模型——ARIMA模型实现预测

ARIMA模型和因子预测 文章目录ARIMA模型和因子预测一、ARIMA模型(整个周期)1.数据预处理2.展示时序图2.数据建模(1)差分d(2)p和q(3)选择模型(4)检验残差序列&…

线段树 离散化

题目一:E. Infinite Inversions 这个题目没什么思维量,还比较简单,就是离散化要加上每一个值的后面一个值,然后每一个值放进去的不是1 ,而是这个值与下一个点的差值。 因为这个数代表了一堆数,然后每一次的…

时序模型——如何用Python进行时序模型预测的baseline预测(简单规则)

时序模型——如何用Python进行时序模型预测的baseline预测(简单规则) 在对时间序列问题进行建模预测之前,通常可以通过一些简单的规则对结果进行提前的预测,可以作为baseline,供之后的模型进行参考。很多数据分析的比…

国内一些大公司的开源项目

http://www.open-open.com/lib/view/open1377700292339.html 阿里 阿里的开源项目很多,这也跟淘宝正明的开源态度密不可分。有很多重量级的项目,例如LVS、Tengine,或者很有实践价值的中间件,例如 MetaQ(分布式消息系统)、dubbo(RP…

简单关联规则算法例题-9个顾客的编号为(T1,T2,T3,T4,T5,T6,T7,T8,T9),每一个顾客购买的商品记录{{I1,I2,I5}...},并使用python实现简单关联规则

题目: 简单关联规则算法例题-9个顾客的编号为(T1,T2,T3,T4,T5,T6,T7,T8,T9),每一个顾客购买的商品记录{{I1,I2,I5},{I2,I4},{I2,I3},{I1,I2,I4},{I1,I3},{I2,I3},{I1,I3},{I1,I2,I3,I5},{I1,I2,I3}},求频繁项集;并用py…

ASP.NET AJAX (Atlas) 拖放(Drag Drop)功能6种实现方法总结

在Ajax程序中实现传统桌面程序中异常简单的拖放功能却并不是件容易的事情。然而Web上的拖放功能又如此的让人痴迷,所以几乎每个成熟的Ajax类库都提供了自己的一套实现拖放的封装,ASP.NET AJAX (Atlas) 自然也不例外。本文将总结并简要分析ASP.NET AJAX (…

python实现决策树-数据集如下图所示,根据我们对决策树的理解,设计一棵决策树,并输入{Age:36,Salary:H,STU:No,Credit:OK} 测试数据,是否与预期结果一致?

题目:数据集如下图所示,根据我们对决策树的理解,设计一棵决策树,并输入{Age:36,Salary:H,STU:No,Credit:OK} 测试数据,是否与预期结果一致?注意,不允许直接调用Sklearn提供的决策树方法 决策树算…

047 一维数据的格式化和处理

目录 一、概述二、数据组织的维度2.1 从一个数据到一组数据2.2 维度:一组数据的组织形式2.3 一维数据2.4 二维数据2.5 多维数据2.6 高维数据2.7 数据的操作周期三、一维数据的表示3.1 如果数据间有序:使用列表类型3.2 如果数据间无序:使用集合…

Python 将字典(dict)转换为DataFrame

Python 将字典(dict)转换为DataFrame 1.将字典转换为 Pandas DataFame 的方法 Pandas 的 DataFrame 构造函数pd.DataFrame()如果将字典的 items 作为构造函数的参数而不是字典本身,则将字典转换为 dataframe。 import pandas as pdfruit_dict {3: apple,2: banan…

jupyter中中文显示不正常_jupyter画图中文显示乱码问题解决办法

问题:为什么Jumpy中运行图片无法正常显示中文字体? 在使用jumpy运行可视化代码时,发现图片无法正常显示中文符号,在尝试网上诸多方法后,发现只需加一行代码即可解决 解决方法: 可以查看一下代码中是否存…

如何合理的定义用户流失——流失多少天算流失

关于流失用户,我们首先想到的是选择怎样的时间跨度才能准确定义玩家为一个流失用户。通常在游戏中,会有对流失玩家召回活动,假如流失玩家的流失期限定义太短,比如3天未登录游戏,即算流失;这样虽然能够覆盖更…

ng-bootstrap 组件集中 tabset 组件的实现分析

ng-bootstrap: tabset 本文介绍了 ng-bootstrap 项目中&#xff0c;tabset 的实现分析。 使用方式 <ngb-tabset> 作为容器元素&#xff0c;其中的每个页签以一个 <ngb-tab> 元素定义&#xff0c;在 <ngb-tabset> 中包含若干个 <ngb-tab> 子元素。 在 &…

如何使jupyter notebook自动补全代码和生成不同级别的标题

在我们使用jupyter notenook去编写程序时&#xff0c;在这个交互式的笔记本上使用python语言去进行数据分析&#xff0c;十分方便。但当分析的内容有点多时&#xff0c;我们能清楚的看清该步内容处于第几级目录下&#xff0c;使分析的逻辑清晰明了。因此接下来&#xff0c;我们…