第四章: 模块化、保持清晰、保持简洁.
软件设计有两种方式 : 一种是设计得极为简洁,没有看得到的缺陷;另外一种是设计得极为复杂,有缺陷也看不出来,显然,第一种方式的难度要大得多。
模块化的原则: 要编写复杂的软件又不至于一败涂地地唯一方法,就是用定义清晰的接口把若干简单模块组合起来,如此一来,多数问题只会出现在局部,那么还有希望对局部进行改进和优化,而不至于牵动全身.
相对于其他,Unix程序员更加重视模块化、更注重正交性和紧凑性等问题。
封装和最佳模块化大小
模块化的首要特质是封装。
------- 封装良好的模块不会过多向外部披露自身的细节,不会直接调用其他模块的实现代码,也不会胡乱共享全局数据.
模块之间通过API和数据结构进行通信.
检测一组API是否设计良好,你可以:
尝试用人类自然语言来描述,是否可以把事情说清楚?
模块分得越彻底,就意味着每一块就越小;
当然,模块化代码也不可过于小;
模块过小时,几乎所有复杂度都在接口;想要理解任何一段代码前,必须理解全部代码,因此阅读代码非常困难
Hatton的经验数据表明,200~400之间逻辑行代码是模块设计的"最佳点"
紧凑性和正交性
紧凑性就是一个设计是否能进入人脑中特性。
检验一个设计是否紧凑的方法是: 有经验的用户通过需要操作手册吗? 如果不需要,则设计就是紧凑的。
紧凑的工具和顺手的自然工具一样: 让人乐于使用,不会在你的想法和工作之间格格不入。
正交性是有助于使复杂设计也能紧凑的重要特性之一。 既: 每一个动作只改变一件事,不会影响其他。无论是什么系统,改变每个属性的方法只有一个 。
比如显示器,改变亮度而不会影响对比度。
模块式编码
模块式,模块式,那么改如何做?
编写代码之前,问问自己以下问题:
1.有多少全局变量? 全局变量对于模块化是毒药,很容易使各模块化轻率、胡乱地相互泄漏信息。
2.单个模块大小是否在Hatton的最佳范围之内? 如果不是,超过就可能产生长期的维护问题。
3.模块内的单个函数是否太大了? 这不是一个行数计算问题,而是一个复杂性问题。 如果不能以一句话来简单描述一个函数与其调用程序之间的约定,这个函数可能太大拉。
4.代码是否有内部API---好的API应是意义清楚,不用看具体如何实现就可理解的,不确定? 那么你打电话给另外一个程序员描述,如果说不清楚,那么API就可能过于复杂了.
5.API的入口是不是超过7个?有没有哪个类超过7个方法,数据结构的成员是不是超过7个?
6.整个项目中每个模块的入口点数量如何分布?是不是均匀?很多入口点的模块真的需要这么多入口点吗? 记住: 模块复杂性往往和入口点数量的平方成正比----这也是简单API优于复杂API的另一个原因.
分享到:
相关推荐
第二部分“设计”则深入探讨了UNIX的设计原则,包括简洁性、模块化、可移植性和效率等。这些原则不仅适用于编写程序,也适用于构建和维护复杂系统。作者鼓励读者理解并应用这些原则,以避免软件的膨胀和维护困难。 ...
13. **模块化设计**:通过模块化编程,将程序分解为独立的功能单元。 - 示例:使用函数或类来封装特定的功能,如输入验证或数据处理。 14. **避免使用goto语句**:除非能够确保程序的可读性不受影响,否则尽量避免...
3. **结构化和模块化**:C语言强调结构化编程,支持函数和结构,方便模块化设计。 4. **高质量的目标代码**:编译后的C程序生成的目标代码效率高,运行速度快。 5. **良好的可移植性**:由于C语言的底层特性,使得...
kind-linux-amd64
第一章-操作系统概述习题及答案.doc
第5章PLC基础知识.ppt
TMS FNC WX Pack v1.7.2.4 完整源码版 TMS FNC WX Pack 是一款由 TMS Software 提供的通用 Delphi & C++ Builder 组件集,能够将独特的 Web 技术融入到 VCL、FMX、LCL 和 Web 核心应用程序中。 功能 - 条形码和二维码生成:TTMSFNCWXBarcode 和 TTMSFNCWXQRCode 组件可以生成 QR/条码图像,并提供 100 多种不同类型的条形码。 - 摄像头功能:TTMSFNCWXCamera 组件可利用设备摄像头扫描 QR 或条码。 - HTML 编辑:TTMSFNCWXHTMLMemo 组件用于查看和编辑 HTML 格式文本,包括表格、图像等。 - PDF 查看:TTMSFNCWXPDFViewer 是一个本地或在线 PDF 查看器,带有可选的缩略图列表和交互式工具栏。 - 视频播放:TTMSFNCWXVideoPlayer 组件可播放各种格式的本地或在线视频。 - JSON 格式化:TTMSFNCWXJSONFormatter 组件以格式化的方式显示 JSON,并可自定义外观。 - 文本转语音:TTMSFNCWXSpeechSynthesis 组件可将文本转换为语音,并提供多种操作系统原生语音选择。 - OCR 功能:TTMSFNCWXOCR 组件可扫描图像中的可读文本,并以多种语言输出。 - 文档生成:TTMSFNCWXDocx 组件可动态生成带有页眉、页脚、表格等的 .docx 文件。 - 数学公式编辑:TTMSFNCMathEditor 组件可渲染和编辑数学公式,并提供自定义虚拟键盘。
dmarm_description.zip
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
ESP32中文相关资料+Arduino实验 例程源码,ESP32中文相关资料+Arduino实验 例程源码,ESP32中文相关资料+Arduino实验 例程源码.zip
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
在机器人技术中,运动控制是实现机器人精确、高效运动的关键环节,而轨迹规划则是运动控制的核心部分。其目的是设计出一条平滑、连续且符合机器人动力学约束的路径,使机器人能够从起点平稳地移动到目标点。其中,多项式插值是一种常用的轨迹规划方法,可根据给定的起点和终点条件,生成满足要求的曲线轨迹。三次、五次和七次多项式是轨迹规划中常见的类型,其阶数决定了轨迹的灵活性和复杂性。 三次多项式(Cubic Polynomial)是最简单的连续可微多项式,形式为 f(t)=at 3 +bt 2 +ct+d。它常用于简单任务,能够确保通过起点、终点以及两个中间点的切线方向,共四个控制点。三次多项式轨迹规划简单且计算成本低,但可能无法满足复杂运动需求。 五次多项式(Quintic Polynomial)增加了自由度,形式为 f(t)=at 5 +bt 4 +ct 3 +dt 2 +et+f。它可以确保通过起点、终点、两个中间点及其切线方向,共六个控制点。这使得五次多项式在保持平滑的同时,能更好地适应路径曲率变化,适用于复杂轨迹规划。 七次多项式(Seventh Polynomial)提供了更高的灵活性,可以处理复杂路径规划问题。它有七个控制点,可精确控制起点、终点及五个中间点的切线方向。七次多项式通常用于高精度任务,如精密装配或医疗手术机器人,能够精细控制速度和加速度变化。 文件名 seventh.m、cubic.m 和 quintic.m 可能是用 MATLAB 编写的函数,分别用于实现七次、三次和五次多项式的轨迹规划算法。这些函数通常接受起点、终点坐标和时间参数,计算多项式系数,并输出随时间变化的位置、速度和加速度数据。 在实际应用中,选择多项式次数需综合考虑以下因素:路径平滑性,更高阶多项式可减少加速度突变,降低机械应力;计算复杂性,阶数越高计算量越大,可能影响实时性能;控制精度,更高阶多项
电子商务物流第二版教案第9章.ppt
内容概要:本文介绍了光储并网直流微电网的Simulink仿真模型及其关键技术。首先,通过MPPT(最大功率点跟踪)算法实现了光伏阵列的最大功率输出,确保了能量的有效利用。其次,构建了由蓄电池和超级电容组成的混合储能系统,分别应对高频、中频和低频功率变化,提升了电能质量和储能系统的寿命。此外,采用二阶低通滤波法对光伏输出功率进行抑制,进一步优化了电能质量。最后,逆变器采用基于电网电压的双闭环控制策略,确保了逆变器输出的稳定性。文中还展示了部分Simulink模型代码示例,帮助读者更好地理解和实现该模型。 适合人群:从事电力电子技术、新能源系统设计的研究人员和技术人员,尤其是对微电网仿真感兴趣的读者。 使用场景及目标:适用于需要深入了解光储并网直流微电网的工作原理和仿真的研究人员和技术人员。目标是通过Simulink仿真模型,掌握MPPT、混合储能系统、二阶低通滤波法和逆变器双闭环控制的关键技术和实现方法,为实际应用提供理论支持。 其他说明:文中提供的代码示例仅为简化版本,在实际建模过程中还需考虑更多细节,如模型参数的详细设置和仿真环境的配置。
电脑基础知识及办公软件使用.pptx
第7章电子商务物流.ppt