编程的扇入与扇出

大家都知道模块化编程,也就是重复代码尽量提炼成函数,自己可以用,别人也可以用,但是提炼出什么样的函数才算好呢?这就要用到扇入与扇出的概念。

    模块的扇出是指本模块的直属下层模块的个数。如图:

模块A的扇出为2,模块B的扇出为3,模块C的扇出为1。一个模块的扇出太大或太小都不好,但是宁可太小也不要太大了。一个函数的扇出太大就意味着它调用了很多其他函数,那么其中任何一个函数修改了都会影响到它,如果下层有函数修改了,而它没有做相应的调整,那么肯定出错,导致维护起来很不方便,也就失去了模块化的根本意义方便性,而我们都知道软件的维护成本是很高的。函数的扇出太小意味着本函数基本没有调用其他下层的函数,如果本函数只有两三句也就不提扇入扇出了,既然提了,那么意味着本函数的模块化并没有做好,有些可以提炼成下层函数的语句没有提炼。一般认为,扇出为3到4比较好,但最大不能超过7。如果一个函数扇出太大,解决方法是适当增加中间函数,一级一级调用。

    模块的扇入是指有多少个上级模块调用它。扇入越大,说明该模块可以被很多的上级模块调用,说明本模块提炼的非常好,这是我们希望的。但是不能为了获得高扇入而把不相关的东西凑成一个模块,这样的模块内聚程度很低,没有任何意义。

    综上所述,我们在设计函数的时候,要设计高扇入合理扇出(3到4)的函数。通俗点就是设计可以被很多函数调用,而它本身调用3到4个下层函数的函数。

 

本文出自 “窈窕魑魅” 博客,请务必保留此出处http://yaotiaochimei.blog.51cto.com/4911337/861438


设计高扇入、合理扇出(小于7)的函数。


说明:扇出是指一个函数直接调用(控制)其它函数的数目,而扇入是指有多少上级函数调用它。


扇出过大,表明函数过分复杂,需要控制和协调过多的下级函数;而扇出过小,如总是1,表明函数的调用层次可能过多,这样不利程序阅读和函数结构的分析,并且程序运行时会对系统资源如堆栈空间等造成压力。函数较合理的扇出(调度函数除外)通常是3-5。扇出太大,一般是由于缺乏中间层次,可适当增加中间层次的函数。扇出太小,可把下级函数进一步分解多个函数,或合并到上级函数中。当然分解或合并函数时,不能改变要实现的功能,也不能违背函数间的独立性。


扇入越大,表明使用此函数的上级函数越多,这样的函数使用效率高,但不能违背函数间的独立性而单纯地追求高扇入。公共模块中的函数及底层函数应该有较高的扇入。


较良好的软件结构通常是顶层函数的扇出较高,中层函数的扇出较少,而底层函数则扇入到公共模块中。

阅读更多

没有更多推荐了,返回首页