子程序

使用子程序的理由:

1 降低复杂性:使用子程序的最首要原因是为了降低程序的复杂性,可以使用子程序来隐含 信息,从而使你不必再考虑这些信息。

2 避免代码段重复:无可置疑,生成子程序最普遍的原因是为了避免代码段重复。

3 限制改动带来的影响:由于在独立区域进行改动,因此,由此带来的影响也只限于一个或最多几个区域中。要把最可能改动的区域设计成最容易改动的区域。最可能被改动的区域包括:硬件依赖部分、输入输出部分、复杂的数据结构和商务规则。

4 隐含顺序:把处理事件的非特定顺序隐含起来是一个很好的想法。

5 改进性能:通过使用子程序,可以只在一个地方,而不是同时几个地方优化代码段。把相 同代码段放在子程序中,可以通过优化这一个子程序而使得其余调用这个子程序的子程序全部受益。把代码段放入子程序也使得用更快的算法或执行更快的语言(如汇编)来改进这段代码 的工作变得容易些。

6 进行集中控制

7 隐含数据结构

8 隐含指针操作

9 隐含全局变量

10 促进重新使用代码段

11 计划开发一个软件族

12 改善某一代码段可读性

13 改善可移植性

14 分隔复杂操作

15 独立非标准语言函数的

16 简化复杂的布尔测试

子程序的命名很重要,如果找到一个合适的命名非常困难,而模棱两可的名字往往代表着某种警告。

内聚与耦合

所谓内聚性指的是在一个子程序中,各种操作之间互相联系的紧密程度,所谓耦合性指的是两个子程序之间联系的紧密程度。耦合性与内聚性是不同的。内聚性是指一个子程序的内部各部分之间的联系程度,而耦合指的是子程序之间的联系程度。研究它们的目的是建立具有内部整体性(强内聚性),而同时与其它子程序之间的联系的直接、可见、松散和灵活的子程序(松散耦合)。

       可取的内聚性:

       功能内聚性:功能内聚性是最强也是最好的一种内聚,当程序执行一项并且仅仅是一项工 作时,就是这种内聚性,这个评价只有在子程序的名称与其实际内容 相符时才成立。如果它们同时还作其它工作,那么它们的内聚性就要低得多而且命名也不恰当。

       顺序内聚性:顺序内聚性是指在子程序内包含需要按特定顺序进行的、逐步分享数据而又不形成一个完整功能的操作。实际上,如果能用一个很典型的动宾词组来命名一个子程序,那么它往往是功能内聚性, 而不是顺序内聚性。给一个顺序内聚性的子程序命名是非常困难的。如果形成了一个完整功能的操作很容易转化为功能内聚性。

通讯内聚性:通讯内聚性是在一个子程序中,两个操作只是使用相同数据,而不存在其它任何联系时产生的。

临时内聚性:因为同时执行的原因才被放入同一个子程序里,这时产生临时内聚性。要避免这个问题,可以把临时内聚性子程序设计成一系列工作的组织者,即形成特定功能的子程序,然后使用该函数去调用各个特定功能的子程序,而不是自己直接来完成相应的功能。

不可取的内聚性:

过程内聚性:当子程序中的操作是按某一特定顺序进行的,就是过程内聚性。与顺序内聚性不同,过程内聚性中的顺序操作使用的并不是相同数据。

逻辑内聚性:当一个子程序中同时含有几个操作,而其中一个操作又被传进来的控制标志所选择时,就产生了逻辑内聚性。之所以称之为逻辑内聚性,是因为这些操作仅仅是因为控制 流,或者说逻辑的原因才联系到一起的,它们都被包括在一个很大的 if 或者 case 语句中, 它们之间并没有任何其它逻辑上的联系。但是,如果一个逻辑内聚性的子程序代码都是一系列 if case 语句,并且调用其它子程序, 那么这是允许的。在这种情况下,如果程序的唯一功能是调度命令,而它本身并不进行任何处 理,那么这可以说是一个不错的设计。

偶然内聚性。当同一个子程序中的操作之间无任何联系时,为偶然内聚性。也叫作无内聚性

耦合程度的标准:

耦合规模:所谓耦合规模是指两个子程序之间联系的数量多少。对于耦合来说,联系的数量越少越好,因为一个子程序的接口越少,那么在把它与其它子程序相连接时,所要做的工作也越少。

密切性:密切性指的是两个子程序之间联系的直接程度。联系越直接越好,两个子程序之间联系最密切的是参数表中的参数。

可见性:可见性是指两个子程序之间联系的显著程度。

灵活性:灵活性是指改变两个子程序之间联系的容易程度。

简而言之,如果一个子程序越容易被其它子程序调用,那么它的耦合程度也就越低。这样 的好处是可以增强灵活性和维护性。在建立系统结构时,应该沿着相互耦合程度的最低线将其 分开。如果把程序看成一块木头的话,就是要沿着它的纹理把它劈开。

耦合层次:

简单数据耦合:如果两个子程序之间传递的数据是非结构化的,并且全部都是通过参数表进行的,这通常称作正常耦合,这也是一种最好的耦合。

数据结构耦合:如果在两个程序之间传递的数据是结构化的,并且是通过参数表实现传递 的,它们之间就是数据结构耦合的。

控制耦合:如果一个子程序通过传入另一个子程序的数据通知它该作什么,那么这两个子程序就是控制耦合的。控制耦合是令人不快的,因为它往往与逻辑内聚性联在一起,并且,通常都要求调子程序的内容与结构。

全局数据耦合。如果两个子程序使用同一个全局数据,那它就是全局数据耦合的。这也就 是通常所说的公共耦合全局耦合 如果所使用的数据是只读的,那么这种耦合还是可 以忍受的,但是,总的来说,全局耦合是不受欢迎的,因为这时子程序之间的联系既不密切,又不可见。

不合理耦合(pathological)。如果一个子程序使用了另外一个子程序中代码,或者它改变了 其中的局部变量,那么它们就是不合理耦合的。这种耦合也称之为内容耦合。这一类耦合是 不能接受的,因为它不满足关于耦合规模、密切性、可见性和灵活性中的任何一条标准。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值