读代码的方法总结

最近的代码阅读量比较多,有必要对代码阅读的方法进行整理。由于各种语言的差异,以下我会分别总结C、C++和java的代码阅读方法。


C工程
应用服务器或者对性能要求较高的工程会用纯C来写,这种工程是不太好读的。要读这种代码首先需要了解相应的基本概念,其次是一些核心的数据结构和功能模块,再次如果能找到相应的逻辑架构图(因为不涉及实现的细节还是比较容易找到的)会对理解代码有重要的帮助。C的工程大多数会写make文件,有时通过make文件可以帮助我们找到模块之间的依赖关系。最重要的是要理解系统的组织形式,典型的形式是利用函数指针来分割和挂载模块。apache的web服务器软件httpd便是用纯C实现的,其对于配置文件的处理、动态加载的实现、分阶段分模块建立handler的机制、跨平台的抽象都值得很好的去借鉴。



C++工程
如果是VC的工程那就很幸福了,找到main函数,打断点,看启动的过程和响应的处理、这样就可以很快的捋清楚系统的脉络和组织形式了。再有,windows下的经典的基于消息的编程模式要求阅读者要有动态、异步的思维方式,有时候搞清楚系统启动后的动态行为(线程模型)可能更重要。由于C++有oo的性质,设计的比较好的代码其头文件便是概要的设计,通过头文件便可比较快的找到类之间的依赖和层次关系。头脑中形成了类之间的关系之后再去读代码就容易多了。OGRE的代码同样是很庞大的,但是如果理解了基本的3D图形学的概念,知道了Root SceneManager node camera等之间的关系,熟悉了帧刷新的回调机制,去理解代码还是比较快的。



JAVA工程
java语言上手比较容易,但是java的工程却是最难读的。一般java的工程都比较注意扩展性和可配置、可管理性,OO的模型设计的比较好,各个模块之间讲究的是松耦合(如利用接口编程、利用Digest来初始化、google的动态注入等),这种方式使得我们读代码也不能用传统的方式。比较好的办法是将代码导入eclipse,利用其层次结构视图(hierarchy)查看基础接口(一般是在较外层的包里面)的实现层次,之后在系统初始化的地方打断点,在debug视图中要重点看调用栈和线程模型,有时候看初始化的过程比看响应的过程还要痛苦,因为初始化的过程就是组装对象、构建系统的过程。经过这个过程,我们基本上就可以弄清楚系统在跑起来之后是哪些对象在运行,以及对象之间的关系了。Tomcat的源代码设计的很好,短的包名里面都是接口(概要设计),针对每个方面分别有具体的实现包,其整个系统的初始化是利用的Digest机制,这种方式值得借鉴。(现在的很多框架好像是用的反射机制,最新的应该是google的GUICE吧!)



总结:尽管语言特性不同,分析的方式也不同,但是共通的一点是 从粗到细、从架构到细节、从编程模式到内部的参数。

本文写于2011年3月
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值