代码大全(第二版)笔记——高质量的子程序

1.      什么是“子程序”:子程序是为实现一个特定的目的而编写的一个可被调用的方法(method)或过程(procedure)

2.      子程序的目的:节约空间、可管理性和提高性能(宏观方面);

  • 降低复杂度(最主要)
  • 引入中间、易懂的抽象:当命名恰当的子程序。是足以说明这段代码用意,具有可读性也比较容易理解。
  • 避免代码重复
  • 隐藏顺序:一个子程序的执行与否,不应该依赖于另一个子程序是否执行。
  • 提高可移植性:可以用子程序来隔离程序中不可移植的部分。不可移植的部分包括编程语言所提供的非标准功能、对硬件的依赖,以及对操作系统的依赖等。
  • 改善性能:通过使用子程序,你可以只在一个地方优化代码。

3.      目标:子程序只把一件事做好,不再做任何其他事情;这样做的好处是得到更高的可靠性;

4.      在子程序层上设计

a)      内聚性:子程序中各个操作之间联系的紧急程度。

内容相关联(低耦合高内聚)

藕合度指程序模块间存在联系的紧密程度;

内聚性则是模块内部的相互依赖程度;

低耦合就是模块之间的关联少,越独立耦合度越低;

高内聚就是模块的内容针对干的事情少,功能越单一内聚越高;

低耦合 电脑的主板上的各种插槽,可以连接很多外置的各种各样的设备,不需要做什么只要简单地插进去,不管是分工,还模块设计。模块间,联系越少越好。

b)     功能的内聚性最强也是最好的一种内聚性,让一个子程序仅执行一项操作;

例子:计算雇员年龄并给出生日的子程序就是功能内聚性的,因为它只完成一项工作,而且完成得很好。

c)      顺序上的内聚性:在子程序内包含有需要按特定顺序执行的操作,这些步骤需要共享数据,而且只有在全部执行完毕后才能完成一项完整的功能。

例子:有一个按给出的生日计算雇员年龄、退休时间的子程序,如果它是利用所计算出的年龄来确定雇员将要退休的时间,那么他就具有顺序内聚性。

d)     通信上的内聚性:一个子程序中的不同操作使用了同样的数据,但不存在任何其他的联系。

例子(同上):有一个按给出的生日计算雇员年龄、退休时间的子程序,如果它是分别计算年龄和退休时间的,但是使用相同生日数据,那它就具有通信上的内聚性;

那如何将这个例子转化为功能内聚性呢?

可以分别建立两个子程序,一个根据生日计算年龄,另一个根据生日计算退休时间。

e)      逻辑上的内聚性(不可取的内聚性)若干操作被放入同一个子程序中,通过传入的控制标志来选择执行其中的一项操作。

5.      好子程序的名字:好的子程序能清晰地描述子程序所做的一切。以下为一些指导规则:

  • 描述子程序所做的所有事情:子程序的名字应当描述其所有的输出结果以及副作用。当你想完整的描述其输入结果与它的副作用时,发现名字显得又笨又长,解决的方法不是使用某个描述性较弱的子程序名,而是应该换一种编写程序,直截了当地解决问题不产生副作用。
  • 避免使用无意义的、模糊或表述不清的动词
  • 不要通过数字形成不同的子程序名字
  • 给函数命名时要对返回值有所描述
  • 给过程起名时使用语气强烈的动词加宾语的形式:一个具有功能内聚性的过程通常是针对一个对象执行一种操作。过程的名字应该能反映该过程所做的事情,而一个针对某对象执行的操作就需要一个动词+宾语的形式
  • 为常用操作确立命名规则

转载于:https://www.cnblogs.com/kingsly/archive/2012/04/16/kingswang.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值