软件工程--------耦合和内聚

news/2024/7/3 14:57:51

我们在设计程序的时候,往往会划分模块,怎样更好的设计模块?模块的设计标准又是什么?

模块的耦合和内聚就是用来描述模块设计的好坏。模块的划分总原则是 高内聚、低耦合。

模块的耦合方式从低到高依次是非直接耦合----数据耦合---标记耦合---控制耦合---外部耦合---公共耦合---内容耦合。模块的独立性和耦合性正好是相反的,模块的独立性越低,耦合性越高。简单地说,软件工程中对象之间的耦合度就是对象之间的依赖性。指导使用和维护对象的主要问题是对象之间的多重依赖性。对象之间的耦合越高,维护成本越高。因此对象的设计应使类和构件之间的耦合最小。

             

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

       数据耦合:   如果一个模块访问另一个模块时彼此之间是通过简单数据参数来交换输入、输出信息的,则称这种                               耦合为数据耦合。简单数据参数不包括控制参数、公共数据结构、外部变量。

       标记耦合:   如果一组模块通过参数表传递记录信息,这就是标记耦合。

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

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

        公共耦合:   若一组模块都访问同一个公共数据环境,则他们之间的耦合就称之为公共耦合。

                      公共耦合又分松散公共耦合和紧密公共耦合。

         内容耦合:  是一个强耦合,指的是几个模块共用一段代码或者是两个模块可以互相调用相互的代码,这就叫做                              内容耦合。两个模块之间的代码是重迭的。


模块内聚从高到低依次是功能内聚---信息内聚---通信内聚---过程内聚---时间内聚---逻辑内聚---巧合内聚。

                                              

     

          功能内聚:   一个模块中各个部分都是完成某一具体功能必不可少的组成部分,是不可分割的。

          信息内聚:   这种模块完成多个功能,各个功能都在同一数据结构上操作,每一项功能都有一个唯一的入口                                      点。

          通信内聚:   如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称之为通信                                 内聚模块。

          过程内聚:   使用流程图作为工具设计程序时,把流程图的某一部分划出组成模块,这就得到过程内聚模块。

          时间内聚:   时间内聚模块的各个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行。

          逻辑内聚:  指的是把若干个相关的功能组合在一起,就构成了逻辑内聚。


只有清除的了解了模块的耦合和内聚我们才能设计出高内聚和低耦合的程序。以我的理解,我们现在只是知道了设计模块要遵守高内聚、低耦合这个原则,但具体还是不知道这是个什么东西,所以实践出真知,我们以后再做软件的时候要想到这一点,要做到高内聚、低耦合在我心,模块内的联系强、模块间的联系弱。




http://www.niftyadmin.cn/n/4582055.html

相关文章

理理清楚 超键、候选键、主键和外键

超键也叫超关键字、候选键也叫候选关键字、主键也叫主关键字、外键也叫外关键字。中国的汉字真是博大精深那! 先上概念: 超键: 在关系中能唯一标识元组的属性集称为关系模式的超键; 候选键: 不含有多余属性的…

自定义 Django的User Model,扩展 AbstractUser类注意事项

本篇主要讨论一下User Model的使用技巧. 注意, 由于Django 1.5之后user model带来了很大的变化, 本篇内容只针对django 1.5之后的版本. 1. 确定 User Model 我们推荐一下方式来确定某一django项目使用的user model: # 使用默认User model时>>> from django.contrib.au…

软功需要用到的几种图

随着软件危机的不断产生,所以大家才提出了软件工程这门学科,软件工程简单来说就是用工程化的方法管理软件的开发和维护,使软件容错率大大降低。 描述复杂的事物时图形远比文字叙述优越的多,它形象直观容易理解。 系统流程图 在…

进程中的事件

# 可控制 多个进程 同时 执行或阻塞# 事件# set 和 clear# 分别用来修改一个事件的状态,True或者False,True表示设置为非阻塞,False表示设置为阻塞# is_set 查看一个事件的状态# wait 根据事件状态来决定自己是否阻塞# from multiprocessing …

UML与软件开发的关系

我们都知道软件工程是由于软件危机而产生的一门具有科学化开发方法的一门学科。 经典的软件工程思想将软件开发分成以下五个阶段:需求捕获(Requirement Capture)阶段、系统分析与设计(System Analysis And Design)阶段…

H3C-Cloud Lab实验-OSPF配置实验

一、实验拓扑图 实验需求: 1、按照图示配置 IP 地址 2、按照图示分区域配置 OSPF ,实现全网互通 3、为了路由结构稳定,要求路由器使用环回口作为 Router-id,ABR 的环回口宣告进骨干区域 4、掌握OSPF初始化流程、路由表学习的过…

LeetCode03 最长无重复子串

题目 给定一个字符串,找出不含有重复字符的最长子串的长度。 解答 刚开始以为只是一遍遍历后来的字符和前面一样便开始算新子串,给的案例都过了,但是卡在了“dvdf” 后来经过重重试验,暴力循环,不断调整变量作用域&…

deepin系统使用deepin-wine安装exe程序

2019独角兽企业重金招聘Python工程师标准>>> deepin自带原生deepin-wine使用命令如下: deepin-wine QQBrowser.exe deepin-wine QQMusicSetup.exe 默认安装的快捷方式位置: /root/.wine/drive_c/Program Files/Tencent/QQBrowser /home/he/.w…