浅谈函数的内聚性

简介: 在设计类的时候,抽象和封装已经很大程度上取代了内聚性。但是在子程序这一层次上,内聚性仍是常用的启发式方法。下面内容,来自《代码大全》 对与子程序而言,内聚性是指子程序中各个操作之间的联系的紧密程度。

在设计类的时候,抽象和封装已经很大程度上取代了内聚性。但是在子程序这一层次上,内聚性仍是常用的启发式方法。下面内容,来自《代码大全》

对与子程序而言,内聚性是指子程序中各个操作之间的联系的紧密程度。

我们的目标是让子程序只把一件事情做好,不再做任何其他事情。

内聚性是针对操作的概念。即操作具有内聚性。通常,一个操作指一个语句,或一个函数调用。一个是简单的操作,一个是复杂的操作。

内聚性的一些概念,理解概念有助于思考如何让子程序尽可能的内聚。

1、  功能的内聚性:让一个子程序仅执行一项操作。这是最强的也是最好的内聚性。其他的内聚性则不够理想。

2、  顺序上的内聚性:子程序内包含按照特定顺序执行的操作,这些步骤需要共享数据,而只有全部执行完毕后,才完成了一下完整的功能。 顺序上的内聚性设计成功能上的内聚性需要对顺序进行分解,形成多个功能更加单一的子程序 

3、  通信上的内聚性:子程序中的不同操作使用了同样的数据,当不存在其他任何联系。 优化的方法是将子程序分解为多个子程序。

4、  临时的内聚性:子程序中含有一些因为需要同时执行才放到一起的操作。 优化方法是把临时性的子程序看成是一系列事件的组织者,即让它直接调用其他的子程序,而不是直接执行所有的操作。另外,可以通过函数的命名,表达子程序完成的功能。避免使用多个操作叠加的方法命名,因为它暗示子程序只有巧合的内聚性。

除功能的内聚性外,其他类型的内聚性都是不可取的。要想办法避免。

1、  过程上的内聚性:子程序中的操作是按特定的顺序进行的,除此外没有任何联系。对子程序分解,把不同的功能纳入不同的子程序中,让调用方的子程序具有单一而完整的功能。

2、  逻辑上的内聚性:若干操作被放入同一个子程序中,通过传入的控制标志选择执行其中的一项操作。各个操作间没有任何的逻辑关系,这些操作只是被包含在一个很大的case 或 if 语句中。如果此子程序只是分发命令,根据命令调用不同的子程序,则这种做法也是不错的。其他的不好的情况,可以通过分解来进行优化。分解为多个独立的子程序。

3、  巧合的内聚性:子程序内部的各个操作间没有任何的关联。

内聚性考虑的是在一个子程序内部,操作的关联程度。

编写功能上的内聚性的子程序几乎总是可能的,因此把注意力集中于功能上的内聚性,从而得到最大的收获。

使用上面的建议对我的流程引擎程序进行内聚性的优化,发现确实很有价值。值得在后面的设计和编码中坚持这种优化。


转自博客:
http://blog.csdn.net/chgaowei/article/details/4927437

参考博客:
http://blog.sina.com.cn/s/blog_4ca059540100jnk7.html

相关文章
|
存储 缓存 测试技术
CMake String函数:如何巧妙地在cmake中操作字符串
CMake String函数:如何巧妙地在cmake中操作字符串
1341 0
|
存储 Rust 并行计算
【密码学】一文读懂XTS模式
这篇文章的灵感来源于我偶然翻到的一个某U盘有关磁盘加密的一个介绍(这一篇不是广告蛤), 然后发现这个模式我之前还真没遇到过,因此呢,就学习了一下,就出来了这一篇文章。
6947 0
【密码学】一文读懂XTS模式
|
消息中间件 缓存 监控
系统稳定性建设实践总结
2020年,注定是个不平凡的一年。疫情的蔓延打乱了大家既定的原有的计划,同时也催生了一些在线业务办理能力的应用诉求,作为技术同学,需要在短时间内快速支持建设系统能力并保障其运行系统稳定性。恰逢年终月份,正好梳理总结下自己的系统稳定性建设经验和思考。
系统稳定性建设实践总结
|
监控 安全 测试技术
现在公司都在用的CI/CD框架到底是什么?
现在公司都在用的CI/CD框架到底是什么?
5202 1
|
监控 Java API
如何通过监控工具来诊断G1垃圾回收器的性能问题?
如何通过监控工具来诊断G1垃圾回收器的性能问题?
147 2
|
移动开发 HTML5
HTML5中的Web Notification桌面通知(右下角提示)
HTML5中的Web Notification桌面通知(右下角提示)
207 0
|
算法 安全 Java
Java代码规范的重要性
Java代码规范的重要性
394 0
|
IDE 前端开发 Java
带你读《2022技术人的百宝黑皮书》——开发规约的意义与细则(6)
带你读《2022技术人的百宝黑皮书》——开发规约的意义与细则(6)
204 0
带你读《2022技术人的百宝黑皮书》——开发规约的意义与细则(6)
|
存储 SQL 数据库
带你读《2022技术人的百宝黑皮书》——开发规约的意义与细则(5)
带你读《2022技术人的百宝黑皮书》——开发规约的意义与细则(5)
198 0
|
程序员 Memcache Java
代码是写给人看的,不是写个机器看的
《计算机程序的构造和解释》(简称为SICP) 这本书提到,代码是写给人看的,不是写给机器看的,只是顺便计算机可以执行而已。如果代码是写给机器看的,那完全可以使用汇编语言或者机器语言(二进制),直接让机器执行。
1629 0