文章目录

  • 一、耦合
    • 1、独立
    • 2、数据耦合
    • 3、控制耦合
    • 4、特征耦合
    • 5、公共环境耦合
    • 6、内容耦合(耦合程度最高)
  • 二、内聚
    • 1、偶然内聚
    • 2、逻辑内聚
    • 3、时间内聚
    • 4、过程内聚
    • 5、通信内聚
    • 6、顺序内聚
    • 7、功能内聚

一、耦合

1、独立

即两个模块独立工作,没有交互关系,是理想的模块状态。
c++简单实例:

int puls(int a, int b){return a + b;
}string splicing(string a, string b){return a+b;
}

2、数据耦合

两个模块之间,只通过参数交换数据
C++简单实例:

class initial{public:int a = 1;int b = 2;
};class computation{public:int multi(initial A) {int x = A.a;int y = A.b;return ceshi = x * y;}private:int ceshi;
};int main(){computation a;initial A;cout << a.multi(A) << endl;
}

initial负责初始化,computation负责计算,两者只通过参数进行数据交换,即为数据耦合

3、控制耦合

两个模块之间交换信息有控制信息,包括数据类型的控制信息
(控制耦合增加了系统的复杂性,并且往往是多余的,通常可以通过模块分解,用数据耦合代替)
C++简单实例:

class client{public:client(bool vip){this->VIP = vip;}bool getClient(){return VIP;}
private:bool VIP;
};class company{public:void Service(client A){if(A.getClient())cout << "一流服务" << endl;elsecout << "普通服务" << endl;}
};int main(){client A(1);company B;B.Service(A);return 0;
}

客户类A将客户类型作为数据传入公司类,并且能够控制公司类的表现,两者是控制耦合

4、特征耦合

整个数据结构作为参数传递时,被调用的模块只需要使用其中一部分元素。
(通俗来讲,传递的参数包含多种数据,模块只用了其中一部分,并没有全部使用)
C++简单实例:

class Client{public:Client(string Name){name = Name;}void payAcc(float *money){cout << "已付款住宿费" << money[0] << "元" << endl;}void payEntr(float *money){cout << "已付款门票费" << money[1] << "元" << endl;}
private:string name;
};class traBill{public:traBill (float accFee, float entrFee){bill[0] = accFee;bill[1] = entrFee;}float *getBill(){return bill;}
private:float bill[2]; //bill[0]: 住宿费  bill[1]:景点门票
};int main(){traBill B(109.00 , 666.66);Client A("XiaoMing");A.payAcc(B.getBill());A.payEntr(B.getBill());return 0;
}

在上述例子中旅游费用B类传递给用户A的数据结构(账单数组)中,A类每次分别只取用部分数据,即构成特征耦合。
显而易见,这种耦合,是能够较为轻易的简化为数据耦合的(将B类中账单数组拆分,或者将A类中付款功能合并)

5、公共环境耦合

当两个或者多个模块共同使用一个公共数据环境时,它们之间的耦合即为公共环境耦合,其复杂度随着模块数量的增加显著增加。
公共环境可以是:全程变量、共享的通信区、内存的公共覆盖区、任何存储介质上的文件、物理设备等

6、内容耦合(耦合程度最高)

出现以下情况即发生内容耦合:
1、一个模块访问另一个模块的内部数据
2、一个模块不通过正常入口而转移到另外一个模块的内部
3、两个模块有一部分程序代码重叠(只出现在汇编中);
4、一个模块有多个入口(即有多个功能)
内容耦合极易出现程序错误,大多高级语言在设计时已经静止出现内容耦合。


二、内聚

内聚程度从低到高:
程度内聚:偶然内聚<逻辑内聚<时间内聚
程度内聚:过程内聚<通信内聚、
程度内聚:顺序内聚<功能内聚

1、偶然内聚

一个模块完成一组任务,任务与任务之间关系松散,或者没有关系
例如类A中有字符串拼接和浮点型乘积,两个功能之间没有关系;

class A{public:string spe(string a, string b){return a + b;}float mul(fliat a, float b){return a * b;}
};

2、逻辑内聚

一个模块完成的任务在逻辑上属于相同或相似的一类。
例如:计算类中有计算差和计算和的功能,两者逻辑上都属于计算

class compute{public:compute(int X, int Y,int A, int B){this->x = X;this->y = Y;this->a = A;this->b = B;}int sum(){return a+b;}int sub(){return x-y;}private:int x;int y;int a;int b;
}

3、时间内聚

一个模块包含的任务必须在同一段时间内执行;
例如,看博客和收藏、点赞、关注(不是【狗头】)
操作系统中的开机模块,类的初始化等

4、过程内聚

一个模块内的处理元素是相关的,并以特定次序执行。

class average{public:average(int x, int y){this->a = x;this->b = y;}void sum(){this->c = a + b;}int getAverage(){return c/2;}private:int a;int b;int c;
}

上述实例中计算平均值类中,计算和的方法和计算平均值的方法必须依次执行,整个模块具有过程内聚

5、通信内聚

模块中所有元素都使用同一个输入数据或者产生同一个输出数据。

class compute{public:compute(int A, int B){this->a = A;this->b = B;}int sum(){return a+b;}int sub(){return a-b;}private:int a;int b;
};

在上述案例中,sum和sub方法都使用变量a和变量b,但是两者没有执行顺序的要求,构成通信内聚。

6、顺序内聚

模块内的处理元素和同一个功能密切相关,并且处理顺序必须顺序执行。

class sqaDif{public:sqaDif(int A, int B){this->a = A;this->b = B;}void comSqa(){a *= a;b *= b;}int getsqaDif(){return a-b}private:int a;int b;
}

上述功能实现平方差的功能,必须先计算a和b的平方,再求差,都对a和b进行操作,具有顺序内聚

7、功能内聚

模块内所有处理元素属于一个整体(缺一不可),完成一个单一的功能。

int fac(int n){int f;if(n == 1 || n == 0 )f = 1;elsef = n*fac(n-1)return f
}

上述实例只完成计算n!,功能单一

都看到这里了,准研究生们给个赞不过分吧๐·°(৹˃̵﹏˂̵৹)°·๐

软件工程-耦合与内聚简单实例相关推荐

  1. 内容耦合 c语言例子,耦合性 内聚加实例

    基本信息 耦合性(或称"耦合度") 英文 : coupling 耦合性也叫块间联系.指软件系统结构中各模块间相互联系紧密程度的一种度量.模块之间联系越紧密,其耦合性就越强,模块之间 ...

  2. 在C语言中数据耦合例子,耦合性 内聚加实例 - osc_yip56055的个人空间 - OSCHINA - 中文开源技术交流社区...

    基本信息 耦合性(或称"耦合度") 英文 : coupling 耦合性也叫块间联系.指软件系统结构中各模块间相互联系紧密程度的一种度量.模块之间联系越紧密,其耦合性就越强,模块之间 ...

  3. 软件工程之判定表简单实例

    判定表(又称决策表) 用于描述判断条件较多.各个条件又相互组合.有多种决策方案的情况. 判定表构成: 1.条件列表:一个条件对应一个变量.关系或者预测: 2.条件组合:各种条件可能取值的所有组合,有X ...

  4. 简单理解高内聚低耦合-高内聚低耦合通俗理解是什么?

    低耦合: 耦合就是元素与元素之间的连接,感知和依赖量度.这里说的元素即是功能,对象,系统,子系统.模块. 例如:现在有方法A和方法B 我们在A元素去调用B元素,当B元素有问题或者不存在的时候,A元素就 ...

  5. 面向对象三大特性五大原则 + 低耦合高内聚

    面向对象的三大特性是"封装."多态"."继承",五大原则是"单一职责原则"."开放封闭原则"."里氏 ...

  6. velocity用法简单实例说明 .

    http://blog.csdn.net/renxianzuo/article/details/4457381 2009-08-18 01:48 3516人阅读 评论(8) 收藏 举报 velocit ...

  7. ActiveMQ简单介绍+简单实例

    本文出自:http://www.open-open.com/lib/view/open1388994166156.html 1. JMS基本概念      JMS(Java Message Servi ...

  8. c语言如何实现高内聚低耦合_如何实现高内聚低耦合?高内聚低耦合的现实例子...

    下面要给大家分享的是一个高内聚低耦合例子,那么编程应该如何实现高内聚低耦合呢?一起来看看下面的实例吧! 案例: 在一个学校里面,有着老师若干名,依次编号. 有学生若干名,依次编号. 现在的话,是要求要 ...

  9. 很强大!低耦合高内聚的MCU实用软件框架

    大家好,我是晓宇,不知道大家有没有听过软件设计中的低耦合,高内聚的两个原则. 具体是什么意思呢? 在一个项目中:每个模块之间相联系越紧密,则耦合性越高:这样你改动其中一个模块,其他模块也需要一起改动, ...

最新文章

  1. 用html标记语言,HTML标记语言——引用
  2. linux内存占满但是无进程,为什么TOP看不出真实的内存占用情况?
  3. centos中使用python遇到的几个问题
  4. SDM For Face Alignment 流程介绍及Matlab代码实现之训练篇
  5. 【转】10个让人受益的管理原理
  6. Windows下编译openssl库
  7. LeetCode MySQL 569. 员工薪水中位数(over窗口函数)
  8. java数据类型和运算优先级
  9. Speaking of Samsung, I don’t know if you have any
  10. Win7系统不能拖动文件夹的问题怎么解决?
  11. Outlook中的Notes的链接打不开,提示错误信息“File does not exit”
  12. VS2008下easyMule-VeryCD源代码的编译
  13. COMSOL有限元仿真深度指南:如何分析更为复杂的材料各向异性结构?
  14. 《树莓派项目实战》第五节 使用Nokia 5110液晶屏显示Hello World
  15. 查看 namespace 下面所有的资源并删除
  16. Python求各科成绩差与平均数
  17. 【学术相关】为什么那么多博士延期毕业了?
  18. 【OpenCV】OpenCV介绍及C++环境配置
  19. RFID医药供应链管理系统解决方案——铨顺宏FUWIT
  20. 2022海外流媒体十大技术趋势

热门文章

  1. vue上传录音_通过使用vue如何才能实现添加mp3音频文件
  2. 浏览器无法保存密码,每次登录网页都要重新登录
  3. 达人评测i711800h和r55600h哪个好
  4. firefox 14 vim化——Pentadactyl
  5. 多图养眼!Partition,荷兰国旗问题与随机快排
  6. 深入浅出 Gradle Sync 优化
  7. 研发效能度量框架解读
  8. NTLDR is missing和NTLDR is compressed的解决办法
  9. 学模具好还是计算机网络好,模具编程要学多久才会?多长时间能学好?
  10. Could not open /dev/vmmon: No such file or directo