[架构之路-183]-《软考-系统分析师》-13-系统设计( 二 )


内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事 。它描述的是模块内的功能联系 。
2.2耦合的分类
耦合:是对模块间关联程度的度量 。
耦合的强弱取决与模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少 。
模块间的耦合度是指模块之间的依赖关系,包括:
模块间联系越多,其耦合性越强,同时表明其独立性越差 。
降低模块间的耦合度能减少模块间的影响,防止对某一模块修改所引起的“牵一发动全身”的水波效应,保证系统设计顺利进行 。
耦合度就是某模块(类)与其它模块(类)之间的关联、感知和依赖的程度,是衡量代码独立性的一个指标 。
备注0:
共享资源虽然是高耦合,但并非一无是处,当两个模块之间需要高性能数据交换时,共享内存(共享数据)是一个非常高效的手段!!!
备注1:不存在完全孤立的模块
没有与外界完全没有耦合的模块,与外界完全没有耦合的模块是信息孤岛,是没有存在的意义和价值的!!!!
备注2:公共耦合会引起以下问题
1. 无法控制各个模块对公共数据的存取,严重影响了软件模块的可靠性和适应性 。

[架构之路-183]-《软考-系统分析师》-13-系统设计

文章插图
2. 使软件的可维护性变差 。若一个模块修改了公共数据,则会影响相关模块 。
3. 降低了软件的可理解性 。不容易清楚知道哪些数据被哪些模块所共享,排错困难 。
一般地,仅当模块间共享的数据很多且通过参数传递很不方便时,才使用公共耦合 。
备注3:内容耦合
一个模块直接访问另一模块的内容,则称这两个模块为内容耦合 。
若在程序中出现下列情况之一,则说明两个模块之间发生了内容耦合:
1. 一个模块直接访问另一个模块的内部数据 。
2. 一个模块不通过正常入口而直接转入到另一个模块的内部 。
3. 两个模块有一部分代码重叠(该部分代码具有一定的独立功能) 。
4. 一个模块有多个入口 。
内容耦合可能在汇编语言中出现 。大多数高级语言都已设计成不允许出现内容耦合 。这种耦合的耦合性最强,模块独立性最弱 。
第3章 增加高内聚降低耦合度的方法 3.1增加高内聚3.2降低耦合度
1、少使用类的继承,多用接口隐藏实现的细节 。
Java面向对象编程引入接口除了支持多态外,隐藏实现细节也是其中一个目的 。
继承能很好的利用现有内的结构化定义,但也会导致两个类深度耦合 。
2、模块的功能化分尽可能的单一
道理也很简单,功能单一的模块供其它模块调用的机会就少 。
(其实这是高内聚的一种说法,高内聚低耦合一般同时出现) 。
3、遵循一个定义只在一个地方出现 。
4、少使用全局变量 。
5、类属性和方法的声明少用,多用关键字 。
的本质就是类的接口,接口越多,对外的依赖性越大 。属性越少,与外界的接口越少 。
6、多用设计模式,比如采用MVC的设计模式就可以降低界面与业务逻辑的耦合度 。
设计模式本身,就是遵循高内聚、低耦合的原则设计的模式!!!
7、尽量不用“硬编码”的方式写程序,同时也尽量避免直接用SQL语句操作数据库 。
摆脱业务代码与数据库的强耦合 。
8、最后当然就是避免直接操作或调用其它模块或类的数据(内容耦合);
【[架构之路-183]-《软考-系统分析师》-13-系统设计】如果模块间必须存在耦合,原则上尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,避免使用内容耦合 。