软件部项目管理项目开发规范代码编写要求_第1页
软件部项目管理项目开发规范代码编写要求_第2页
软件部项目管理项目开发规范代码编写要求_第3页
软件部项目管理项目开发规范代码编写要求_第4页
软件部项目管理项目开发规范代码编写要求_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、 DOCPROPERTY Company * MERGEFORMAT 傲腾通信科技(上海)部门名称 DOCPROPERTY Department * MERGEFORMAT 软件部保密级别文档编号SPM-PDS-ER-001项目名称 SUBJECT * MERGEFORMAT 软件部项目管理项目主管 DOCPROPERTY Manager * MERGEFORMAT Reed作者名字 AUTHOR * MERGEFORMAT Daniel创建时间 CREATEDATE * MERGEFORMAT 2001-11-19 13:50初审人员软件部初审时间2001-12-12最后保存时间 SAVED

2、ATE * MERGEFORMAT 2001-12-12 18:45当前文档版本 SUBJECT * MERGEFORMAT 软件部项目管理 DOCPROPERTY Category * MERGEFORMAT 项目开发规范: KEYWORDS * MERGEFORMAT 代码编写要求历史记录日期版本作者行为说明2001-11-19Daniel创建2001-12-12审核由软件部全体人员共同审核通过目 录 TOC o 1-7 h z HYPERLINK l _Toc532816965 历史记录 PAGEREF _Toc532816965 h 2 HYPERLINK l _Toc53281696

3、6 目 录 PAGEREF _Toc532816966 h 3 HYPERLINK l _Toc532816967 项目开发规范:代码编写要求 PAGEREF _Toc532816967 h 6 HYPERLINK l _Toc532816968 1 引言 PAGEREF _Toc532816968 h 6 HYPERLINK l _Toc532816969 编写目的 PAGEREF _Toc532816969 h 6 HYPERLINK l _Toc532816970 背景 PAGEREF _Toc532816970 h 6 HYPERLINK l _Toc532816971 定义 PAGE

4、REF _Toc532816971 h 6 HYPERLINK l _Toc532816972 参考资料 PAGEREF _Toc532816972 h 6 HYPERLINK l _Toc532816973 2 安装盘的创建 PAGEREF _Toc532816973 h 6 HYPERLINK l _Toc532816974 3 注册表的使用 PAGEREF _Toc532816974 h 7 HYPERLINK l _Toc532816975 4 简单加密算法 PAGEREF _Toc532816975 h 7 HYPERLINK l _Toc532816976 5 Delphi代码编写

5、标准 PAGEREF _Toc532816976 h 7 HYPERLINK l _Toc532816977 通用源代码格式规则 PAGEREF _Toc532816977 h 7 HYPERLINK l _Toc532816978 缩格 PAGEREF _Toc532816978 h 7 HYPERLINK l _Toc532816979 页边空格 PAGEREF _Toc532816979 h 7 HYPERLINK l _Toc532816980 5.1.3 BeginEnd 配对 PAGEREF _Toc532816980 h 7 HYPERLINK l _Toc532816981 注

6、释规范 PAGEREF _Toc532816981 h 8 HYPERLINK l _Toc532816982 文件注释 PAGEREF _Toc532816982 h 8 HYPERLINK l _Toc532816983 函数注释 PAGEREF _Toc532816983 h 8 HYPERLINK l _Toc532816984 过程注释 PAGEREF _Toc532816984 h 8 HYPERLINK l _Toc532816985 一般注释 PAGEREF _Toc532816985 h 9 HYPERLINK l _Toc532816986 5.2 Object Pasca

7、l语言 PAGEREF _Toc532816986 h 9 HYPERLINK l _Toc532816987 括号 PAGEREF _Toc532816987 h 9 HYPERLINK l _Toc532816988 保留字和关键字 PAGEREF _Toc532816988 h 9 HYPERLINK l _Toc532816989 过程和函数(例程) PAGEREF _Toc532816989 h 9 HYPERLINK l _Toc532816990 命名/格式化 PAGEREF _Toc532816990 h 9 HYPERLINK l _Toc532816991 形式参数 PAG

8、EREF _Toc532816991 h 9 HYPERLINK l _Toc532816992 格式化 PAGEREF _Toc532816992 h 9 HYPERLINK l _Toc532816993 命名 PAGEREF _Toc532816993 h 10 HYPERLINK l _Toc532816994 参数的排序 PAGEREF _Toc532816994 h 10 HYPERLINK l _Toc532816995 常量参数 PAGEREF _Toc532816995 h 10 HYPERLINK l _Toc532816996 名称的冲突 PAGEREF _Toc5328

9、16996 h 10 HYPERLINK l _Toc532816997 变量 PAGEREF _Toc532816997 h 10 HYPERLINK l _Toc532816998 变量的命名和格式 PAGEREF _Toc532816998 h 10 HYPERLINK l _Toc532816999 局部变量 PAGEREF _Toc532816999 h 10 HYPERLINK l _Toc532817000 全局变量的使用 PAGEREF _Toc532817000 h 11 HYPERLINK l _Toc532817001 类型 PAGEREF _Toc532817001 h

10、 11 HYPERLINK l _Toc532817002 大写约定 PAGEREF _Toc532817002 h 11 HYPERLINK l _Toc532817003 浮点指针类型 PAGEREF _Toc532817003 h 11 HYPERLINK l _Toc532817004 枚举类型 PAGEREF _Toc532817004 h 11 HYPERLINK l _Toc532817005 变数和ole变数类型 PAGEREF _Toc532817005 h 11 HYPERLINK l _Toc532817006 结构类型 PAGEREF _Toc532817006 h 1

11、2 HYPERLINK l _Toc532817007 数组类型 PAGEREF _Toc532817007 h 12 HYPERLINK l _Toc532817008 记录类型 PAGEREF _Toc532817008 h 12 HYPERLINK l _Toc532817009 语句 PAGEREF _Toc532817009 h 12 HYPERLINK l _Toc532817010 if 语句 PAGEREF _Toc532817010 h 12 HYPERLINK l _Toc532817011 case 语句 PAGEREF _Toc532817011 h 12 HYPERL

12、INK l _Toc532817012 一般性话题 PAGEREF _Toc532817012 h 12 HYPERLINK l _Toc532817013 格式 PAGEREF _Toc532817013 h 13 HYPERLINK l _Toc532817014 while 语句 PAGEREF _Toc532817014 h 13 HYPERLINK l _Toc532817015 for语句 PAGEREF _Toc532817015 h 13 HYPERLINK l _Toc532817016 repeat语句 PAGEREF _Toc532817016 h 13 HYPERLIN

13、K l _Toc532817017 with语句 PAGEREF _Toc532817017 h 13 HYPERLINK l _Toc532817018 一般话题 PAGEREF _Toc532817018 h 13 HYPERLINK l _Toc532817019 格式 PAGEREF _Toc532817019 h 13 HYPERLINK l _Toc532817020 结构异常处理 PAGEREF _Toc532817020 h 13 HYPERLINK l _Toc532817021 一般话题 PAGEREF _Toc532817021 h 13 HYPERLINK l _Toc

14、532817022 .2 tryfinally的使用 PAGEREF _Toc532817022 h 13 HYPERLINK l _Toc532817023 tryexcept的使用 PAGEREF _Toc532817023 h 14 HYPERLINK l _Toc532817024 tryexceptelse的使用 PAGEREF _Toc532817024 h 14 HYPERLINK l _Toc532817025 类类型 PAGEREF _Toc532817025 h 14 HYPERLINK l _Toc532817026 命名和格式 PAGEREF _Toc532817026

15、 h 14 HYPERLINK l _Toc532817027 域 PAGEREF _Toc532817027 h 14 HYPERLINK l _Toc532817028 命名/格式 PAGEREF _Toc532817028 h 14 HYPERLINK l _Toc532817029 可视化 PAGEREF _Toc532817029 h 15 HYPERLINK l _Toc532817030 方法 PAGEREF _Toc532817030 h 15 HYPERLINK l _Toc532817031 命名/格式 PAGEREF _Toc532817031 h 15 HYPERLIN

16、K l _Toc532817032 使用静态的方法 PAGEREF _Toc532817032 h 15 HYPERLINK l _Toc532817033 使用虚拟/动态的方法 PAGEREF _Toc532817033 h 15 HYPERLINK l _Toc532817034 使用抽象的方法 PAGEREF _Toc532817034 h 15 HYPERLINK l _Toc532817035 属性存取方法 PAGEREF _Toc532817035 h 15 HYPERLINK l _Toc532817036 属性 PAGEREF _Toc532817036 h 15 HYPERL

17、INK l _Toc532817037 命名/格式 PAGEREF _Toc532817037 h 15 HYPERLINK l _Toc532817038 使用存取的方法 PAGEREF _Toc532817038 h 15 HYPERLINK l _Toc532817039 文件 PAGEREF _Toc532817039 h 16 HYPERLINK l _Toc532817040 工程文件 PAGEREF _Toc532817040 h 16 HYPERLINK l _Toc532817041 窗体文件 PAGEREF _Toc532817041 h 16 HYPERLINK l _T

18、oc532817042 数据模板文件 PAGEREF _Toc532817042 h 16 HYPERLINK l _Toc532817043 远端数据模板文件 PAGEREF _Toc532817043 h 16 HYPERLINK l _Toc532817044 5.3.5 Unit文件 PAGEREF _Toc532817044 h 16 HYPERLINK l _Toc532817045 通用Unit结构 PAGEREF _Toc532817045 h 16 HYPERLINK l _Toc532817046 .1 unit的名字 PAGEREF _Toc532817046 h 16

19、HYPERLINK l _Toc532817047 .2 uses子句 PAGEREF _Toc532817047 h 16 HYPERLINK l _Toc532817048 .3 interface部分 PAGEREF _Toc532817048 h 16 HYPERLINK l _Toc532817049 .4 implementation部分 PAGEREF _Toc532817049 h 16 HYPERLINK l _Toc532817050 .5 initialization部分 PAGEREF _Toc532817050 h 16 HYPERLINK l _Toc5328170

20、51 .6 finalization部分 PAGEREF _Toc532817051 h 17 HYPERLINK l _Toc532817052 窗体单元 PAGEREF _Toc532817052 h 17 HYPERLINK l _Toc532817053 数据模板单元 PAGEREF _Toc532817053 h 17 HYPERLINK l _Toc532817054 一般目的单元 PAGEREF _Toc532817054 h 17 HYPERLINK l _Toc532817055 构件单元 PAGEREF _Toc532817055 h 17 HYPERLINK l _Toc

21、532817056 窗体和数据模板 PAGEREF _Toc532817056 h 17 HYPERLINK l _Toc532817057 窗体 PAGEREF _Toc532817057 h 17 HYPERLINK l _Toc532817058 窗体类型命名标准 PAGEREF _Toc532817058 h 17 HYPERLINK l _Toc532817059 窗体实例命名标准 PAGEREF _Toc532817059 h 17 HYPERLINK l _Toc532817060 自动创建窗体 PAGEREF _Toc532817060 h 18 HYPERLINK l _To

22、c532817061 模式窗体实例化函数 PAGEREF _Toc532817061 h 18 HYPERLINK l _Toc532817062 5.4.2 数据模板 PAGEREF _Toc532817062 h 19 HYPERLINK l _Toc532817063 数据模板命名标准 PAGEREF _Toc532817063 h 19 HYPERLINK l _Toc532817064 数据模板实例命名标准 PAGEREF _Toc532817064 h 19 HYPERLINK l _Toc532817065 包 PAGEREF _Toc532817065 h 19 HYPERLI

23、NK l _Toc532817066 使用运行包和设计包的比较 PAGEREF _Toc532817066 h 19 HYPERLINK l _Toc532817067 文件命名标准 PAGEREF _Toc532817067 h 19 HYPERLINK l _Toc532817068 构件 PAGEREF _Toc532817068 h 20 HYPERLINK l _Toc532817069 用户自定义构件 PAGEREF _Toc532817069 h 20 HYPERLINK l _Toc532817070 构件单元 PAGEREF _Toc532817070 h 20 HYPERL

24、INK l _Toc532817071 使用注册单元 PAGEREF _Toc532817071 h 20 HYPERLINK l _Toc532817072 构件实例命名约定 PAGEREF _Toc532817072 h 20 HYPERLINK l _Toc532817073 构件的前缀 PAGEREF _Toc532817073 h 20 HYPERLINK l _Toc532817074 6 C+代码编写标准 PAGEREF _Toc532817074 h 22 HYPERLINK l _Toc532817075 7 Java代码编写标准 PAGEREF _Toc532817075

25、h 22 DOCPROPERTY Category * MERGEFORMAT 项目开发规范: KEYWORDS * MERGEFORMAT 代码编写要求引言编写目的软件开发的产品质量水平,是一个由来已久的话题。而提高软件企业的产品质量水平,必须改进软件产品的开发过程。为此,制定了本规范用于指导软件部的项目开发过程,从而提高达到提高产品质量的目的。本规范以Rational Unified Process(简称RUP) 软件工程过程为蓝本,结合部门的实际情况而选择修改,从而使之适应当前应用级系统设计开发的需要。本文档主要对程序开发人员的代码编写要求做了详细的规定,以使得整个开发小组所编写的代码保

26、持一致的风格。本文档提供给软件部全体成员参考。背景软件部在基本完成了成都智能交通信息中心系统之后发现,我们需要一套软件开发规范来指导项目组的开发过程,使得项目开发过程具有可重复性,为此启动了该项目软件部项目管理。项目的名称:软件部项目管理(Software department Project Management,简称SPM)任务提出者:傲腾通信科技(上海)软件部任务开发者:傲腾通信科技(上海)软件部产品使用地:上海产品使用者:傲腾通信科技(上海)软件部定义术语缩略表示英文全称解释说明软件部项目管理SPMOctant Software department Project Managemen

27、t傲腾通信科技(上海)软件部为了规范项目开发流程而启动的一个项目项目开发规范PDSProject Development Specifications傲腾通信科技(上海)软件部定义的一种文档类别参考资料文档编号文档名称作者版本来源(存放地)Delphi 4 Code ChineseBorland Inc. HYPERLINK :/ xapware /ddg C+编程指南Rational Inc.2000 HYPERLINK :/ rational wwJava编程指南Rational Inc.2000 HYPERLINK :/ rational 安装盘的创建软件部开发完成的所有系统都使用Ins

28、tallshield Express 3.03来制作安装程序。为了保证快捷方式创建的一致性,现做如下规定,要求快捷方式都创建在:StartProgramsOctant Communications注册表的使用为了统一注册表的使用方式,现做如下规定,要求注册表信息都存放在:HKEY_LOCAL_MACHINESOFTWAREOctant Communications简单加密算法对于保密性要求不是很高的场合下,我们可以采用简单加密算法逐位异或算法,具体算法如下:第一个字符同自己异或作为密文的第一个字节,第二个字符同密文的第一个字节异或作为密文的第二个字节,第三个字符统密文的第二个字节异或作为密文的

29、第三个字节,依次类推;解密算法和加密算法完全一致。例子:原始字串:CDITS(43 44 49 54 53)加密过程:43 XOR 43=4344 XOR 43=0749 XOR 07=4E54 XOR 4E=1A53 XOR 1A=49密文:43 07 4E 1A 49Delphi代码编写标准通用源代码格式规则缩格缩格是指在每一级有两个空格。不要在源代码中保留tab字符,这是因为tab字符会随着不同用户的不同设置和不同的资源管理工具(打印、文档、版本控制等)而代表不同的宽度。你可以通过关闭Environment选项对话框中Editor页上的“Use tab character”和“Optim

30、al fill”检查框(通过Tools|Environment)来禁止保存tab字符。页边空格页边空格会被设置成80字符宽。通常,源码不会超出这个边界,但这个方针会有一些弹性。不管是否有可能,那些超出到另一行的语句会在一个逗号或其他操作符之后与前面的语句相连。当一个语句被打断相连时,它应比原来的那一行语句缩进两个字符。BeginEnd 配对Begin 子句应写在独立的一行。例如,下面第一行是错误的写法而第二行是正确的。for I := 0 to 10 do begin/错误,begin同for在同一行for I := 0 to 10 do/正确,begin出现在独立的一行begin这个规则的例

31、外是当begin子句的出现是作为一个else子句的一部分参考例子:if some statement thenbeginendelse beginsomeOtherStatement;end;end 语句永远出现在独立的一行。当begin语句不是一个else子句的一部分时,相应的end语句永远缩进到与begin部分相对应的位置。注释规范文件注释*版权所有 (C) 2000,2001 傲腾通讯*项目:模块:描述:版本:日期: 更新:*函数注释*功能说明:输入参数:输出参数:返回值:日期: 更新:*过程注释*功能说明:日期: 更新:*一般注释/ 对主要算法部分进行描述Object Pascal语言

32、括号永远不要在括号与括号之间的字符中间留下空格。下面的例子示范了错误的与正确地使用括号中的空格:CallProc( Aparameter );/错误CallProc(Aparameter); /正确永远不要在一个语句中使用不必要的括号。括号只应在源代码中需要的地方使用。以下的例子示范了错误和正确的使用:if (I = 42) then/错误 多余的括号if (I = 42) or (J = 42) then/正确 需要括号保留字和关键字Object Pascal 保留字和关键字永远是全部小写。过程和函数(例程)命名/格式化例程的名字永远应该以大写的字母开头并且中间错落分明以便于可读性。下面是一

33、个不正确格式的过程名称: procedure thisisapoorlyformattedroutinename;下面是一个合适的大小写例程名称的例子: procedure ThisIsMuchMoreReadableRoutineName;例程的名称应该同它的内容相符。一个会导致某个行为的例程应以动词开头。例如: procedure FormatHardDrive;一个用于设置输入参数的例程应以单词set作为前缀,例如: procedure SetUserName;一个用来接收某个值的例程应以单词get作为前缀,例如: procedure GetUserName : string;形式参数格

34、式化如果有的话,相同类型的形参应合并在一个语句中: procedure Foo(Param1, Param2, Param3 : Integer; Param4 : string);命名所有形参的名字应是十分符合它们所代表的意义,特别是应该以传送到例程中的标志符的名称为基础。一个好的参数名称应以字符A为前缀 例如: procedure SomeProc(AuserName : string; AuserAge : integer);“A”前缀按约定表示该参数的名称是与类类型中的一个属性或域的名称相对应的。参数的排序下面的形参的顺序重点说明了注册者调用约定调用的好处。 最常用的参数应放在第一位,

35、其它的参数应按从左到右的顺序排列。 输入参数列表应放在输出参数列表的左边。 将通用的参数放在特殊参数的左边,例如: procedure SomeProc(Aplanet, AContinent, Acountry, Astate, Acity) 排序有可能有些例外,比如事件的处理。类型为TObject的Sender参数经常放在第一位。常量参数当一个参数为记录型、数组类型、ShortString、或接口类型并且在例程中不被改变时,这些参数应做上常量标记。这样做会让编译器更加有效率的产生有关这些不改变的参数的代码。而例程中另外一些非变参数也可常量来传送。尽管这样做没有产生任何效果和提高效率,这将会

36、给调用例程的使用者提供更多的信息。名称的冲突当使用拥有两个名称相同的例程的两个单元时,如果你调用该例程时,在uses子句中排在后面的单元中的例程将会被调用。为了解决这种“在uses子句上的模糊”冲突,要在调用该例程时写上相关的单元的前缀,例如: sysUtile.FindClose(SR);或 windows.FindClose(Handle);变量变量的命名和格式变量的命名应以使用它们的目的相符。循环控制变量应采用一个单独的字符作为名字,比如 I,J,或K,也可以采用更加有意义的名字,比如 UserIndex。逻辑变量的名字应能充分表达准确的真或假的意思。局部变量一个过程中的局部变量应遵循所

37、有其它变量的使用和命名约定。临时变量的取名应合理。如果必须的话,在一进入例程就应初始化局部变量。局部的AnsiString变量会自动初始化为一个空的字符串。局部接口和派分接口类型变量将会自动初始化为nil,并且局部变数和ole变数类型变量会自动初始化为Unassigned全局变量的使用使用全局变量是不推荐的。但是,在某些时候还是必须使用,而且它们也只应在必须使用的时候才使用。在这种时候,你应努力只在一段上下文范围内使用全局变量。例如,一个全局变量只应在一个单元的implemntation部分内是全局的。如果打算在多个单元类使用全局数据,你应将它们移到一个公共的单元中然后被其它所有单元使用。全局

38、变量可以在var子句中直接初始化为一个值。记住,所有的全局数据会自动初始化为0,因此不要将全局变量初始化为一个“空”值比如 0、nil、Unassigned、等等。这样做的一个理由是因为零初始化的全局数据在exe文件中不会占据任何空间。零初始化数据被存储在一个虚拟的数据段,它在应用程序启动后被分配在一段内存中。非零初始化的全局数据在硬盘的exe文件占用空间。类型大写约定如果类型的名字是保留字,那么它应全部小写。Win32 API类型通常全部大写,并且你必须遵循在Windows.pas或其他API单元中的详细类型名称的约定。对于其他变量名字,地一个字母应为大写,而其他字母应错落有致。下面是一些例

39、子: var MyString : string; /保留字 WindowHandle : HWND; /Win32 API 类型 I : Integer; /在System单元中引进的类型标识符浮点指针类型不推荐使用Real类型,因为它的存在只是为了向前兼容早期的Pascal代码。在通常情况下用Double来实现浮点指针的需要。并且,Double对处理器和总线而言是做了最优化处理的,它也是IEEE中定义的标准数据格式。只有当需要的范围超出Double所定义的范围时才使用Extended。Extended是intel定义的类型且在Java中不支持。只有当浮点指针变量的实际字节大小有其意义时才使

40、用Single。(比如当使用另一种语言的DLLs时)。枚举类型枚举类型的名字需符合使用该类型的目的。该类型的名字需以字符T为前缀,以表明这是一个类型。枚举类型中的标识符列表必须包含两个或三个字符的前缀来对应于该枚举类型的名字 例如: TsongType = (stRock, stClassical, stCountry, stAlternative, stHeavyMetal, stRB);一个枚举类型的实例的名字应与不要前缀的枚举类型(SongType)相同,除非有更好的原因来赋予该变量更特殊的名字,比如:FavoriteSongType1,FavoriteSongType2 等等。变数和o

41、le变数类型通常不建议使用变数和Ole变数类型。但在只有运行时刻才能知道数据类型的程序中必须使用该类型,这种情形多出现在COM和数据库开发中。Ole变数使用在以COM为基础的编程中例如自动化和ActiveX控制,而变数使用在非COM的编程中,这是因为变数可以十分有效地存储本地Delphi字符串(同一个字符串变量一样),但Ole变数会将所有的字符串转换为Ole字符串(WideChar 字符串)并且并不实例运算 它们永远拷贝。结构类型数组类型数组类型的名字需符合它们使用的目的。该类型的名字必须加以前缀T。如果须声明该数组类型的指针,那么该指针需加以前缀P而且应立即声明在该数组声明的前面。例如: t

42、ype PCycleArray = TCycleArray; TCycleArray = array1100 of integer;在实际应用中,数组的变量实例的名称应是其类型的名字去掉前缀T。记录类型记录类型的名字应符合使用它们的目的。其类型的声明应加以前缀T。如果要声明该记录类型的指针,就应加以前缀P并且应紧靠在类型声明的前面声明。例如: type PEmployee = TEmployee; TEmployee = record EmployeeName : string; EmployeeRate : Double; end;语句if 语句在if/then/else语句中最常发生的行为

43、应放在then子句中,而其它发生可能性较小的行为应放在else子句中。尽量避免使用嵌套的if语句,在这种情形下应用多个if语句来判断各种可能。不要使用if嵌套超过五级深度。应使代码编写得更加清晰、明了。不要在if语句中使用不必要的圆括号。如果在if语句中有多个条件需测试,这些条件应按计算强度由少到多的顺序从左到右排列。这样做能使编译器在编译代码时获得布尔估算逻辑的捷径,从而使你的代码获得最佳的优化。举例来说,如果条件1快过条件2,而条件2快过条件3,那么在if语句中的排列应是: if 条件1 and 条件2 and 条件3 thencase 语句一般性话题在一个case语句中的各个独立的单元应

44、以数字或字母顺序排列。每一个case单元的动作行为应保持简单而不应该超过四到五行代码。如果所要执行的动作过于复杂应采用独立的过程或函数。Case语句中的else子句只有当需要缺省行为或处理错误时才使用。格式case语句应遵循其它结构的缩格和命名约定。while 语句在一个while语句中不建议使用exit过程来跳出循环,尽量仅使用循环条件来跳出循环。在一个while循环中所用的初始化代码应紧靠在进入while循环前面出现而不要被其它不相关的语句隔开。任何结束后的处理应在循环之后立即进行。for语句for语句只有当循环次数已知的情况下才能取代while语句使用。repeat语句repeat语句的

45、使用同while语句一样,并且遵循同样的通用方针。with语句一般话题with语句应节省使用,并且带有大量的警告。避免过度使用with语句并且在with语句中小心使用多个对象、记录等等。例如: with Record1, Record2 do这些事情会使程序员感到困惑并难以发现问题所在。格式with 语句遵循本文档所说明的命名约定和缩格的格式规则。结构异常处理一般话题异常的处理大量地使用在错误纠正和资源保护方面。这就是说一旦资源被分配,一个tryfinally必需加以使用来保证该资源被正确的释放。这种异常的保护也是指在一个单元的initializition/finalization或一个对象的

46、constructor/destructor中进行资源的分配和释放。tryfinally的使用任何情形下,每一次的分配都应跟随一个tryfinally。举例来说,下面的代码会造成可能的错误: SomeClass1 := TsomeClass.Create; SomeClass2 ;= TsomeClass.Create; try do some code finally SomeClass1.Free; SomeClass2.Free; end;一个更安全更合适的分配过程应是: SomeClass1 := TSomeClass.Create; try SomeClass2 := TsomeCl

47、ass.Create; try do some code finally SomeClass2.Free; end; finally SomeClass1.Free; end;tryexcept的使用只有当在异常被触发而你想执行一些任务时才使用tryexcept。通常,你没有必要为了只是简单地在屏幕上显示一个错误信息而使用tryexcept语句,因为这会被Application对象自动执行。如果你想在except子句中执行完一些任务之后调用缺省的异常处理,使用raise来重新触发异常到下一个句柄。tryexceptelse的使用tryexcept中的else子句不建议使用,因为它会打断所有的异

48、常包括那些你没有准备的异常。类类型命名和格式类类型的名称应符合使用它们的目的。类型名字应加以前缀T以表明这是一个类型的定义 例如:type Tcustomer = class(TObject)类型的实例通常是没有前缀T的类型的名字 例如:var Customer :Tcustomer;注意:查阅“构件类型的命名标准”来获得更多有关构件命名的信息。域命名/格式类的域名遵循与变量标识符同样的约定除了它们应以F为前缀,来表明这是一个域的名称。可视化所有的域都必需是私有的。想在类的范围之外存取域得通过属性来使用。方法命名/格式方法的命名应遵循本文档中有关过程和函数的约定叙述。使用静态的方法如果使用一个

49、静态的方法,那么该方法就不能被该类的后代类所继承。使用虚拟/动态的方法如果你打算该类的方法能被后代的类所继承就得使用虚拟的方法。只有在该方法有多个继承时(直接的或间接的)才使用动态的方法。例如,一个类类型包含一个可继承的方法,而100个后代类要继承这种方法,那么这个方法就会动态地产生为100个后代类使用的内存。使用抽象的方法如果在一个类中使用抽象的方法,该类就不能被创建。只有在那些永远不会被创建的类中使用抽象的方法。属性存取方法所有存取类的方法都只能出现在类的private或protected部分。属性存取方法的命名应遵循过程和函数的约定规则。读取存取方法(方法读取器)必需以单词Get为前缀。

50、写入存取方法(方法写入器)必需以单词Set为前缀。方法写入器的参数的名字应为Value,并且它的类型应是它所操作的属性的类型。例如: TSomeClass = class(TObject) private FsomeField : Integer; protected function GetSomeField : Integer; procedure SetSomeField(Value : Integer); public property SomeField : Integer read GetSomeField write SetSomeField; end;属性命名/格式属性如果是表

51、示为一个私有域的存取器的话,那么它的名字应是它们所操作的域的名字除去解释符F。属性的名字应是名词,不是动词。属性表示的是数据,而方法表示的是行为。数组类型的名称应为复数。一般情况下属性的名称应为单数。使用存取的方法尽管没有要求,但还是建议尽量少地为一个表示私有域的属性而使用写入存取方法。文件工程文件工程文件应取个描述性的名字。例如,Delphi 4开发者指南错误管理器 的工程名字是:DDGBugs.dpr。一个有关系统信息的程序的名字就应象 SysInfo.dpr。窗体文件一个窗体文件的取名应可以描述使用该窗体的目的,并加以后缀Frm。例如,一个“关于”的窗体的文件名应是AboutFrm.dp

52、r。主窗体的文件名应是MainFrm.dpr。数据模板文件数据模板的取名应能表示使用该数据模板的目的,它的名称应加以两个字符的后缀DM。例如,自定义数据模板的文件名字应为CustomersDM.dfm。远端数据模板文件远端数据模板的取名应能表示使用该远端数据模板的目的,它的名称应加以三个字符的后缀RDM。例如,自定义远端数据模板的文件名字应为CustomersRDM.dfm。Unit文件通用Unit结构unit的名字Unit文件应取一个可描述性的名字。例如,包含应用程序主窗体的单元应叫做MainFrm.pas。uses子句在interface部分的uses子句应包含在interface部分中的

53、代码所需要的单元。去掉那些Delphi可以自动加入到程序中的单元。在implementation部分的uses子句应只包含在implementation部分中的代码所需要的单元的名字。去掉不必要的单元。interface部分interface部分应包含只那些其它单元所需要存取类型的定义、变量、过程/函数的预定义等等。否则,就应放在implementation部分定义。implementation部分implementation部分应包含那些只在本单元中私用的类型定义、变量、过程/函数定义等等。initialization部分不要在initialization 部分放入耗时长的代码,这将使程序的

54、第一个界面出现得比较缓慢。finalization部分在这里要保证释放你在Initialization部分所分配的任何资源。窗体单元一个窗体的单元文件应拥有与它所对应的窗体文件同样的名称。例如,“关于”窗体的单元名称应为 AboutFrm.pas,而主窗体的单元名称应为MainFrm.pas。数据模板单元一个数据模板的单元文件应拥有与它所对应的数据模板文件同样的名称。例如,一个自定义数据模板单元的名称应为CustomersDM.pas。一般目的单元一般目的单元的取名应符合使用该单元的目的。例如,一个实用程序单元取名为BugUtilities.pas。一个包含全局变量的单元取名为Customer

55、Globals.pas。注意,该单元的名字不能与它的工程中所使用的所有包中的单元的名字相同。不赞成使用一般的或通用的单元名字。构件单元构件单元应放在独立的目录,以将它们同定义构件组或构件集合的单元区分开来。它们要永远同工程在不同的目录。单元名字应同它们的内容相符。注意:查阅“用户定义的构件”部分来获得更多有关构件命名标准的信息。窗体和数据模板窗体窗体类型命名标准窗体类型的取名应能表达使用该窗体的目的。类型定义应加以前缀T。前缀后面跟随着描述性的名字。最后,应加以Form后缀来描述名字。例如,一个“关于”的窗体的类型的名字应为: TAboutFrom = class(TForm);主窗体的定义为

56、: TMainForm = class(TForm);一个用户接入窗体的名字应象: TCustomerEntryForm = class(TForm);窗体实例命名标准窗体实例应是没有带前缀T的相应类的名字。例如,对应于前面窗体类型而言,其实例的名字应为: 类型名称实例名称 TAboutForm AboutForm TMainFormMainForm TCustomerEntryFormCustomerEntryForm自动创建窗体只有主窗体可以是自动创建的除非有其它更好的理由不这样做。所有其它的窗体必需从工程选项对话框中的自动创建列表中移走。查阅以下部分来获得更多的信息。模式窗体实例化函数所

57、有的窗体单元都应包含一个窗体实例化函数,该函数用来创建、设置、模式地显示窗体,并释放窗体。该函数应返回窗体的模式结果。该函数要传递的参数应遵循本文档指定的“参数传递”标准。通过这种方式封装的函数性有助于代码的再利用和维护。该窗体的变量要从单元中移走,并再窗体实例的函数中进行本地式地定义。注意,这就意味着该窗体必需从工程/选项对话框中的自动创建列表中剔除。参考本文档后面的“自动创建窗体”。例如,下面的单元展示了再GetUserData窗体中的一个函数。 unit UserDataFrm; interface useswindows, Messages, SysUtils, Classes, Gr

58、aphics, Controls, Forms,Dialogs, StdCtrls; type TUserDataForm = class(TForm) edtUserName : TEdit; edtUserID : TEdit; private Private declarations public Public declarations end; function GetUserData(var aUserName : String; var aUserID : Integer) : Word; implementation $R *.DFM function GetUserData(v

59、ar aUserName : String; var aUserID : Integer) : word; var UserDataForm : TuserDataForm; begin UserDataForm := TuserDataForm.Create(Application); try UserDataForm.Caption := Getting User Data; Result := UserDataForm.ShowModal; if (Result = mrOK) then begin aUserName := UserDataForm.edtUserName.Text;

60、aUserID := StrToInt(UserDataForm.edtUserID.Text); end; finally UserDataForm.Free; end; end; end.数据模板数据模板命名标准数据模板的取名要符合使用该数据模板的目的。类型的定义应加以前缀T,后面紧接着描述性的名字,最后要加以后缀单词“DataModule”。例如,一个自定义的数据模板有时候应该象: TCustomerDataModule = class(TDataModule)一个命令式的数据模板的名字应象: TOrdersDataModule = class(TDataModule)数据模板实例命名标

温馨提示

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

评论

0/150

提交评论