浅谈函数的内聚性

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


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

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

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

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

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

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

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

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

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

 

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

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

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

 

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

 

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

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

看到上面的内容有点似懂非懂,这方面有待继续研究

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值