2004年08月01日
[Crystal Studio Web][软件工程]开发编程规范
【命名约定】
一、变量名的约定:
命名规则主要采用匈牙利命名法。进行了一些增删。
1. 用小写字母的前缀表示变量的类型,前缀的下一个字母用大写。
——————————————————————————
前缀 类型 例子
b * Boolean bIsParent
by 字节 byFlag
ch * char chText
c * 类对象 cMain(对象实例)
fn Function fnCallback
h * Handle(句柄) hWnd
i * int
n * 无符号整型
p * 指针
sz,str * 字符串
w WORD
x,y 坐标 xPos, yPos
——————————————————————————
其中,带“*”号的为常用约定。
其它前缀:
m_ 类成员变量 m_nVal, m_bFlag
g_ 全局变量 g_nMsg, g_bFlag

局部变量中可采用如下几个通用变量:nTemp,nResult,I,J(一般用于循环变量)。

二、VB中控件的命名:
用小写前缀表示类别:
fm 窗口
cmd 按钮
cob combo,下拉式列表框
txt 文本输入框
lab labal,标签
img image,图象
pic picture
grd Grid,网格
scr 滚动条
lst 列表框
frm fram

【注释规范】
一、函数
在函数开头,用如下格式注释:
/*************************************************************************/
/* Function: DelStringFrom String */
/* 从一个String删除另一个String。 */
/* 参数:strByDelete,strToDelete */
/* strByDelete: 被删除的字符串(原来的字符串) */
/* strToDelete: 要从上个字符串中删除的字符串。 */
/* 返回:找到并删除返回0,否则返回-1. */
/*************************************************************************/

二、变量
对于非通用的变量,请在定义时加以注释说明,变量定义尽可能放在最开始处。

三、文件注释
在文件开头注释以下内容:
////////////////////////////////////////////////////////////////////////////
// Project: 文件所在的项目名,如:eForum
// By: 作者、修改者、…,如:xiaobo、qyz………
// Discription: 说明文件的功能。
////////////////////////////////////////////////////////////////////////////

四、其它
函数内各功能模块,如:循环、流程的各分支等,尽可能多的加以注释。

【编程风格】
一、严格采用梯形层次对应好各层次。如:
main()

      int i,j; 
      …….. 
      for (i==0;i<100;i++) 
      { 
            ………. 
            ………. 
            if (i==0) 
            {    
                  ……… 
                  ……… 
            } 
            ………. 
            ………. 
      } 
      ………
}

二、注意错误处理
编程中要考虑函数的各种执行情况,尽可能处理所有流程情况。
将函数分两类:
一类为与屏幕的显示无关,
二类为与屏幕的显示有关。
对于与屏幕显示无关的函数,函数通过返回值来报告错误。
对于与屏幕显示有关的函数,函数要负责向用户发出警告,并进行错误处理。
错误处理代码一般放在函数末尾,如下(以VB程序为例):
……..
On Error Goto errHandle
…….
Exit Sub

errHandle:
Select Case Err
Case 1:
….
Case 2:
….
Case Else:
….
End Select
End Sub
对于通用的错误处理,可建立通用的错误处理函数,处理常见的通用的错误。

【模块化】
某一功能,如果重复实现三遍以上,即应考虑模块化,将它写成通用函数。并向小组成员
发布。同时已要尽可能利用其它人的现成模块。模块化的一些注意事项:
1. 设计好模块接口,用面向对象的观点看,包括:函数接口和变量接口。
2. 定义好接口以后不要轻易改动,并在模块开头(文件的开头或函数的开头)加以说明。
3. 不要在外部使用接口以外的其它函数或变量。
4. 注意全局变量也是一种接口。
5. 接口即是罗列出一个模块的所有的与外部打交道的变量、函数等。

一点看法一点体会——国外与国内,数学与计算机
作者:骄傲的中国人

  其实很早就想写这遍文章了,趁有点时间,想把自己的感受说一
下。我的写作水平just so so,写english还好一点,因为不用象中
文那样,要注意那么多的修辞方式和文采,只需平铺直叙就行了。

  可能我天生就是要注定学Computer的,因为从小学到现在,只有
两堂课是可以的——数学,英语。我那股凡事都要问个为什么的牛脾
气,更在学数学中体现得淋漓尽致。整天地查书,追问着同学,老师
每一条算式,定理的推算和证明,直到最后得知那是一条公理,才心
有不甘地停止了穷追猛打,甚至还想弄一些鬼点子来推翻公理。以至
同学、老师一见到我就觉得烦。可惜我学艺不精,小中大学都被选拔
参加过不少数学竞赛,却没有拿过一次理想的成绩。我那牛脾气也延
续都到写program中,几乎什么都喜欢自己implementation。所以我不
太喜欢VB,DELPHI,CBC,什么都用别人的Component。觉得有一种压
抑感,由于是从SDK学起的,所以Windows的机理也比较清晰,以前还
打算把MFC source codes改写成为自己的classes,可惜MFC实在庞大,
而且还在不断updated,以我一个人的能力完成了约1/3,已经精疲力尽
了。以前在国内一直梦想着能到Symantec 这样的公司做developer,
因为很想弄清楚为什么Norton能把Windows control 起来。

  以前总觉得国外的programmer很厉害,若不是的话,为什么能开
发出这么多改变人类生活Software,但出来见识过了,才知道在技术
上,他们也不过如此,反而觉得国内的高手还多一些。也许这与教育
制度有关,国内普遍都认为只要数学学好了,计算机也就没问题了,
君不见国产的教科书都是以那些枯燥的数学问题来教导初学者。诚然,
数学思维对写code有莫大的帮助,我也是受益者,所以中国人写程序
在同等外界条件下(硬件,资料等)绝对比鬼佬强。但同时也带来了
严重的错误观念——“编程研究到一定程度,归根结底是数学问题”。
刚出来的时候,我也是这样认为。

  我哥也是Master of Computer Science出身,由于他自己的努力,
还没到30岁,已经在3com总部担任Project manager了。他以前在silion
valley 多间公司做过,包括Symantec。兄弟俩经常就computer的问
题进行讨论,他为了我能尽快适应silicon valley的文化,不断把不
少经验告诉我,使我收益非浅。发现其实是观念上的不同。这里认为
“编程研究到一定程度,归根结底是管理和人类发展的问题”。

  一、管理问题: 其实写code在一个software product生产过程中只
占一小部分,关键在于如何使product占有market和有效管理整个pro-
duct的开发过程。这学期在Project Management Course学习中,有两
点很有感受。

  (1) At some point in the development, Better becomes the
enemy of Good.

(2) Engineers are very good at taking more time and sp-
ending more money to make “better” than what the customer
ever wanted or has the time or money to pay for.

(3)一群水平一般的Engineers + 一个优秀,经验丰富的Manager
>> 一群拔尖的Engineers。

  而中国恰好在管理上缺乏优秀人才,制度和观念更是与silion
valley 的不能同日而语。因此,尽管国内优秀的programmer相当多,
但是只是一盘散沙,白白浪费掉。可叹的是有不少国人还白日做梦地
期盼着中关村能取代硅谷。若制度和观念不改变的话,即使把全国最
优秀的程序员聚积在中关村,也别想追上硅谷。另一个典型的例子,
Linux 如今高唱入云,而且聚积了世界上许多优秀程序员的成果,但
是若它的开发和维护仍停留在以个人或小群体的基础上,没有系统性,
规范化。即使它的性能比Windows 要好许多,也只能成为那些发烧友
桌上的宠物,永远不能登大雅之堂!如今不少大公司加入其中,对它
开发和维护的管理有很大帮助,才有可能向microsoft叫板!

  二、人类发展从计算机技术的发展历史来看,计算机最终解决的
是人类发展问题,而不是数学问题。很简单的例子就是,Programming
Language的发展,asm-> c-> c++-> java-> CORBA(注意:CORBA不
是一种语言)

  可以看到这样的发展,主要是为了方便一个Software,一个Pro-
duct 的更有效的开发和应用。简单地说,c使程序员摆脱了机器语言
的苦涩,c++(也可以说Object-oriented Languages)使产品的组成、
开发、维护更符合人类的思维方式,java在Internet流行的这个年代,
顺理成章地成为了宠儿,CORBA更是进了一大步,承诺Language-inde-
pendence, Platform-independence, Location-independence。已
经是相当成熟的Distributed Object Computing。看了许多CORBA 的
书,颇有感叹,CORBA应该说是人类思维的发展的一个体现。同时,
为中国计算机的研究无奈!这里的研究可以说是以人为本,为的是在
整体上运用计算机促进人类发展,而国内的研究更多的是在于算法等
局部,微观的研究,这方面虽然是必要,但在观念上可以看得出人家
已经高一个层次了。不夸张地说,silicon valley,它有自己独特的
文化,在这里,不但可以看到到计算机技术的飞速发展,同时也从中
感受到人类思维的发展。这也是为什么要独立开办一个Computer science
department的缘故。毕竟,数学与计算机有紧密联系,但同时也有许
多本质的不同。

  以上是我出国后感觉到的不同,归根到底就是两个字:“观念”。
这也是我一家之言,盼能与大伙讨论一下,为中国的计算机发展出一
分绵力。