《代码大全》一:子程序

生成子程序的原因

    1)降低复杂性

      使在编写子程序时,你需要考虑这些信息,但是一旦编写完成,就不再需要考虑内部的工作细节,只要调用即可。

                      尽量减少代码段的篇幅,避免代码段重复,使用公共代码只出现一次,。

       一个子程序从另外一个子程序脱离出来的原因是,过多重数的内部循环和条件判断,这时可以把这部分循环和

判断从子程序中脱离出来,使其成为一个独立的子程序,以降低复杂性。

    2)限制了改动带来的影响

       由于在独立区域进行改动,因此,由此带来的影响也只限于一个或最多几个区域中。要把最可能改动的区域设计

成最容易改动的区域。最可能改动的区域包括:硬件依赖部分,复杂的数据结构和商务规则。

    3)改进性能

        使用相同的子程序,可以只在一个地方,而不是同时几个地方优化代码段。把相同代码段放在子程序中,可以通过优化

这一个子程序而使得其余调用这个子程序的子程序全部收益。

    4)进行集中控制

    5) 隐含数据结构

        可以把数据结构的实现细节隐含起来,这样绝大部分程序不必担心这种复杂的逻辑。

隐含实现细节的子程序可以提供相当高的抽象价值,从而降低程序的复杂程度。

    6)隐含全局变量 

        如果哟使用全局变量,通过存取子程序来使用全局变量有如下优点:监视对数据的访问;使用存取子程序

的约束还可以鼓励你考虑一下这个数据是不是全局的;很可能会把它处理成针对在一个模块中某几个子程序的局部数据。

    7)提高代码的可读性

     注:不要因为简单而不写入子程序。

   

强内聚性

    指的是在一个子程序中,各种操作之间互相联系的紧密程度。例如,一个sin()之类的函数内聚性死很强的,

因为整个子程序所从事的工作都是围绕一个函数的。而像SinAndTan()的内聚程度要低很多,因为子程序中所进行的是一项

以上的工作。强调强相关性的目的是,每一个子程序只需要做好一个工作,而不必过分考虑其他任务。

    1)功能内聚性

        功能内聚性是最强也是最好的一种内聚,当程序执行一项并且仅仅是一项工作时,就是这种内聚性,这种

内聚性的例子有:Sin().GetCustomerName(),EraseFile()等等。这种评价只有在子程序的名称与其实际内容相符时才成立。

如果他们同时还做其他工作,那么他们的内聚性就要低的多,而且不恰当。

   

松散耦合性

   所谓耦合性是指两个子程序之间的联系的紧密程度。耦合性和内聚性是不同的。内聚性是指一个子程序的内部各部分之间

的连续程度,而耦合性指的是子程序之间的联系程度。研究他们的目的是建立具有内部整体性(强内聚性),而同时与其他子程序

之间的联系的直接,可见,松散和灵活的子程序(松散耦合)。

    1)耦合规模

       指两个子程序之间的联系的数量多少。对于耦合来说,联系的数量越少越好,因为一个子程序的接口越少,那么在把它

与其他子程序相连接时,所要做的工作也越少。

    2)密切性

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

稍低的是作用于同一全局数据的两个子程序,他们之间的直接性稍低。

    3)可见性

      可见性是指两个子程序之间的联系程度。在参数表中传递参数越明显越好。而通过改动全局数据以便让别的子程序来使用

它,则是一个隐蔽的联系因而也是不好的。

    4)灵活性

      是指改变两个子程序之间联系的容易程度。尽量不要使用结构,并且里面所使用的参数没有全部被使用,最好尽量避免

这种情况。

 防错性编程

        子程序对非法输入数据是否进行了防护

        不影响子程序意外的代码

        

 参数传递问题

        子程序中参数个数是不是7个或者小于

        是否用到了每一个输入参数和输出参数

总结:

    建立子程序最重要原因:加强可管理性(降低复杂性),还有节省空间,改进正确性,可靠性,可修改性等等。

    强调强内聚性和松散耦合的首要原因是他们提供了较高层次的抽象性,你可以认为一个具备这种

特性的子程序运行是独立的,这可以使你集中精力完成其他任务。

    有些情况下,放入子程序而带来巨大收益的操作可能是非常简单的。

    子程序的名称表明了它的质量,如果名称不好,但是却是精确的,说明他的设计令人遗憾。就是

程序还需要改进。

    防错性编程可以使错误更容易被发现和修复,对最终软件的危害性显著减少。

        

猜你喜欢

转载自www.cnblogs.com/u3ddjw/p/9565905.html