如何阅读源代码

                                             如何阅读源代码

 

心态篇

透过开放原始码学习到新的技术、学习到高手的架构设计,大幅提高学习的效率及效果。 甚至可以直接自源代码项目中抽取、提炼出自己所需的程序代码,站在巨人的肩膀上直接获得所需的生产力。从这个观点来看,读懂别人源代码,就不再是从负面观点的「被迫接收」,而是极具正面价值的「汲取养份」。

 编写程序代码是程序人的重要技艺之一,那么读懂别人的程序代码、接着加以修改,也势必是另一个重要的技艺。当你接手一份源代码后,如果你不能读懂或者不想面对这份源代码时,你会遇到以下困难:

  • 无法快速实现目前的开发任务(扩充、优化等)以及解决程序中bug
  • 不知如何从中撷取自己所需,满足第一条

二 惯例用语

熟悉惯例用语之后,阅读代码时就能试着用共同操用的语汇来进行理解。面对不同的命名惯例有可能是团队多人维护的项目,那就要甄别不同角色的命名惯例。

1.程序语言

以C++为例:三大函数(构造、析构、赋值构造)、虚函数、友元

2.命名惯例

变量名称、函数名称、类的名称、源码、项目目录结构名称、设计模式中使用的类名称(有一些具体的表述方式,例如工厂模式,有factory字样)。  

三 架构

采取由上至下的方式,目标:捕捉系统的架构,不过早钻进细节。

因为细节通常对于你了解全貌,没有多大的帮助。例如:对于面向对象程序语言所设计的系统来,整个系统被拆解、分析成为一个个独立的类。阅读个别类的程序代码,或许可以明白每项类对象的个别行为,但对于不同类对象之间如何交互影响、如何协同工作,又很容易陷入盲人摸象的困境。这是因为类的程序代码,只描述个别对象的行为,而片段的阅读就只能造就片面的认识

采取由上至下的方式,目标:建立层次,界定层次间角色,了解角色互动模式  

也就是说,当我们谈到「架构」这样的观念时,必须要有层次感。而不论是那一层级的架构,都会定义出各自的角色,以及角色间的关系。对阅读者来说,相较于直接切入最细微的单一角色行为,不如了解某个特定的架构中,究竟存在多少角色,以及这些角色之间的互动模式,比较能够帮助我们了解整个系统的运作方式。  
这 是一个很重要的关键,当你试着进到最细节处之前,应该先试着找出参与的角色,及他们之间的关系。例如Windows GUI应用程序采用的事件驱动式的架构
    对事件驱动式的架构而言,有3个很重要的角色。一个是事件处理的分派器(Event Dispatcher)、一个是事件产生者(Event Generator)、另一个则是事件处理器(Event Handler)。  

 

 

当面对事件驱动式的架构时,你便可以进一步得知,在这样的架构下会有3种主要的角色。虽然也许还不清楚整个系统中,究竟会需要处理多少类型的事件的,但对你而言,已经建立了架构的层次感。  

当对系统的架构不了解时,目标:

系统如何初始化

系统如何初始化是很重要的一件事,因为初始化是为了接下来的所有事物而做的准备。从初始化的方式、内容,能知道系       统做了什么准备,对于系统会有什么行为展现,也就能得窥一二了。

与这个系统相接的其他系统(或用户)有那些,系统间接口是什么

要了解与系统相接的其他系统(或用户),目的是要界定系统边界,了解我们所探索的系统与其他系统间的输入输出关         系,了解边界所在才能确定系统的外观。    

系统如何反应各种事件

      系统所反应的事件类型以及反应方式,基本上就代表着系统本身的主要行为模式。

系统如何处理各种异常及错误  

     系统处理异常及错误的方式,同样也是系统的重要行为之一。


  

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值