怎样读一个大程序

 声明:我指的是普通程序,可能更偏重一些算法性程序,你要去读开源的开发库或者操作系统代码,就另说了啊!
        怎样读一个大程序(针对VC++代码谈自己的一点经验,但是语言是共通的,希望对其他语言的程序设计师也能有一些启发和帮助):
下到一块大代码,有几十个类,有些人当场吓晕过去(夸张了点)。其实我们分析这样的程序,可以:
    首先,看看它是不是用了什么辅助库。比如OpenCV(做图像、视频、模式识别的最近很流行这个),ADO(做数据库的比较常用)等,这些类库一进来就把代码拉得老长,其实根本不用看,因为它们通常都有良好的接口说明,知道怎么用就可以了,所以把这些类放一边去。
    其次,把VC自己生成的东西可以略去不看,对于单(多)文档程序,通常有Frame,doc,view等类,一般只有view类是需要看的(专做文档处理的程序doc应该是重要的),还有关于AboutDlg,APP等,都可以不看了。这样下来,一个比较复杂的程序也往往只有五六个比较核心的类了(重量级的大Case当然也可能更多)。对于UI设计很精巧的程序,尽量把他们的UI部分和核心功能部分分成两个大块来分割歼灭。
    再次,对于这些类的分析也往往要分清轻重缓急,根据自己的需要迅速进入重点类的分析。一般的方法是从view类的操作相应中一路跟下来,看看是不是模块分的很清楚,如果是就可以迅速进入自己感兴趣的类进行研究了。如果不是很清楚,就要从各个类提供的接口来分析,看看到底各个类都提供了那些接口,也就知道了它们大体实现了那些功能。问题是很多程序对接口的设计并不好,它们的设计者往往省事儿全都设置成了public型的接口(只有少数很棒的程序才把public/protected/private分的很清楚,一些大公司里的很棒的程序代码也不会轻易流传到网络上供自由下载的),甚至内部的成员变量也暴露成public型,但是并非所有的函数都是外部接口(大部分都是内部接口)。为了分清内外接口,就需要我们在类的头文件中将一些看起来不像外部接口的写到private里去试试,编译一下,不行放回去,行的话在拿过来几个不像的,如此这般,这般如此,往往最终发现外部接口只有那么两三个,也有多到五六个的,弄清了出口,再分析起来就轻松多了。(编译器对于接口保护部分的错误调用是很敏感的,因此如果是一个外部调用的接口,而我们改成了private型了,编译器必然会报错的)。
    最后,各个核心类都知道是谁了,外部接口也都了解了,那么把这些东西在一张白纸上匀称的画出来。有些有经验的应该知道我下面要干什么了,对了,就是画耦合关系图。一个良好的程序在设计的时候都要涉及到类之间的耦合关系,即时有些懒懒的程序设计人员没有搞这个东西就写了程序(可能他只是工作之余玩玩就搞出来一个大家感兴趣的代码)。我们画出了这个图以后,就做到胸中有沟壑了,结合我们运行程序时候的体验,可以说这时候我们对程序的设计概要完全了然于胸了。
    再进去读代码就是个人的事儿了,在这之前做的这些工作将会以很少的时间,对我们分析代码的工作提供很好的前提条件,这样我们读代码就会有如沐春风的感觉了(当然不能是那种不值得一读的代码)。
                                                                 李文凯
                                                                  2008年5月7日于ImLab      
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值