编程的扇入与扇出

article/2025/10/14 8:13:28

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

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

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

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

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

 

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


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


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


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


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


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


http://chatgpt.dhexx.cn/article/2qVi1vRe.shtml

相关文章

Altium Designer BGA 扇孔/扇出

1.创建Room 2.设置间距规则 3.设置线宽规则 4.设置过孔 5.扇出 按照需求扇出,如无网络引脚是否扇出,外面2列是否扇出等

关于扇出(Fanout)(二)

原文发布时间:2010-12-30 作者:毛毛虫 在《关于扇出(Fanout)(一)》中,提到了设置数据集扇出的相关内容。现在针对这一问题举一个例子。 现在我有一个dwg文件,想使用一个含有多个多…

关于 扇出 Fanout

数字系统中的扇出 在一些数字系统中,必须有一个单一的TTL逻辑门来驱动10个以上的其他门或驱动器。这种情况下,被称为缓冲器的驱动器可以用在TTL逻辑门与它必须驱动的多重驱动器之间。这种类型的缓冲器有25至30个扇出信号。逻辑反向器(也被称为…

扇出和扇入

在软件设计中,扇入和扇出的概念是指应用程序模块之间的层次调用情况。 按照结构化设计方法,一个应用程序是由多个功能相对独立的模块所组成。 扇入:是指直接调用该模块的上级模块的个数。扇入大表示模块的复用程序高。 扇出:是指…

扇入和扇出

扇出(fan-out)是一个定义单个逻辑门能够驱动的数字信号输入最大量的专业术语。大多数的TTL逻辑门能够为10个其他数字门或 驱动器提供信号。所以,一个典型的TTL逻辑门有10个扇出信号。 在一些 数字系统中,必须有一个单一的TTL逻辑门…

扇入扇出的概念

转自:http://langhebw.blog.163.com/blog/static/1132586482011517382379/ 最近在学习有关FPGA方面的知识,在看一些FPGA的datasheet时,看到fan-out和fan-in这样的字眼,乍一看还真不知所云,继续往下看还是云里雾里&…

信号的扇入扇出

扇入系数是指门电路允许的输入端数目。扇出系数是指一个门的输出端所驱动同类型门的个数,或称负载能力。 多扇出问题,会严重影响FPGA布线的稳定性,不利于时序收敛 当输出负载大于它的扇出能力的时候,就会有如下的效应&#xff1a…

扇入扇出

最近在学习有关FPGA方面的知识,在看一些FPGA的datasheet时,看到fan-out和fan-in这样的字眼,乍一看还真不知所云,继续往下看还是云里雾里,于是用Google在线翻译了一下,上面赫然是扇入扇出,不用想…

【面试】TCP的三次握手

TCP三次握手: 建立安全可靠的传输协议 TCP:一种 传输控制协议 TCP作用:保证http网络传输是 安全可靠的(检测客户端 与 服务器的网卡是不是通的) TCP三次握手: 第一次: 浏览器->服务器 (你能听到我说话吗? 检测浏览…

一文读懂TCP的三次握手和四次挥手

目录 1.认识TCP协议 2.TCP的三次握手 3.TCP的四次挥手 4.小结 1.挥手为什么需要四次? 2.2MSL等待状态 3.次挥手释放连接时,等待2MSL的意义 1.认识TCP协议 传输控制协议(TCP,Transmission Control Protocol)是一种…

TCP的三次握手和四次挥手及常见面试题

一、前言 今天上掘金查看热门文章,发现一篇好文 ★前端 100 问:能搞懂 80% 的请把简历给我 ★ ,此文包含100个前端面试问题,仔细阅读完所有题目后,顿感身中数刀无法呼吸,留下了没有技术的泪水&#xf…

TCP协议三次握手过程

常见前端面试题 TCP协议三次握手过程 1.第1次握手 建立连接 客户端向服务器发送的报文SYN包信息中SYN码为1 2.第2次握手 服务器回应客户端,用于接受并连接请求 服务器返给客户端的的报文SYN码和ACK码都为1,也称呼为syn-ack报文信息。 3.第3次握手 客…

简述TCP 三次握手

TCP数据报文结构: 三次握手主要用到了序列号(seq)&确认号(ack)及两个标志位(ACK&SYN): seq:序列号和确认号是tcp传输可靠性的关键部分,序列号的随机取值范围为0-2^32-1 关于为什么不使用固定序列号ack:下一个希望收到的序列号且代表之前序列号传输的数据已…

TCP协议三次握手

一、简介 所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。这个过程是发生在客户端调用connect()函数,服务器在调用accept()函数接收的时候。 二、一些概念 ACK: ACK (Acknowledge character&…

详解TCP的三次握手

TCP定义及特点 定义 TCP是一种面向连接(连接导向)的、可靠的基于字节流的传输层通信协议。TCP将用户数据打包成报文段,发送后会启动一个定时器,然后另一端收到的数据进行确认、对失序的数据重新排序、丢弃重复数据 特点 TCP是…

TCP为什么三次握手?

参考:公众号 小林coding 常见回答:三次握手保证双方都具有接受和发送数据的能力。 主要原因: 1. 防止重复历史连接的初始化 2.同步双方初始序列号 3.避免资源的浪费 1. TCP为什么三次握手? 1.1 防止重复历史连接的初始化 序…

【Java】TCP的三次握手和四次挥手

文章目录 一、三次握手三次握手的流程 二、四次挥手认识两个重要的状态 三、总结 一、三次握手 TCP三次握手是一个经典的面试题,它指的是TCP在传递数据之前需要进行三次交互才能正式建立连接,并进行数据传递。(客户端主动发起的)…

什么是TCP的三次握手?

三次握手是指建立一个 TCP 连接时,需要客户端和服务端发送三个数据包的过程。进行三次握手是为了确定双方的接收能力和发送能力是否正常。 刚开始客户端处于 Closed 状态,服务端处于 Listen 状态。 第一次握手: 客户端给服务端发送一个 SY…

TCP 三次握手 四次挥手

三次握手 三次握手过程描述 第一次握手: 客户端发送syn标志位和seq num,向服务器申请建立连接,客户端状态由closed变为syn_send 第二次握手: 服务端返回 syn和ack标志位,ack num以及seq num,确认第一次握手的报文段,…

Go_详解TCP协议三次握手四次挥手

三次握手: 三次握手表示建立通信阶段,在TCP协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠,由于这种面向连接的特性, TCP协议可以保证传输数据的安全&#xff0c…