《代码阅读方法与实践之读书笔记之三》
现在已经读完了本书,我怀着惬意的心情书写这本书的最后一篇读书笔记,读完这本书后真的觉得受益颇多,由衷地感谢作者能把代码的阅读方法传授给我们,接下来我将把我从最后几章得到的优秀知识分享给大家:
我从第九章《 系统构架》中总结下了以下知识点:系统的结构分为集中式和分布式;一个系统可以同时展示出多种不同的构架类型,以不同的方式检查同一系统、分析系统的不同部分、或使用不同级别的分解,都有可能发现不同的构架类型;当处理过程可以建模|设计和实现成一系列的数据变换时,常常会使用数据流(或管道—过滤器)构架;数据流构架的一个明显征兆是: 程序中使用临时文件或流水线在不同进程间进行通信;可以将源代码输入到建模工具中, 逆向推导出系统的构架;系统中每个层可以将下面的层看作抽象实体,并且(只要该层满足它的需求说明)不关心上面的层如何使用它;层的接口既可以是支持特定概念的互补函数族, 也可以是一系列支持同一抽象接口不同底层实现的可互换函数;用面向对象的语言实现的系统,使用虚方法调用直接表达对层接口的多路复用操作;使用程序切片技术, 可以将程序中的数据和控制之间依赖关系集中到一起切片可以对量模块内聚性;在并发系统中,一个单独的系统组件起到集中式管理器的作用,负责启动、停止和协调其他系统进程和任务的执行;状态机有一组有穷的状态和从一种状态变到另一种状态时执行处理和变迁的规则来定义。两种特殊情况,初始状态和最终状态,分别规定状态机的起始点和结束条件。 状态机的实现一般是一个switch语句的循环,switch语句的分支对应状态机的状态;每个case语句执行特定状态的处理工作、更改状态、并将控制权返回到状态机的顶端;模块的一个重要思想就是信息隐藏的原则,它规定与模块相关的所有信息都应该为私有,除非它被特别声明为公开;C中的模块, 由提供模块公开接口的头文件和提供对应实现的源文件组成;在设计良好的类中, 所有的字段都应在声明为private, 并用公开的访问方法提供对它们的访问;泛型实现不是在编译期间通过宏替换或语言所支持的功能(比如C++模板和Ada的泛型包)来实现, 就是在运行期间通过使用数据元素的指针和函数的指针、或对象的多态性实现;典型的应用包括(1)容器(经常作为抽象数据类型来实现) (2)相关的算法,比如查找、排序和其他作用在集合和有序区间上的操作 (3)泛型数值算法;框架和代码向导是代码级构架重用中的两种机制;还有在阅读向导生成的代码时, 不要期望太高, 否则会感到失望。
第十章《 代码阅读工具》给我们介绍了好多辅助我们读代码的工具,比如:使用正则表达式可以找出函数的定义,可以查找名称遵循特定模式的变量,可以避免非积极匹配,可以查找出现在同一行的符号;使用编辑器的 tags 功能可以快速地找出实体的定义,增加编辑器的浏览功能;当不能精确地表述要查找的内容时, 可以使用关键单词的词干对程序的源代码进行查找;使用 fgrep 在源代码中查找字符串列表;使用 diff 比较文件或程序不同版本之间的差别;要抵制住按照编码规范对外部代码进行美化的诱惑; 不必要的编排更改会创建不同的代码, 并妨碍工作的组织;通过检查从未执行的代码行, 可以找出测试覆盖的弱点, 并据此修正测试数据;可以绘制图示来描绘代码的动作;可以试着向别人介绍我们在阅读的代码, 这样做一般会增进我们对代码的理解;理解复杂的算法或巧妙的数据结构, 要选择一个安静的环境, 然后聚精会神地考虑, 不要借助于任何计算机化或自动化的帮助。
从第十一章《一个完整的例子》中我深深感悟到了以下几点:模仿软件的功能时,要依照相似实体的线路(类|函数|模块),在相似的现有实体中,为简化对源代码库的文本查找,应选取比较罕见的名称;如果试图精确地分析代码, 一般会陷入数量众多的类|文件和模块中, 这些内容会很快将我们淹没, 因此, 我们必须将需要理解的代码限定在绝对必需的范围之内;采用一种广度优先查找策略, 从多方攻克代码阅读中存在的问题, 进到找出克服它们的方法为止。
原文:http://www.cnblogs.com/Twinklelittlestar/p/4915531.html