高内聚低耦合

本文介绍了软件设计中模块间耦合性和内聚性的概念,分析了不同类型的耦合及其实现方式,强调了高内聚低耦合的设计原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 耦合性

    耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系,模块间联系越多,耦合性越强,模块的独立性越差。软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准,划分摸块的一个准则就是高内聚低耦合。形象的说就是,写的代码要和电脑一样,主类就是电脑的主机箱,当程序需要实现什么功能的时候只需要把其他的类引入即可,就像主机箱需要内存条运行程序、硬盘存储数据、USB接口实现输入输出、CPU实现计算,主类加入这些功能类即可。例如,一个程序有50个函数,这个程序执行得非常好,然而一旦你修改其中一个函数,其他49个函数都需要做修改,这就是高耦合的后果。

 一般模块间可能的连接方式有七种,所以形成了七种耦合类型,按照独立性由强到弱介绍。

  非直接耦合(NondirectCoupling)

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

  数据耦合(DataCoupling)

 如果一个模块访问另一个模块时,是通过方法调用传递参数来交换输入、输出信息的,则称这种耦合为数据耦合。数据耦合是松散的耦合,模块之间的独立性比较强,在软件程序结构中至少必须有这类耦合。

  印记耦合(StampCoupling)

 如果一组模块通过参数表传递记录信息,就是标记耦合。事实上,这组模块共享了这个记录,它是某一数据结构的子结构,而不是简单变量。这要求这些模块都必须清楚该记录的结构,并按结构要求对此记录进行操作。在设计中应尽量避免这种耦合,它使在数据结构上的操作复杂化了。如果采取“信息隐蔽”的方法,把在数据结构上的操作全部集中。

  控制耦合(ControlCoupling)

 如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。这种耦合的实质是在单一接口上选择多功能模块中的某项功能。控制耦合也意味着控制模块必须知道所控制模块内部的一些逻辑关系,这些都会降低模块的独立性。

  外部耦合(ExternalCoupling)

 一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。例如C中各个模块都访问被说明为extern类型的外部变量。外部耦合引起的问题类似于公共耦合,区别在于在外部耦合中不存在依赖于一个数据结构内部各项的物理安排。

  公共耦合(CommonCoupling)

 若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共复盖区等。 这种耦合会引起下列问题:所有公共耦合模块都与某一个公共数据环境内部各项的物理安排有关,若修改某个数据的大小,将会影响到所有的模块。无法控制各个模块对公共数据的存取,严重影响软件模块的可靠性和适应性。公共数据名的使用,明显降低了程序的可读性。公共耦合的复杂程度随耦合模块的个数增加而显着增加。

 内容耦合(ContentCoupling)

 如果发生下列情形,两个模块之间就发生了内容耦合。一个模块直接访问另一个模块的内部数据;一个模块不通过正常入口转到另一模块内部;两个模块有一部分程序代码重叠(只可能出现在汇编语言中);

 二 内聚性

 内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好只做一件事,内聚性描述的是模块内的功能联系。高内聚就是一个类封装的很完善,每个类只完成一项任务,也就是常说的单一责任原则

 高内聚低耦合含义:每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值