如何阅读他人的程序代码
2015-06-13 00:43
197 查看
透过开放原始码你可以:
1.学到新的技术;
2.学到高手的架构设计;
3.以直接自开放原始码项目中抽取、提炼自己所需的程序代码;
接触他人程序代码的三种不同程度:
.1了解;
2.修改、扩充;
3.抽取、提炼;
阅读他人程序代码四件事:
准备、工具、方法、心态;
阅读他人代码的基本准备:
1.了解程序代码写成的程序语言;
2.确认程序代码所用的命名惯例:变量的名称、函数式的名称、类别的名称以及原始码档案和项目构建目录名称;
3.设计模式;
如何得知命名惯例:
a.取得命名惯例的说明文件;
b.进到程序代码中大致的浏览一遍,自行发觉出该系统所用的命名惯例;
c.常见的命名方式不脱几类:经验很重要,知道的惯例越多,就越能轻易的识别他人所用的惯例;
d.如果想阅读的程序代码的惯例是你前所未见的,请花时间归纳,找出规则;
对工具的需求
1.浏览原始码;
2.找出特定类别/函式/变数位于哪一原始文件
3.找出特定讯息由哪一函数式所丢出(或记录);
4.找出自定义类别/型别的引用关系
5.找出函式的呼叫关系;
6,随着浏览的需求,快速的切换至感兴趣的函式程序代码本体部分;
7.自动从原始码建立模型:如自动产生类别图。
常用工具:
IDE、grep、gtags、htags;
阅读他人程序就像是在拼图:
你凭借自己的组织能力,自行在不同的程序代码键跳跃,拼凑出自己闹总想要构建的图像,在阅读程序代码时,你最常做的事,就是随着程序中的某个控制流,将你阅读的重心从某个函式移至它所呼叫的另一个函式。通常你不会为了解决一个特定的问题,而从头到尾的把整个程序代码读完,你只会试着拼出你所需的部分,随着时间积累,你会频出对整个系统面貌的了解。
拼图的方法:
1.决定起始点;
2.找出欲读的函式位置;
3.了解函式是如何实作以达成作用;
4.找出那些元素(函式、变数……)和此函式相关
5.决定欲前进至那一个函式一直到所需的拼图完成;
要拼出一个什么样的图取决于你的动机:
1.追踪除错;
2.修改既定的功能;
3.扩充新功能;
4.撷取某一模块;
阅读方向:
1.由下至上:从细节到全貌
2.由上至下:从全貌到细节;
两种方向在阅读时有时会交错使用,但会依据阅读的目的的决定一开始的方向;
以追踪除错为目的:
为了解决既有系统的特定问题而阅读代码,出事的阅读方向由下到上,找出阅读的起点:找出想要解决的问题所在,从画面上的错误讯息或log文件中的记录开始寻找对应的程序代码位置;从上一层的函式中确定下一个阅读函式。
如何找出特定功能模块所在:
当我们想要修改既定的功能,撷取某一个模块都需要找出特定功能模块所在;
找出阅读的起点:了解系统的架构,由上而下找出该功能模块涉及的原始文件、类别、及函式,由原始档、类别及函式的名称,推测它们所实作的功能模块;
了解系统的架构:了解系统所用的技术及应用程序框架(MFC,struts,Hibernate);用自动建模工具,自动建立系统模型;找出主要的子系统:系统如何初始化,与这个系统想接的其他系统(或用户)有哪些,相邻的接口又是什么,系统如何反应各种事情,系统如何处理各种异常及错误。
由上而下,探究系统构架:归纳常见的构架模式;找到程序入口;由上而下,抽丝剥茧;展开树状结构,一层一层的由最外层结构展开的树状结构,是自己需要了解的深入程度,决定要展开的层数;
1.学到新的技术;
2.学到高手的架构设计;
3.以直接自开放原始码项目中抽取、提炼自己所需的程序代码;
接触他人程序代码的三种不同程度:
.1了解;
2.修改、扩充;
3.抽取、提炼;
阅读他人程序代码四件事:
准备、工具、方法、心态;
阅读他人代码的基本准备:
1.了解程序代码写成的程序语言;
2.确认程序代码所用的命名惯例:变量的名称、函数式的名称、类别的名称以及原始码档案和项目构建目录名称;
3.设计模式;
如何得知命名惯例:
a.取得命名惯例的说明文件;
b.进到程序代码中大致的浏览一遍,自行发觉出该系统所用的命名惯例;
c.常见的命名方式不脱几类:经验很重要,知道的惯例越多,就越能轻易的识别他人所用的惯例;
d.如果想阅读的程序代码的惯例是你前所未见的,请花时间归纳,找出规则;
对工具的需求
1.浏览原始码;
2.找出特定类别/函式/变数位于哪一原始文件
3.找出特定讯息由哪一函数式所丢出(或记录);
4.找出自定义类别/型别的引用关系
5.找出函式的呼叫关系;
6,随着浏览的需求,快速的切换至感兴趣的函式程序代码本体部分;
7.自动从原始码建立模型:如自动产生类别图。
常用工具:
IDE、grep、gtags、htags;
阅读他人程序就像是在拼图:
你凭借自己的组织能力,自行在不同的程序代码键跳跃,拼凑出自己闹总想要构建的图像,在阅读程序代码时,你最常做的事,就是随着程序中的某个控制流,将你阅读的重心从某个函式移至它所呼叫的另一个函式。通常你不会为了解决一个特定的问题,而从头到尾的把整个程序代码读完,你只会试着拼出你所需的部分,随着时间积累,你会频出对整个系统面貌的了解。
拼图的方法:
1.决定起始点;
2.找出欲读的函式位置;
3.了解函式是如何实作以达成作用;
4.找出那些元素(函式、变数……)和此函式相关
5.决定欲前进至那一个函式一直到所需的拼图完成;
要拼出一个什么样的图取决于你的动机:
1.追踪除错;
2.修改既定的功能;
3.扩充新功能;
4.撷取某一模块;
阅读方向:
1.由下至上:从细节到全貌
2.由上至下:从全貌到细节;
两种方向在阅读时有时会交错使用,但会依据阅读的目的的决定一开始的方向;
以追踪除错为目的:
为了解决既有系统的特定问题而阅读代码,出事的阅读方向由下到上,找出阅读的起点:找出想要解决的问题所在,从画面上的错误讯息或log文件中的记录开始寻找对应的程序代码位置;从上一层的函式中确定下一个阅读函式。
如何找出特定功能模块所在:
当我们想要修改既定的功能,撷取某一个模块都需要找出特定功能模块所在;
找出阅读的起点:了解系统的架构,由上而下找出该功能模块涉及的原始文件、类别、及函式,由原始档、类别及函式的名称,推测它们所实作的功能模块;
了解系统的架构:了解系统所用的技术及应用程序框架(MFC,struts,Hibernate);用自动建模工具,自动建立系统模型;找出主要的子系统:系统如何初始化,与这个系统想接的其他系统(或用户)有哪些,相邻的接口又是什么,系统如何反应各种事情,系统如何处理各种异常及错误。
由上而下,探究系统构架:归纳常见的构架模式;找到程序入口;由上而下,抽丝剥茧;展开树状结构,一层一层的由最外层结构展开的树状结构,是自己需要了解的深入程度,决定要展开的层数;
相关文章推荐
- Java Thread总结
- java 反射处理java泛型
- 字符串截取,一个中文算两个字符
- mac平台下面ruby环境搭建
- 使用Java完成《算法导论》习题2.1-4
- String数据类型详解
- 远程计算_使用Matlab计算引擎
- ASP.NET中母版页和shtml实例入门
- ASP.NET中Application全局对象用法实例浅析
- ASP.NET中Global和URLReWrite用法
- ASP.NET中ServerPush用法实例分析
- asp.net实现在非MVC中使用Razor模板引擎的方法
- asp.net模板引擎Razor中cacheName的问题分析
- asp.net模板引擎Razor调用外部方法用法实例
- PHP获取数组的键与值方法小结
- 隐性调用php程序的方法
- php数组随机排序实现方法
- Ruby语言简明入门与提高
- java.io.FileNotFoundException问题,说是db.properties文件找
- C语言中的单引号和双引号含义