Spring笔记(二)

二、高内聚低耦合

1.概念

高内聚低耦合,是软件工程中的概念,是判断软件设计好坏的标准,主要用于程序的面向对象的设计,主要看类的内聚性是否高,耦合度是否低。目的是使程序模块的可重用性、移植性大大增强。通常程序结构中各模块的内聚程度越高,模块间的耦合程度就越低。内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事,它描述的是模块内的功能联系;耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。

2.内聚

内聚:表示内部间聚集、关联的程度,那么高内聚就是指要高度的聚集和关联

高内聚:根据类与类之间的关系而定,高们之间的关系要简单明了,不要有很强的关系,不然运行起来就会出问题一个类的运行影响到其他的类

由于高内聚具备可靠性,可重用性,可读性等优点,模块设计推荐采用高内聚

偶然内聚巧合内聚一个模块内的各处理元素之间没有任何联系,只是偶然地被凑到一起,内聚程度最低

逻辑内聚:这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块参数来确定该模块应完成哪一种功能

时间内聚:把需要同时执行的动作组合在一起形成的模块称为时间内聚模块

过程内聚:构件或者操作的组合方式是,允许在调用前面的构件或操作之后,马上调用后面的构件或操作,即使两者之间没有数据进行传递如果一个模块内的处理元素是相关的,而且必须以特定次序执行则称为过程内聚

通信内聚信息内聚指模块内所有处理元素都在同一个数据结构上操作或所有处理功能都通过公用数据而发生关联模块内各个组成部分都使用相同的数据结构或产生相同的数据结构

顺序内聚:一个模块中各个处理元素和同一个功能密切相关,而且这些处理必须顺序执行,通常前一个处理元素的输出是后一个处理元素的输入

功能内聚:模块内所有元素的各个组成部分全部都为完成同一个功能而存在,共同完成一个单一的功能,模块已不可再分模块仅包括为完成某个功能所必须的所有成分,这些成分紧密联系、缺一不可

3.耦合

耦合:对模块间关联程度的度量耦合的强弱取决模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少

模块间的耦合度模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差。降低模块间的耦合度能减少模块间的影响,防止对某一模块修改所引起水波效应,保证系统设计顺利进行

耦合度某模块(类)与其它模块(类)之间的关联、感知和依赖的程度,是衡量代码独立性的一个指标

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

数据耦合:调用模块和被调用模块之间只传递简单的数据项参数。相当于高级语言中的值传递

标记耦合特征耦合:调用模块和被调用模块之间传递数据结构而不是简单数据,表就和的模块间传递的不是简单变量,而是像高级语言中的数据名、记录名和文件名等数据结果

这些名字即为标记,其实传递的是地址

控制耦合:模块之间传递的不是数据信息,而是控制信息例如标志、开关量等,一个模块控制了另一个模块的功能

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

公共耦合:一组模块都访问同一个全局数据结构,公共数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等

如果模块只是向公共数据环境输入数据,或是只从公共数据环境取出数据,这属于比较松散的公共耦合

如果模块既向公共数据环境输入数据又从公共数据环境取出数据,这属于较紧密的公共耦合

4.降低耦合度的方法

(1)少使用类的继承,多用接口隐藏实现的细节Java面向对象编程引入接口除了支持多态外,隐藏实现细节也是其中一个目的

(2)模块的功能化划分尽可能的单一,道理也很简单,功能单一的模块供其它模块调用的机会就少(其实这是高内聚的一种说法,高内聚低耦合一般同时出现)。

(3)遵循一个定义只在一个地方出现

(4)少使用全局变量

(5)类属性和方法的声明少用public,多用private关键字

(6)多用设计模式,比如采用MVC的设计模式就可以降低界面与业务逻辑的耦合度

(7)尽量不用“硬编码”的方式写程序,同时也尽量避免直接用SQL语句操作数据库

(8)避免直接操作或调用其它模块或类(内容耦合)如果模块间必须存在耦合,原则上尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,避免使用内容耦合

5.增强内聚度方法

(1)模块只对外暴露最小限度的接口,形成最低的依赖关系

(2)只要对外接口不变,模块内部的修改,就不得影响其他模块

(3)删除一个模块,应当只影响有依赖关系的其他模块,而不应该影响其他无关部分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值