windows环境相爱Delphi编程规范.doc_第1页
windows环境相爱Delphi编程规范.doc_第2页
windows环境相爱Delphi编程规范.doc_第3页
windows环境相爱Delphi编程规范.doc_第4页
windows环境相爱Delphi编程规范.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

WINDOWS环境下编程规范基于Delphi的标准华腾软件系统有限公司2002.3.29Windows环境编程规范文档异动历史版本号日期说明作者/审阅V1.0.02002/3/292002/4/4初稿第二稿许彤慧 审阅:杨文彬、陈丽萍、曾曙峰、李聪明、魏海波基本要求3可读性要求3结构化要求4正确性与容错性要求4可重用性要求4命名规则5用户界面8注释使用规范10数据说明及定义规范12其他书写规范13提示信息规范13WINDOWS环境下编程规范基于delphi的标准基本要求1. 程序结构清析,简单易懂,单个函数的程序行数最好不超过100行。2. 打算干什么,要简单,直接了当,代码精简,避免垃圾程序。(需要按详细设计方案)3. 尽量使用标准库函数和公共函数。4. 不要随意定义全局变量,尽量使用局部变量。(全局变量由专人专管)5. 表达式使用括号以避免二义性可读性要求1. 可读性第一,效率第二。2. 保持注释与代码完全一致。(定时抽查)3. 每个源程序文件,都有文件头说明,说明规格见规范。(推荐使用英文)4. 每个函数,都有函数头说明,说明规格见规范。(推荐使用英文)5. 主要变量(结构、联合)定义或引用时,注释能反映其含义。(对于难以描述的变量可以使用中文)6. 常量定义有相应说明。7. 处理过程的每个阶段都有相关注释说明。8. 在典型算法前都有注释。9. 利用缩进来显示程序的逻辑结构,缩进量一致并以Tab键为单位,定义Tab为 4个空格10. 循环、分支层次不要超过五层。11. 注释可以与语句在同一行,也可以在上行。12. 空行和空白字符也是一种特殊注释。13. 一目了然的语句不加注释。14. 注释的作用范围可以为:定义、引用、条件分支以及一段代码。15. 不要轻易用条件分支去替换逻辑表达式。16. 不要用晦涩的语句结构化要求1. 禁止出现两条等价的支路。2. 少用GOTO语句。3. 用 IF 语句来强调只执行两组语句中的一组。禁止 ELSE GOTO。4. 用 CASE 实现多路分支。5. 避免从循环引出多个出口。6. 函数只有一个出口。7. 不使用条件赋值语句。8. 避免不必要的分支。正确性与容错性要求1. 程序首先是正确,其次是优美2. 无法证明你的程序没有错误,因此在编写完一段程序后,应先回头检查。3. 改一个错误时可能产生新的错误,因此在修改前首先考虑对其它程序的影响。4. 所有变量在调用前必须被初始化。5. 对所有的用户输入,必须进行合法性检查。(包括日期、金额、下拉框中的内容、费率等)6. 不要比较浮点数的相等,如: 10.0 * 0.1 = 1.0 , 不可靠7. 程序与环境或状态发生关系时,必须主动去处理发生的意外事件,如文件能否逻辑锁定、打印机是否联机等。8. 单元测试也是编程的一部份,提交联调测试的程序必须通过单元测试。可重用性要求1. 重复使用的完成相对独立功能的算法或代码应抽象为公共控件或类或公共函数。(由专人控制,编码说明通过EMAIL发放)2. 公共控件或类或函数应考虑OO思想,减少外界联系,考虑独立性或封装性。命名规则1. 宏定义命名宏定义的命名由大写英文字母、数字和下划线组成,各单词之间用下划线“_”分开。宏定义的名字原则上应与后台server保持一致,以下为符合规范的宏定义名字: / communication status COMM_DISCONN = 0; COMM_CONN = 1; COMM_RUNNING = 2;2. 变量命名基本规则程序中所有变量的命名遵循以下的组成规则:+其中作用域名区分局部变量和全局变量;类型前缀名是单个或几个不同基本数据类型的组合,基本数据类型前缀名在以下各节作说明;变量的自定义名字由英文字母和数字组成,使用大小写字母区分各单词,首字符为大写英文字母。整个变量名的总长度不设限制(只要符合编译器的规定就行)。3. 基本数据类型的前缀名 整型变量前缀名(包括Shortint, Smallint, Longint, Int64, Byte, Word, and Longword.)整型(integer,int64)变量的类型名为i,例如: iIntegerVar : integer; 单个字符型变量前缀名单个字符型(char,pchar)变量的类型名为c,例如:cCharVar : char; 字符串变量前缀名字符串变量的类型名为s,例如:sStringVar : string; 布尔型变量前缀名布尔型变量的类型名为b,例如:bBooleanVar : boolean;4. 其他数据类型变量的前缀名 枚举型变量前缀名枚举型(enum)变量的类型名为e,例如:type eEnumVar = (“Sun”, “Mon”, “Tue”, “Wed”, “Thu”, “Fri”, “Sat” ); 数组型变量前缀名数组型变量是在其基本数据类型名后加上字母a,例如整型数组变量命名为:iaIntArrayVar : array0.CR_LEN_FLAG-1 of integer;字符数组的类型为: caCharArrayVar : array0.CR_LEN_FLAG-1 of char; 自定义类型变量前缀名自定义类型名前一律加上字符tag,而变量名前一律加上字符r,但不必再加自定义类型名。例如,有自定义结构type tag_MyRecord = recordcAgrno : array0.CR_LEN_AGRNO-1 of char; cBrno: array0.CR_LEN_BRNO-1 of char; cOpdate : array0.CR_LEN_DATE-1 of char; cOptime : array0.CR_LEN_TIME-1 of char;end;rRecordVar : tag_MyRecord;RecordVar 若为与后台消息通讯结构,则应该与后台server保持一致,以后台server为准。5. 函数命名函数名的组成为+,所有的公共库函数必须都有模块名,比如TCP/IP通讯类的公共库函数,此类函数应有模块名如为tcp,则所有对外开放的库函数调用都应以tcp开头,例如tcpConnect()可以是TCP/IP类公共库函数的一个调用名。所有非公共库函数名的定义中,模块名可以被省略。自定义功能名的命名方法与变量命名中的自定义名一致。 公共函数库源程序名以cm开头。 通讯模块源程序名以comm开头。 消息模块源程序名以mess开头。6. 目录树结构及命名系统具有多级目录树结构,所以各类文件可以按用途分类放在不同的目录下,以下是缺省的目录树结构:7. 常用控件的命名:控件命名采用控件前缀+自定义命名用小写前缀表示类别:frm窗口bt CommandButton按钮bbt BitBtn (include a bitmap on button face)cbo Combo下拉式列表框edt EditText文本输入框medt MaskEditlbl labal,标签img image,图象pic picturestrgrdStringGrid,网格chk Check Box 复选框rgrp Radio Group 单选框pgctl PageControltbsht TabSheetmmo Memogrpbx GroupBoxpn panelmnu menupmnu popupmenudb databasectbr ControlBartbr ToolBartbt ToolButtonbvl Beveltm Timercpn 自定义控件前缀8. 前台与后台消息包结构命名保持一致,以后台为准。用户界面 1. 系统主页要求美观大方,登录后的页面能体现系统的总体功能框架。控件的字体及色彩基调应该保持一致风格。2. 主页面采用MDI多文档管理窗口,菜单提供相应的快捷方式。子窗口初始化时,一律居中,禁用窗口最大化及可伸缩功能,提供窗口的最小化及关闭功能。3. 密码输入要用“*”屏蔽。4. 控件的名称或标题最好使用用户熟悉的字眼。(以客户需求为准)5. 完成相同或相近功能的按妞用panel框起来,按钮要支持快捷方式。6. 完成同一功能或任务的元素在集中位置,减少鼠标移动的距离。7. 按TAB键自动切换的顺序应该与界面上控件的排列顺序保持一致。8. 按回车键能自动进入TAB顺序表示的下一控件的焦点状态。9. 界面上首先要输入的和重要的信息控件应该是TAB键顺序靠前,而且在比较醒目的位置,使对应控件在一开始就获得焦点。10. 分页界面的页面间可以用快捷键切换,顺序按重要程度和访问几率排列。11. 复选框和选项框按选择几率的高低先后排列,并且有默认的选项。12. 在新增和修改状态下关闭窗口或按退出按钮,提示是否保存修改。13. 对于编号、代号等的输入可以提供小按钮查询来得到,对可能有多种选择的提供向导。14. 安全性原则 所有输入控件的值在提交前应该进行合法性验证,不合格的应提示原因。输入长度应该按数据库长度进行约束. 首要排除可能会使应用非正常终止的错误,如:除零运算等,死循环、长度超过数据库定义的长度、含有特殊字符等。 应当注意排除无意的无效数据录入,如数值形态的控件要防止录入字符等。 应该避免未授权功能的使用及无意义的操作。 对可能引起致命错误或系统出错的输入字符和动作要加以限制和屏蔽。 日期采用统一的YYYY/MM/DD格式表示。而且日期的合理性必须得到验证。 小数点的位数必须根据数据库字段的要求加以限制。 费率等数值不能录入负数值。15. 合理性原则 非法输入和操作应该有足够明确的提示说明,提示说明不能混淆和重复,如“不能输入大于600的数字”“数字应该小于或等于600”应该只保留其中一种说法。不能出现A处有A的说法,B处有B的说法,其实是一个意思。 一些键盘或鼠标的屏蔽性的操作无须用MsgBox来显示提示信息,如控件只能输入数字、小数点、“-”,当输入字符时不需要有任何提示。 提示或警告信息必须具有向导性,能告知用户错误原因,并自动使需改变的控件在第一时间内获得焦点。 按钮的排列应该遵循新增、修改、删除、查询、退出等主题的排列顺序。注意界面按钮的屏蔽逻辑,如按下“新增”后屏蔽新增、修改、删除按钮,在对应位置显示确认、取消按钮等。整个系统应该采用统一的界面按钮逻辑风格。 删除的动作必须先有提示信息确认是否真正删除。 如果执行的处理时间比较长要有相应进度条或者等待界面提示用户等待系统响应。 按钮必须提供快捷方式,快捷键的取值符合客户共同习惯。16. 美观与协调性原则 图形按钮的图标必须具有代表性,能产生感官上的功能认同。 长宽的比较接近黄金分割定律。 布局要合理切忌过于密集或过于空旷,合理利用空间。 字体统一采用宋体 5号字大小,黑色。所有控件排列要力求整齐,左右都能对齐,Label内容一律右对齐,不要用冒号。 前景色与背景色搭配要合理,不宜反差太大,控件背景色除必要之外,选clWindow,可以保持与Windows设置相一致,以便于根据客户喜好调整。from的背景色选clBtnFace. 所有按钮大小相同(长65,宽22),使用缺省的立体风格,功能相近的按钮放在一起,退出按钮一般放在右下角,与最右边的控件右边对齐。 所有文本输入控件及下拉框控件高20,(memo控件除外)同一页面,控件宽度尽量保持一致,使界面直观效果整齐。 StringGrid文字一律左对齐,而金额一律右对齐。注释使用规范1. 共同性规则注释在源程序和头文件中是以行注释的形式出现,使用一对双斜杠和竖线(/| comment |/)括起来,如下面所示:/|-|/|Comments are placed right here. The total length of the line is 79 columns.|/|You may put blank space(s) to the left and right as margins. |/|- |/根据注释在源程序中说明对象的不同,注释可以大致分为程序功能注释、变量功能注释、函数功能注释、算法描述注释和修改标识注释几类,在以下的几个小节中将会具体描述各类注释的使用规范。2. 模块功能说明模块功能说明注释结构如下:/|-|/| NAME OF THE MODULE |/| |/| DESCRIPTIONS: You should describe the major function of the module here.|/| More lines should be added from this position. |/|-|/| MODIFICATION LOG |/| DATE PROGRAMMER DESCRIPTION |/| YYYY-MM-DD Last, First Initial Version Creation |/|YYYY-MM-DD Last, First A brief description of the change |/| More description may be put here. |/| YYYY-MM-DD Last, First Other change |/|-|/3. 变量功能说明变量主要通过取用合适的名字来说明变量的意义或功能,而不是靠使用注释来说明其用法,本规范不建议使用变量的注释说明。4. 函数功能说明函数功能说明必须使用以下的结构:/|-|/| FUNC: FunctionName(parameters definitions); |/| INPUT: The input parameters and their usage may be put here, but this is |/| not a must. |/| OUTPUT: Same as INPUT |/| RETURN: The possible values and meanings may be placed here, but it is |/| still not a must. |/| DESC: You should describe the major function of the program here. |/| More lines should be added from this position. |/|-|/对于每一个函数,在其被定义时,函数原型FUNC域和功能描述DESC域必须给出,输入INPUT域、输出OUTPUT域、返回值RETURN域只对公共库函数定义才是必要的,一般源程序中的普通函数说明可以不给出这三个域。5. 过程算法描述过程算法描述意在说明某个处理过程的解释,这有时是必要的,但切忌安排太多的算法描述在源程序中,因为有时它们可能会适得其反。如果要对某段过程处理进行解释,可以使用以下的结构:/|-|/|You may put the comments right here. If the comment is very short, you|/|may align it to the center. For example, |/| A Short Comment Demonstration |/|or put it to the left, example follows. |/|Another short comment example. |/|The start position of the left slash(/) varies based on the start |/|position of the relevant statement. However, the end position of the |/|slash should always be put at the 79th column. |/|In some condition-judgment statements, comments may follow the |/|conditions with the right slash ending at the 79th column. For example|/| if (conditions) then / Comments may also be placed here.|/|So as the casestatement. |/|case selectorExpression of |/| caseList1: statement1;/ Comments may also be placed here. |/| caseListn: statementn; |/|end |/ /|-|/if (1) thenbegin / Comments for FunctionName() should be put from this column. / FunctionName;End;6. 修改标识说明修改标识主要是在程序中指明是在何时由何人修改了程序,配合过程算法描述可以说明修改部分的前因后果。修改标识的组成为:+例如,Robert Wang在2000年5月12日修改了一段程序,他的修改标识为RW000512。在源程序中,他可以用以下的方法标识他的修改:/|-|/|Roberts comment may be placed before the first change. His modification|/|ID may be put somewhere in the comment box, for example at the bottom of|/|the comment box. Note that no begin mark and end mark is allowed for the|/|change, even if the change is as long as several lines. RW000512 |/ /|*|/if (1) thenbegin / Whatever statement is placed here. / FunctionName;End;切记,太多的修改标识会降低源程序的整洁性和可读性,各版本程序间的差异应通过专用的版本控制工具给出,而不是完全依赖于修改标识及其注释,此法只对简单

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论