源码解析心得

源码解析个人总结为两种方式:从根开始、从尾开始

起始点选择

不管哪种方式,起始点的选择很重要。起始点就是选一个程序执行的方法开始深入研究,这个方法最好是标志性的,里程碑意义的方法,它能够体程序逻辑的大致逻辑,例如open,select、commit等,而不是如valueOf、parse等方法。

从根开始

也就是从一个方法的调用开始顺序向后查找,结合递归树的思想,从父节点到子节点,能够将所遍历的节点连接从而构成一棵树,所以这种方式适合去识别原型、架构、族系关系、族谱等,不利的地方就是对于执行逻辑的查找比较费劲,因为子节点是分支,选择结构过多,要找出主要的工作流程,这个比较难把握。

从尾开始

也就是从一个方法的调用开始反向向前查找,和上述方法相反,这种方式有利于找出主要的工作流程,但是不利于构建出程序的原型、架构、结构。

在实际中,通常从尾开始居多,因为一般情况下我们解析源码的意图是了解程序的工作方式,而不是画架构图,并且从尾开始可以逐渐积累结构图,最终拼成完成的架构图,所以从这点考虑,从尾开始比从根开始要实用多了。

如何将源码解析价值最大化

遍历一次源码,所花的时间可不少,如果仅仅是找到输入和输出点,那么这个性价比显然太低了,下一次遍历我还可能做重复或者类似的事情,例如从一个子类查找到父类,则父类还有若干个子类,如果我们能在这个时候将族系关系记录,我们可以直接找所需的父类或者直接找所需的子类即可,而不需要又从一个节点重复的爬取。所以,一次源码解析,最好有一个产出,那就是结构图,以及必要的说明,在这个过程中还可以学习借鉴其中的优良点,避免出现其中的缺陷。

如何避免解析错误

查看代码,难免会遇到不全面,认识错误,导致推导错误,如何尽可能避免这些问题,提高解析正确率是关键。针对从尾开始的方式,总结如下:

  • 接口、抽象、委托的方法。因为这些方法存在多个实现,通常情况下要弄清楚的是:使用哪个实现,而非实现方式。
  • 共享变量的查找。程序并不一直是方法链,有的时候是操作共享变量的逻辑关系,这个时候你需要转移起始点为这个共享变量,通常情况下要弄清楚这个变量的是:先弄明白怎么来的,再弄明白谁在用。
  • 适时转为从根查找。如果我们知道一个接口有多个实现子类,而又不得不了解这些实现子类的时候,就应该转为从根查找方式,勾勒出结构图,这样有利于下一次进行从尾遍历,有利于扩展整体的结构板图,俗话说,眼光决定高度,多一分远见多一分可能。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值