首页 > 范文大全 > 正文

浅谈OOP中的耦合、内聚

开篇:润墨网以专业的文秘视角,为您筛选了一篇浅谈OOP中的耦合、内聚范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘 要:耦合、内聚是软件工程中的一个概念。低耦合、高内聚是面向对象编程中的应遵守的基本原则。不同的设计人员对于这个原则的理解不同,其所设计、开发的系统也不尽相同。本文以学生信息管理系统为例,诠释了笔者对于低耦合、高内聚的理解。

关键词:耦合;内聚

中图分类号:TP312.2-4

1 耦合

所谓耦合指的是软件系统中一个代码模块与另一个代码模块之间的关系。耦合度越高说明模块间的关系越紧密;反之模块之间的关系越少。为了提高软件系统应对变更的能力、提高代码的重用率、减少因变更而花费的变更成本,在进行系统设计时应尽量降低模块之间的耦合度,使各个模块相对独立。这样即使一个模块发生了变更,也不会对其他的模块产生较大的影响。

以学生信息管理系统为例,学生类和班级类是针对学生和班级这两个业务实体的实体类。从低耦合的原则上讲它们之间应相对独立,不产生过多的交互。学生类提供学生信息相关的操作;班级类提供班级信息相关的服务。如图1所示:

学生类Student中包含了与学生这个业务实体相关的属性和操作,如学号、姓名、班级、住址、手机号、添加学生信息、修改学生信息、删除学生信息、查询学生信息等。通常一个学生只属于一个班级,为此在Student类中包含了一个Classes类型的属性。实现了Student类对Classes类的多对一关联。此外Student类中还包含了通过班级号查询学生的操作。虽然该操作以学号作为参数,但其主要功能是实现学生的查询。遵循低耦合的原则,该操作应该放在Student类中,而不是Classes类。

从分层的角度上讲,同样需要遵循低耦合的原则。如图2所示:

对于学生信息管理系统来说,可以采用标准的三层架构,即UI层、实体层、数据访问层(DAL)。其中UI层负责用户交互;实体层启到了承上启下的作用。既对UI层提供功能上的支持,又要调用数据访问层(DAL),实现业务实体到关系表的映射;数据访问层(DAL)则提供了数据持久化的相关操作。

本着低耦合的原则,层与层之间仅仅是向下依赖的,即UI层依赖于实体层,实体层依赖于数据访问层(DAL)。隔层之间(UI层与数据访问层(DAL))是不可见的。也就是说,UI层不会用到数据访问层(DAL)中的任何成员。这样就大大降低了层与层之间的耦合度,提高了系统应对变更的能力。举个例子:假设原有学生信息管理系统为C/S结构,出于部属方便的考虑,用户要求将原系统改为B/S结构。基于标准三层架构的学生信息管理系统只需将原有的UI层替换为web项目即可。实体层、数据访问层(DAL)保持不变。

“低耦合”可以总结为“独”。也就是说在设计和开发的过程中,要保持类与类之间,层与层之间的相对独立,不产生多余的关系。

2 内聚

所谓的内聚指的是一个模块各个成员之间的关联程度。内聚性越高说明模块内各个成员关系越紧密,该模块的重用性越强。内聚按紧密程度从低到高排列,依次为包括:偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、信息内聚、功能内聚。

偶然内聚:因为偶然原因出现在一个模块中的成员关系。可以说各个成员之间毫无关系,内聚性最低。例如各个系统中都包含的工具类。工具类成员通常有加、解密,生成随机的校验码等操作。

逻辑内聚:指的是同一个模块中的成员逻辑上相关,但功能上并无关联。

时间内聚:因为时间因素使一组成员关联在一起。例如需要同一时间进行数据同步。

通信内聚:因对同一数据集操作或生成同一数据集而关联在一个模块内的成员。

顺序内聚:为顺序完成一个任务一组成员被放置在一个模块中,一个成员的输出作为另一个成员的输入。

过程内聚:因在一个过程中被先后调用的操作被放置在一个模块中。

信息内聚:基于同一个数据的一组成员被放置在一个模块中。

功能内聚:为完成单一功能,一组成员必须出现在一个模块中。功能内聚是一个功能专一、独立性强、内部结构紧密的内聚类型,是最理想的内聚。例如:Student类包含了学生相关的全部成员。各个成员只为实现学生信息的增删改查提供支持。

“高内聚”可以总结为“紧”,即模块内部各成员之间关系紧密,功能专一。

3 结束语

“低耦合、高内聚”是在进行系统设计、开发过程中应该保持的原则。不同的开发人员因项目经验不同、对面向对象编程的理解不同而各不相同。要充分理解这六个字还需要在项目实战中逐步的去理解,需要一个由量变到质变的过程。

参考文献:

[1]梁立新.项目实践精解・应用开发:基于?C#和的三层架构案例分析[M].北京:电子工业出版社,2010.

[2]Matthew 高级程序设计[M].北京:人民邮电出版社,2011.

[3]Christian 模式:架构设计与过程[M].北京:中国电力出版社,2005.

[4]Jeffrey 框架程序设计[M].北京:清华大学出版社,2003.

[5]Martin L.Shoemaker.UML实战教程[M].北京:清华大学出版社,2006.

作者简介:赵磊(1981-),男,河北人,软件系副主任,讲师,硕士,研究方向:软件技术。

作者单位:天津电子信息职业技术学院,天津 300312