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

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

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

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

4.      在子程序层上设计

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. Android 学习之《第一行代码》第二版 笔记(二十三)Material Design 实战 —— 卡片式布局

    实现基础: Android 学习之<第一行代码>第二版 笔记(二十二)Material Design 实战 -- 悬浮按钮和可交互提示 卡片式布局 卡片式布局是 Materials Des ...

  2. 利用python进行数据分析第二版pdf百度云_参考《利用Python进行数据分析(第二版)》高清中文PDF+高清英文PDF+源代码...

    第2版针对Python 3.6进行全面修订和更新,涵盖新版的pandas.NumPy.IPython和Jupyter,并增加大量实际案例,可以帮助高效解决一系列数据分析问题. 第2版中的主要更新了Py ...

  3. 编程匠艺:编写卓越的代码(第二版

    编程匠艺:编写卓越的代码(第二版 30部必读的投资学经].pdf: http://www.t00y.com/file/59414955 [18岁以后要懂点经济学].王文柱.扫描版.pdf: http: ...

  4. 代码大全(读书笔记)

    代码大全(读书笔记) 2021.06.27 开始阅读此书,这篇文章记录了一些读此书或者这款时间工作生活的一些心路,希望自己能持续从此受益. 2021.08.05 此次阅读的关注点在第 3/5/6/7/ ...

  5. Linux管理传世经典:Linux 系统管理技术手册(第二版) 中文高清版下载

    Linux管理传世经典:Linux 系统管理技术手册(第二版) 中文高清版下载 转载于:https://www.cnblogs.com/gavinhughhu/archive/2010/07/05/1 ...

  6. 读书笔记_代码大全2第七章_高质量的子程序

    创建子程序的正当理由 降低复杂度 把嵌套的部分提取出来形成一个独立的子程序,可以降低外围子程序的复杂度. 引入中间,易懂的抽象 避免代码重复 支持子类化 可覆盖的子程序保持简单,那在实现派生类时也会减 ...

  7. Code Complete《代码大全》读书笔记

    最近拜读了 Code complete<代码大全>,这部大块头确实经典,涉及到了软件开发的方方面面.有点后悔没有早些阅读,值得推荐给还没读过的朋友.它并不是针对某种语言的武林秘籍,应该可以 ...

  8. Android build.gradle文件详解(转述自《Android第一行代码》第二版)

    Android build.gradle文件详解 1. 最外层目录下的build.gradle文件 1.1 repostories 1.2 dependencies 2. app目录下的build.g ...

  9. 第一行代码第三版笔记

    第3章 Activity 主acitivity:程序运行起来首先启动的activity manifest <?xml version="1.0" encoding=" ...

最新文章

  1. 企业搜索引擎开发之连接器connector(二十七)
  2. Android JNI 编程
  3. linux 命令/目录 名称 英文单词 缩写 助记
  4. spark学习-Spark的Map()和FlatMap()函数使用
  5. Linux Centos date使用心得
  6. Linux 服务器时区、时间校准,定时校准脚本
  7. 【VUE】如何关闭代码规范extra semicolon
  8. php如何检测usbkey,检测USBkey未插入如何处理
  9. 百度富文本编辑器插入视频链接相关问题
  10. namenode启动报错,There appears to be a gap in the edit log. We expected txid 54314, but got txid 54452.
  11. 解决win10下PPT打不开,显示内容有问题,提示修复但修复不成功
  12. win10取消微软帐户绑定使用本地账户登录的解决方法
  13. eclipse 更换国内镜像
  14. BCG波士顿咨询:以数据为引擎,迈上数字化转型快车道
  15. 本周三、五,武汉专场丨华为鲲鹏校企人才双选会火热来袭!
  16. 编码这件小事,我仍在努力
  17. 如何在ppt中插入另一张ppt 的内容
  18. Sec-Fetch-*请求头,了解下?
  19. 判断向量平行和垂直的条件
  20. Android7.1.1系统,Toast的Exception: android.view.WindowManager$BadTokenException解决

热门文章

  1. matlab fft2 opencv,基于OPENCV的FFT2变换
  2. memento模式_Java中的Memento设计模式
  3. 开课吧:一文解析Nexus是什么
  4. 数据库基础:什么是SQL
  5. 什么是引发?Java运行时系统引发的异常如何处理?
  6. Python基础笔记(三) dict、set、函数
  7. python中的itemgetter函数
  8. Geant4在Ubuntu下的安装教程
  9. MySql按字段分组取最大值记录 [此博文包含图片]
  10. iOS开发之通过代理逆向传值