`
braveCS
  • 浏览: 73965 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

[转]开源项目代码的学习方法

阅读更多

转自:

http://blog.sina.com.cn/s/blog_693458530100lk5m.html

http://www.cnblogs.com/west-link/archive/2011/06/07/2074466.html

 

1)阅读features。以此来搞清楚该项目有哪些特性
2)思考。想想如果自己来做有这些features的项目该如何构架
3)下载并安装demo或sample。通过demo或sample直观地感受这个项目
4)搜集能得到的doc,尽快地掌握如何使用这个项目
5)如果有介绍项目架构的文档,通过它了解项目的总体架构,如果没有,通过api-doc了解源码包的结构
6)分两遍来阅读源码。第一遍以应用为线索,以总体结构为基础,阅读在应用中使用到的类和方法,但不用过深挖掘细节,对于嵌套调用,只用通过函数名了解最上层函数的意义,这一遍的目的在于把大致结构了然于心。第二遍就是阅读类和方法的实现细节,以第一遍的阅读为基础,带着疑问去阅读那些自己难以实现的模块。
7)总结。回味这个项目设计上的精妙,用到了哪些设计模式,能在哪些领域可以借鉴等等。

 

自己有做到1,3,4,5,6,7,7算半个。结论是没有很足够的思考

 

 

1、一边阅读代码一边写注释。这是我用过的最好的方法,对代码理解得更深入,看一些重要代码或者特别难懂的代码时挺有用。更何况,注释也是一种文档嘛。

2、一边阅读代码一边绘制UML。这个方法适用于类之间的关系较复杂和调用层次较深的情况,我一般都是先绘制顺序图,然后为顺序图中的类绘制关系图。

3、通过Debug来跟踪程序的主要执行过程,这样就可以分清主次了,阅读的时候更有针对性。

4、类的快速阅读。先弄清楚它在继承链中的位置,看看它的内部状态,也就是成员变量,一般来说,类的对外接口都是对成员变量的访问、加工、代理等,然后看看它的对外接口,也就是公有成员函数,识别核心的一个或多个函数,这时候你应该可以大概了解这个类的职责或作用了。可能这个类是某个设计模式中的一个组成部分,所以,设计模式的掌握对代码的快速阅读也是很有帮助的。

5、带着问题去阅读。比如想了解android中的消息机制,那么看看Looper、Handler、MessegeQueue这几个类就可以了,其他的不要去看,要不然就跑题了。

  下面列几个阅读源码时所处的情景,在特定场景下用哪些方法:
     不太熟悉业务逻辑,还不是很清楚它是干啥的,可以用3、5。
     代码量很大,有几十万行,甚至百万行,可以用2、3、5。
     你无法看见程序的运行过程,比如没有用户界面,也有可能是无法运行的,可以用3、5。
     设计复杂,用了大量的设计模式,调用链很深,可以用1、2、3、4、5。
     时间有限,没有那么多时间让你看源码,可以用3、5。

平时都用到2,3, 1,4,5有所启发。

分享到:
评论

相关推荐

    开源项目代码

    总的来说,开源项目代码是软件开发领域的重要资源,它推动了技术创新,提供了学习和合作的平台。无论你是新手还是经验丰富的开发者,都可以从中受益并为社区做出贡献。通过参与开源项目,你不仅可以提升自己的编程...

    借助开源项目,学习软件开发

    开源项目意味着源代码对公众开放,允许任何人查看、学习甚至修改。这种开放性为新手开发者提供了宝贵的资源,使他们能够深入理解软件工程的实践过程,提升编程技巧,并与全球的开发者社区互动。以下是关于"借助开源...

    Python爬虫开源项目代码

    Python爬虫开源项目代码是学习和实践Python网络爬虫技术的重要资源。这些开源项目提供了丰富的示例和实践经验,涵盖了各种爬虫技术的应用场景,对于初学者和进阶者都有很大的帮助。下面将详细阐述Python爬虫相关的...

    qt的开源项目源码

    QT开源项目源码是软件开发领域中的宝贵资源,尤其对于想要深入理解图形用户界面(GUI)编程、跨平台应用开发以及C++编程实践的开发者来说,具有极高的学习价值。QT是一个广泛使用的开源框架,由Qt公司开发并维护,它...

    Android开源项目源代码

    在Android开发领域,开源项目是开发者获取灵感、学习新技能和提升代码质量的重要资源。本压缩包中的"Android开源项目源代码"包含了三个知名的Android库的源码:android-viewflow、android-menudrawer以及Android-...

    开源项目代码示例软件

    本软件收集在网络中发布的一些优秀的开源项目,通过整理编译,集成在一个软件中,得以让用户实际操作体验这些开源项目,以供Android软件的程序开发及设计人员学习和参考。

    ios应用源码之一些iphone开源项目代码iphone-tris 2018127

    标题中的“ios应用源码之一些iphone开源项目代码iphone-tris 2018127”表明这是一个关于iOS应用程序的开源源代码项目,具体来说是针对iPhone平台的。这个项目名为“iphone-tris”,可能是一个游戏应用,因为“tris”...

    金山开源源代码 金山开源源代码

    开源项目通常拥有活跃的社区,开发者可以在论坛、邮件列表或GitHub上与其他贡献者交流,提交问题报告或改进代码的建议。参与金山开源源代码的社区活动,不仅有助于个人成长,也可能为个人的职业发展开辟新的道路。 ...

    20个Java开源项目源码下载

    在提供的"20个Java开源项目源码下载"压缩包中,包含了多个知名的Java项目,这些项目可以帮助开发者深入理解Java编程、软件架构以及特定领域的最佳实践。以下是这些项目的简要介绍: 1. **ExoPlayer-r2.18.5.zip**:...

    开源项目源代码,学习自取

    开源项目源代码是IT行业中一个极其重要且富有价值的学习资源,尤其对于软件开发人员和编程爱好者来说,它们提供了深入理解编程技术、设计模式以及最佳实践的机会。这些代码库通常是免费提供的,鼓励用户自行研究、...

    随想录(开源代码的学习方法).docx

    开源代码的学习方法是软件开发领域不可或缺的一环,尤其是在C语言项目中。开源代码因其开放性和社区支持,成为了许多开发者学习和创新的宝贵资源。本文将探讨如何有效地学习和利用开源代码,以及在不同环境中编译...

    90几套Unity开源项目.txt

    Unity开源项目即指基于Unity引擎创建,并开放源代码供开发者学习、参考甚至二次开发的项目集合。 ### 二、Unity开源项目的意义 1. **学习与教育价值**:对于初学者而言,通过研究开源项目可以快速掌握Unity的基本...

    开源代码使用指南

    开源代码使用指南  开源代码(Open Source):是促进软件发展的一种协作方式。与商用软件不同,它公开源代码, 允许用户直接拿来学习、开发。使用Open Source的应用受到Open Source的许可证限制,如有些 Open ...

    C#自带开源项目

    开源项目意味着源代码对公众开放,允许开发者查看、学习、修改和分发代码,促进了技术社区的合作与创新。C#是Microsoft开发的一种面向对象的编程语言,广泛应用于Windows平台的开发,尤其是.NET框架下的应用。 描述...

    几个比较著名的开源项目jsp代码研究与学习

    【标题】:“几个比较著名的开源项目jsp代码研究与学习” 【描述】中提到的几个开源项目,包括了“jdon版的jive”,“jblog”以及“sun的pet store”,这些都是基于Java语言,利用JSP(JavaServer Pages)技术开发...

    java项目源码 学习源码 开源代码

    根据提供的文件标题“java项目源码 学习源码 开源代码”以及描述“java 初学者 学习源码 开源代码”,我们可以围绕Java开源项目的源码学习进行深入探讨,帮助初学者更好地掌握Java编程。 ### 一、为什么学习Java...

    WPF优秀开源代码合集

    本压缩包中的“WPF优秀开源代码合集”显然是一份包含了多种WPF应用开发的示例代码或者开源项目,可以帮助开发者学习和理解WPF的各种特性和最佳实践。通过研究这些开源代码,开发者可以提升自己的WPF编程技能,了解并...

    开源雷达处理代码 开源雷达处理代码 开源雷达处理代码

    通过学习和研究开源雷达处理代码,不仅可以提升对雷达系统理解的深度,还可以促进技术创新,因为这些代码库经常包含最新的研究成果和技术趋势。同时,开源性质意味着用户可以参与到项目中,贡献自己的代码,推动雷达...

    开源项目的代码汇总(主要是csdn上下载到的)

    开源项目,即开放源代码的软件项目,是软件开发的一种模式,允许用户自由地查看、使用、修改和分发源代码。这种模式促进了全球开发者之间的协作与创新,孕育出许多著名的软件产品,如Linux操作系统、Apache HTTP...

    C# MES_开源源代码

    9. **版本控制与持续集成**:开源项目通常使用Git进行版本控制,确保代码的安全性和协作效率。同时,可能会结合Jenkins、Travis CI等工具进行持续集成,自动化测试和构建过程。 10. **模块化与插件架构**:为了增强...

Global site tag (gtag.js) - Google Analytics