高质量子程序设计

一、创建子程序的正当理由

  • 降低复杂度
    通过子程序来隐藏程序的实现细节,只需对外提供调用接口
    (频繁重复的小段代码,抽象成函数)
  • 引入中间、易懂的抽象
    通过给一段程序取一个足够说明语义的名字,该名字能够提供更高层次的抽象,使代码更具有可读性。
  • 避免代码重复

    如果2个子程序都拥有相同的代码段,有两种方法去重。
    1)把重复部分提取出来,放入基类中,把不同部分放入派生类中
    2)把重复部分放入新的子程序中,让其余的都调用公共代码

  • 隐藏操作,提高可移植性
    用子程序接口隔离程序中依赖底层细节的不可移植部分,隐藏一些设计非标准的操作等。
  • 隐藏全局数据
    在程序中定义的全局变量可以通过提供程序接口来操作,避免直接对全局变量操作。(共享数据加解锁、全局计数器。。。)

二、子程序的内聚性

1、功能内聚性:是最强也是最好的一种内聚性,也就是说让一个子程序仅执行一项操作。(评估功能内聚的前提是子程序执行的操作与其名字相符)
2、顺序内聚性 子程序内包含有特定顺序的操作,这些步骤需要共享数据。(通过将步骤划分成单独的子程序,互相调用,转化为功能内聚)
3、临时内聚性 指含有一些因为需要同时执行才放到一起的操作的子程序。(一般是一些功能初始化 init 、读取配置的readconfig接口)

以下是一些不可取的内聚

4、过程上的内聚性 指子程序中的操作按特定顺序执行

5、逻辑上的内聚性 指若干操作都被放入同一子程序中,通过传入的控制标志选择执行其中的一项操作。

6、巧合的内聚性 指子程序中的各个操作之间没有任何可以看到的关联。

三、子程序的设计

1、子程序的命名。
要对返回值有所描述,子程序的最佳长度在9到15个字符
2、子程序长度。
理想长度在50 ~150 ,不能超过200
3、子程序参数

  1. 按照 输入 -修改- 输出 顺序排列参数

  2. 考虑自定义 in mod out 空关键字来标记参数属性,或者 在参数前面加上 i_ 、m_、o_的前缀。

  3. 参数必须都要使用,不能传递无用参数

  4. 把状态变量或者出错变量放在最后,再或者作为返回值

  5. 子程序的参数个数限制在7个以内 (如果发现需要传递很多参数,说明子程序之间耦合度太紧密,一个重新分解子程序,降低耦合度;如果许多不同的子程序传递相同的参数,则可以把这些子程序组成一个类,经常传递的数据作为类的内部数据)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值