内聚和耦合(学习笔记)

  一、内聚

  内聚是一个模块内部各成分之间相关联程度的度量。把内聚按紧密程度从低到高排列次序为:

  1、偶然内聚:指一个模块内各成分为完成一组功能而组合在一起,它们相互之间即使有关系,也很松散。

  2、逻辑内聚:一个模块完成的诸任务逻辑上相关

  3、时间内聚:一个模块包含的诸任务必须在同一时间段内执行

  4、过程内聚:模块内部的处理成分是相关的,而且这些处理必须以特定的次序进行执行。

  5、通信内聚:模块的所有成分都操作同一数据集或生成同一数据集。

  6、顺序内聚:模块的各个成分和同一个功能密切相关,而且一个成分的输出作为另一个成分的输入。

  7、功能内聚:模块的所有成分对于完成单一的功能都是必须的。

  二、耦合

  耦合是指两个实体相互依赖于对方的一个量度.分为以下几种:

  1、非直接耦合:两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的

  2、数据耦合:一个模块访问另一个模块时,彼此之间是通过简单数据参数 (不是控制参数、公共数据结构或外部变量) 来交换输入、输出信息的。

  3、标记耦合:一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。

  4、控制耦合:如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。

  5、外部耦合:一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。

  6、公共耦合:若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。

  7、内容耦合:如果发生下列情形,两个模块之间就发生了内容耦合

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

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

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

  (4) 一个模块有多个入口。

  

  耦合强度

  耦合的强度依赖于以下几个因素:(1)一个模块对另一个模块的调用;(2)一个模块向另一个模块传递的数据量;(3)一个模块施加到另一个模块的控制的多少;(4)模块之间接口的复杂程度。

    

软件工程_7th weeks的更多相关文章

  1. 软件工程_6th weeks

    一.上次博客时说的UI,拖拉到现在才展示,完成了“登录,普通匹配,做题界面,做题结果”四项 功能: 二.单元测试工具 1.python单元测试工具   最近因为论文原因一直在用Python,Pytho ...

  2. 软件工程_1st weeks

    本周为软件工程课的第一周,本周主要完成了三个工作:了解了github并使用.拜读了<构建之法>并开通了博客以及完成了四则运算的代码实现. 对于第一项工作github的安装和使用,花费了5个 ...

  3. 软件工程_10th weeks

    不管是什么原因,都没有在周三24:00前发布博客,赶紧用行动补上~ psp DATE START_TIME END_TIME EVENT TYPE     DELTA 5.8 9:00 12:00 论 ...

  4. 软件工程_9th weeks

    PSP DATE START_TIME END_TIME EVENT TYPE       TIME 4.30-5.3 5:30 4:00 旅游 娱乐       72h 5.3 14:00 17:0 ...

  5. 软件工程_8th weeks

    第八周PSP 个人时间管理 由于本周主要在做论文实验,除了学习时间外有一些零散的时间也在思考代码的书写以及论文实验的流程,但是这些零散的时间并没有在总的表记录,所以想问一下老师,像这种平时零散思考的时 ...

  6. 软件工程_5th weeks

    从周五开始经历了清明小长假,周六.周日和周一都处于假期状态,因此对于上篇博客的评论回复的很迟,而这周的工作做的也不多. 1.爆打小组 4.5日站立会议 时间:2016.4.5 15:00-15:34 ...

  7. 软件工程_4th weeks

    本周要进行阿尔法版本的发布,因此我们做了一些代码和测试方面的工作.当然了下了课后第一件事还是巩固课上讲的知识,比如MVP.四象限.看了演讲<最后一课>等. 一.结对编程 本周的结对编程继续 ...

  8. 软件工程_3rd weeks

    本周上课的第一件事就是四人组队做工程,因为之前没有太多的准备,所以过程有些仓促,只是最后的结果是好的.有了自己的队伍和课题.感觉就应该这样,平时的我们比较随意,没有一丝的紧迫感,这样会督促着我们完成任 ...

  9. 软件工程_2nd weeks

    本周上课没有板书,都由老师口头叙述 因此有的笔记记得不是很全,幸好有郑蕊师姐发布的课堂笔记,很好的梳理上课的内容~ 1.根据老师上课给的建议,进行了深刻的思考和反思 1.1 作为一个学硕研究生,这门课 ...

随机推荐

  1. 20145203盖泽双 《网络对抗技术》实践1—— MAL_逆向与Bof基础

    20145203盖泽双 <网络对抗技术> MAL_逆向与Bof基础 实践目标 (1)我们要通过修改程序代码,使得程序运行其自身中本不该运行的代码片段. (2)在这里,我们有一个名为2014 ...

  2. 转载 锁机制与原子操作 <第四篇>

    一.线程同步中的一些概念 1.1临界区(共享区)的概念 在多线程的环境中,可能需要共同使用一些公共资源,这些资源可能是变量,方法逻辑段等等,这些被多个线程共用的区域统称为临界区(共享区),临界区的资源 ...

  3. 1226 快速幂 取余运算 洛谷luogu

    还记得 前段时间学习二进制快速幂有多崩溃 当然这次方法略有不同 居然轻轻松松的 题目描述 输入b,p,k的值,求b^p mod k的值.其中b,p,k*k为长整型数. 输入输出格式 输入格式: 三个整 ...

  4. webpack4+express+mongodb+vue 实现增删改查

    在讲解之前,我们先来看看效果如下所示: 1)整个页面的效果如下: 2) 新增数据效果如下: 3) 新增成功如下: 4) 编辑数据效果如下: 5) 编辑成功效果如下: 6) 删除数据效果如下: 7) 删 ...

  5. sonar6.7.6安装及汉化

    sonar下载地址 https://www.sonarqube.org/downloads/ 下载请选择 然后解压 在目录F:\tools\sonarqube-6.7.6\bin\windows-x8 ...

  6. 【Codeforces 1132D】Stressful Training

    Codeforces 1132 D 题意:给\(n\)个电脑的电量和耗电速度,你可以买一个充电器,它的充电速度是每秒\(v\)单位,\(v\)你自己定.问最小的\(v\)能使得在\(k\)秒内每秒给某 ...

  7. Android学习之Button按钮在程序运行时全部变大写的处理

    问题: 在layout布局文件中,我们命名的按钮名称是“button1”,程序运行过后,在app上显示出来的是“BUTTON1”,先看源代码和效果: 按钮源代码: 运行效果: 解决办法: 方法一: 在 ...

  8. linux 修改内核参数 如何生效?

    Linux 操作系统修改内核参数有3种方式: 修改 /etc/sysctl.conf 文件,加入配置选项,格式为 key = value ,修改保存后调用 sysctl -p 加载新配置使用 sysc ...

  9. (转)Ubuntu无法找到add-apt-repository问题的解决方法

    原文 网上查了一下资料,原来是需要 python-software-properties 于是 apt-get install python-software-properties 除此之外还要安装 ...

  10. [UWP 自定义控件]了解模板化控件(8):ItemsControl

    1. 模仿ItemsControl 顾名思义,ItemsControl是展示一组数据的控件,它是UWP UI系统中最重要的控件之一,和展示单一数据的ContentControl构成了UWP UI的绝大 ...