概述
源码解析个人总结为两种方式:从根开始、从尾开始
起始点选择
不管哪种方式,起始点的选择很重要。起始点就是选一个程序执行的方法开始深入研究,这个方法最好是标志性的,里程碑意义的方法,它能够体程序逻辑的大致逻辑,例如open,select、commit等,而不是如valueOf、parse等方法。
从根开始
也就是从一个方法的调用开始顺序向后查找,结合递归树的思想,从父节点到子节点,能够将所遍历的节点连接从而构成一棵树,所以这种方式适合去识别原型、架构、族系关系、族谱等,不利的地方就是对于执行逻辑的查找比较费劲,因为子节点是分支,选择结构过多,要找出主要的工作流程,这个比较难把握。
从尾开始
也就是从一个方法的调用开始反向向前查找,和上述方法相反,这种方式有利于找出主要的工作流程,但是不利于构建出程序的原型、架构、结构。
在实际中,通常从尾开始居多,因为一般情况下我们解析源码的意图是了解程序的工作方式,而不是画架构图,并且从尾开始可以逐渐积累结构图,最终拼成完成的架构图,所以从这点考虑,从尾开始比从根开始要实用多了。
如何将源码解析价值最大化
遍历一次源码,所花的时间可不少,如果仅仅是找到输入和输出点,那么这个性价比显然太低了,下一次遍历我还可能做重复或者类似的事情,例如从一个子类查找到父类,则父类还有若干个子类,如果我们能在这个时候将族系关系记录,我们可以直接找所需的父类或者直接找所需的子类即可,而不需要又从一个节点重复的爬取。所以,一次源码解析,最好有一个产出,那就是结构图,以及必要的说明,在这个过程中还可以学习借鉴其中的优良点,避免出现其中的缺陷。
如何避免解析错误
查看代码,难免会遇到不全面,认识错误,导致推导错误,如何尽可能避免这些问题,提高解析正确率是关键。针对从尾开始的方式,总结如下:
- 接口、抽象、委托的方法。因为这些方法存在多个实现,通常情况下要弄清楚的是:使用哪个实现,而非实现方式。
- 共享变量的查找。程序并不一直是方法链,有的时候是操作共享变量的逻辑关系,这个时候你需要转移起始点为这个共享变量,通常情况下要弄清楚这个变量的是:先弄明白怎么来的,再弄明白谁在用。
- 适时转为从根查找。如果我们知道一个接口有多个实现子类,而又不得不了解这些实现子类的时候,就应该转为从根查找方式,勾勒出结构图,这样有利于下一次进行从尾遍历,有利于扩展整体的结构板图,俗话说,眼光决定高度,多一分远见多一分可能。
最后
以上就是精明钢笔为你收集整理的源码解析心得的全部内容,希望文章能够帮你解决源码解析心得所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复