Delphi命名规范.docx

上传人:b****4 文档编号:11396491 上传时间:2023-05-31 格式:DOCX 页数:17 大小:23.16KB
下载 相关 举报
Delphi命名规范.docx_第1页
第1页 / 共17页
Delphi命名规范.docx_第2页
第2页 / 共17页
Delphi命名规范.docx_第3页
第3页 / 共17页
Delphi命名规范.docx_第4页
第4页 / 共17页
Delphi命名规范.docx_第5页
第5页 / 共17页
Delphi命名规范.docx_第6页
第6页 / 共17页
Delphi命名规范.docx_第7页
第7页 / 共17页
Delphi命名规范.docx_第8页
第8页 / 共17页
Delphi命名规范.docx_第9页
第9页 / 共17页
Delphi命名规范.docx_第10页
第10页 / 共17页
Delphi命名规范.docx_第11页
第11页 / 共17页
Delphi命名规范.docx_第12页
第12页 / 共17页
Delphi命名规范.docx_第13页
第13页 / 共17页
Delphi命名规范.docx_第14页
第14页 / 共17页
Delphi命名规范.docx_第15页
第15页 / 共17页
Delphi命名规范.docx_第16页
第16页 / 共17页
Delphi命名规范.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Delphi命名规范.docx

《Delphi命名规范.docx》由会员分享,可在线阅读,更多相关《Delphi命名规范.docx(17页珍藏版)》请在冰点文库上搜索。

Delphi命名规范.docx

Delphi命名规范

目录

版本记录1

文档信息1

修订历史记录1

1、前言3

2、命名规范3

2.1、过程(Procedure)与函数(Function)3

2.1.1、命名3

2.1.2、形参3

2.1.3、命名冲突4

2.2、常量(Constants)和变量(Variable)4

2.2.1、常量4

2.2.2、变量4

2.3、类型(Type)6

2.3.1、一般类型6

2.3.2、构造类型6

2.3.3、类类型(Class)7

2.3.4、元件类型9

2.3.5、窗体与对话框类型11

2.3.6、数据模块类型14

2.4、文件15

2.4.1、项目文件(.dpr)15

2.4.2、窗体文件(.dfm)15

2.4.3、数据模块文件15

2.4.4、远程数据模块文件15

2.4.5、单元文件(.pas)16

2.4.6、包文件(.dpk)18

1、前言

本文档主要是为Delphi开发人员提供一个源代码书写标准,以及程序和文件的命名标准,使他们在编程时有一致格式可遵循。

这样,每个编程人员编写的代码能够被其他人理解。

2、命名规范

2.1、过程(Procedure)与函数(Function)

2.1.1、命名

过程与函数名应当有意义。

进行一个动作的过程最好在名称前加上表示动作的动词为前缀。

例如:

procedureFormatHardDrive;

设置输入参数值的过程名应当以Set为其前缀,例如:

procedureSetUserName;

获取数值的过程名应当以Get为其前缀,例如:

functionGetUserName:

string;

2.1.2、形参

所有形参的名称都应当表达出它的用途。

如果合适的话,形参的名称最好以字母a为前缀,例如:

procedureSomeProc(aUserName:

string;aUserAge:

integer);

当参数名与类的特性或字段同名时,前缀a就有必要了。

2.1.3、命名冲突

当两个单元中含有相同名称的过程时,如果调用该过程,实际被调用的是Uses子句中较后出现的那个单元中的过程。

为避免这种情况,可在方法名前加想要的单元名,例如:

SysUtils.FindClose(SR);

或Windows.FindClose(Handle);

2.2、常量(Constants)和变量(Variable)

2.2.1、常量

常量的名称应当能够表达出它的用途,一般以类型名开头,示范:

I_Sex_Male=0;//用0来表示男

S_Sex_Male='男';

I_Sex_Female=1;//用1来表示女

S_Sex_Femal='女';

2.2.2、变量

变量的名称应当能够表达出它的用途。

2.2.2.1、局部变量

(1)、规则1:

v前缀

当变量对应数据库字段值时,应在变量名前加小写的v来做前缀。

比如:

姓名字段,字段名为Name,年龄字段,字段名为Age

采用规则1时定义为:

vName:

string;

vAge:

Integer;

(2)、规则2:

类型变量

一般情况下,命名变量名时,应用变量类型的缩写作为命名的前缀加上变量有一定的含义的字符串组成整个变量的名称:

字符串类型变量采用Str前缀加上变量名,如:

StrSql、StrFile、StrName、StrTemp;

数值型的用I作为前缀加上变量名,如:

ICount;

浮点型的用F作为前缀加上变量名,如:

FNumber;

布尔变量名用B作为前缀,并需要能清楚表示出True和False值的意义,如:

BNeedUpdate;

其他类型采用相应类型首字母作为前缀,如有重复则采用前3位作为前缀,并且首字母大写。

(3)、规则3:

循环控制变量

当循环控制变量较少且不存在嵌套循环时,为了时循环代码比较简洁,通常使用单个小写字母,诸如i,j,k;当循环变量比较多时单个字母作为循环控制变量容易使循环控制混淆,降低代码可读性,这时应该用具有实际意义的名称,并采用规则2的写法,例如IUserIndex等。

2.2.2.2、全局变量

全局变量一般以小写的g为前缀,并遵循其他变量的命名规则,不鼓励使用全局变量,如果使用要使用全局变量时,全局变量的数量不能超过10个。

2.3、类型(Type)

2.3.1、一般类型

(1)、枚举型

枚举类型名必须代表枚举的用途。

名称前要加T字符作为前缀,表示这是个数据类型。

枚举类型的标识符列表的前缀应包含2-3个小写字符,来彼此关联。

例如:

TSongType=(stRock,stClassical,stCountry,stAlternative,stHeavyMetal,stRB);

枚举类型的变量实例的名称与类型相同,但没有前缀T,也可以给变量一个更加特殊名称,诸如:

FavoriteSongTypel、FavoriteSongType2等等。

2.3.2、构造类型

2.3.2.1、数组类型

数组类型名应表达出该数组的用途。

类型名必须加字母“T”为前缀。

如果要声明一个指向数组类型的指针,则必须加字母P为前缀,且声明在类型声明之前。

例如:

type

PCycleArray=^TCycleArray;

TCycleArray=array[1..100]ofinteger;

实际上,数组类型的变量实例与类型名称相同,但没有“T”前缀。

2.3.2.1、记录类型

记录类型名应表达出记录的用途。

类型名必须加字母T为前缀。

如果要声明一个指向记录类型的指计,则必须加字母P为前缀,且其声明在类型声明之前。

例如:

type

PEmployee=^TEmployee;

TEmployee=record

EmployeeName:

string;

EmployeeRate:

Double;

end;

2.3.3、类类型(Class)

2.3.3.1、命名与格式

类的名称应当表达出类的用途。

一般的类名前要加字母“T”,如果是接口类那么类名前要加“I”,错误异常类的类名前要加“E”,而类引用类型(Class-referencetype)则要在类名后加“Class”,抽象类一般是在类名前还要加“Custom”。

例如:

type

TCustomCipher=class(TObject);

TCipher=class(TCustomCipher);

ICipher=interface;

TCipherClass=classofTCustomer

ECipherException=class(Exception);

类的实例名称通常与类名相同,只不过没有前缀“T”。

var

Customer:

TCustomer;

注意:

关于元件的命名,请参阅“元件类型”。

2.3.3.2、字段

(1)命名与格式

字段的名称应当能够表达出它的用途,并且要加前缀F,表示这是字段。

(2)可见性

所有字段必须为私有。

如果要在类的作用域之外访问字段,可借助于类的属性来实现。

2.3.3.3、方法

(1)命名与格式

方法的命名遵循与过程和函数相同的规则。

(2)静态方法

当你不希望一个方法被派生类覆盖时,应当使用静态方法。

(3)虚拟方法(virtual)与动态方法(dynamic)

当你希望一个方法能被派生类覆盖,应当使用虚拟方法(virtual)。

如果类的方法要被多个派生类直接或间接地使用,则应当用动态方法(dynamic)。

例如,某一个类含有一个被频繁覆盖的方法,并有100个派生类,则应将方法定义为动态的,这样可以减少内存的开销。

(4)抽象方法(abstract)

如果一个类要创建实例,则不要使用抽象方法。

抽象方法只能在那些从不创建实例的基类中使用。

(5)属性访问方法

所有属性访问方法应当定义在类的私有或保护部分。

属性访问方法遵循与过程和函数相同的规则。

用于读的方法应当加“Get”前缀,用于写的方法应当加“Set”前缀,并且有一个叫Value的参数,其类型与属性的类型相同。

例如:

TSomeClass=class(TObject)

private

FSomeField:

Integer;

protected

functionGetSomeField:

Integer;

procedureSetSomeField(Value:

Integer);

public

propertySomeField:

IntegerreadGetSomeFieldwriteSetSomeField;

end;

尽管不是必须,但还是建议你使用写访问方法来访问代表私有字段属性。

2.3.3.4、属性

属性作为私有字段的访问器,遵循与字段相同的命名规则,只不过没有F前缀。

属性名应为名词,而不是动词。

属性是数据,而方法是动作。

数组属性名应当是复数,而一般的属性应当是单数。

2.3.4、元件类型

2.3.4.1、元件类型的命名标准

元件的命名与类的命名类似,只不过当它与其它元件名称冲突时,你可以加上3个字符的前缀,用以标识公司、个人或其他实体。

例如,一个时钟元件可以这样声明:

TddgClock=class(TComponent)

注意,作为前缀的3个字符要小写。

2.3.4.2、元件实例的命名规则

元件实例的名称应当能够描述其实际意义,这里命名规则使用了一个变更的匈牙利前缀命名规范。

使用前缀而不使用后缀的原因是在搜寻时,在对象检查器和代码探索器中搜寻构件的名字比搜寻构件的类型更容易。

在这个标准中,元件实例名包括两个部分:

前缀和性质标识名。

(1).元件的前缀

元件的前缀多是表现元件类型的字母缩写。

参见下面表中的元件前缀:

元件类名

元件前缀

TActionList,TAction表示动作的列表项

act

TButton按钮类

btn

TBitBtn按钮类

btn、bbtn

TSpeedButton按钮类

sb

TCheckBox,TDBCheckBox等所有的检查框

chk、cb

TRadioButton单选按钮类

rdo、rb

TToolBar工具条

tb

TMainMenu所有的主菜单类

mm

TMainMenuItem所有的菜单项类

mi

TPopupMenu所有的弹出式菜单类

pm

TPopupMenuItem所有的弹出式菜单项类

pmi

TLabel,TStaticText等所有用来显示的标签类

lbl、lb

TPanel等所有的面板类

pnl、p

TPageControl等所有的页式控件类

pgc、pc

TEdit,TMaskEdit等所有的单行编辑框类

edt

TMemo,TRichEdit等所有的多行编辑框类

mmo、mm

TDrawGrid,TStringGrid等所有的网格类

grd、g

TAnimate等所有的动画类

ani

TImageList等所有的图片列表类

il

TImage等图片类

img

TChart图表类

cht

TComboBox,TDBComboBox等所有的下拉式列表框类

cbo、cbb

TListBox,TDBList等所有的列表框类

lst、lb

TTreeView

tv

TListView

lv

THotKey

hk

TSplitter等所有的分隔符类

spt

TOpenDialog等所有的对话框元件类

dlg

TTable等所有的数据表类

tbl

TQuery、TAdoQuery等所有的SQL查询类元件

qry、Qry

TClientDataSet所有的客户数据集元件

cds

TDataSource

ds

TDatabase

db

TSockConnection,TDCOMConnection等连接元件类

con

TQuickRep,TFastReport等所有的报表元件类

rpt

TDDEClientConv,TDDEClientItem等所有的DDE元件类

dde

TMonthCalendar等所有的日历类

cal

TDateTimePicker类控件

d

TGroupBox等控件类

grp、gb

TForm窗体类

Frm

TFrame类

Fram

(2).元件性质标识名

元件性质标识名是元件意图的描述。

例如,一个用于关闭窗体的TButton元件实例可命名为btnClose。

一个编辑姓名的元件实例可命名为edtName。

2.3.5、窗体与对话框类型

2.3.5.1、窗体类型的命名标准

窗体或对话框类型的名称应当表达出窗体的用途,如果是窗体要加“TFrm”前缀,后跟描述性名。

例如,About窗体类型名称为:

TFrmAbout=class(TForm)

主窗体的类型名称为:

TFrmMain=class(TForm)

客户登录窗体的类型名称为:

TFrmCustomerEntry=class(TForm)

登陆对话框的类型名称为:

TFrmLogin=class(TForm)

2.3.5.2、窗体实例的命名标准

窗体实例的名称与相应的类型名称相同,但没有前缀T。

使用前缀法命名窗体和对话框的好处在于可以在ObjectInspector(属性观察器)中快速找到需要的元件类型。

例如,前面提到的窗体类型与实例的名称为:

类型名(窗口名)

实例名

对应的源文件名

TFmAbout

FmAbout

uFrmAbout.pas

TFrmMain

FrmMain

uFrmMain.pas

TFrmCustomerEntry

FrmCustomerEntry

uFrmCustomerEntry.pas

TFrmLogin

FrmLogin

uFrmLogin.pas

2.3.5.3、自动创建的窗体

除非特别原因,只有主窗体才自动生成。

其他所有窗体必须从ProjectOptions对话框的自动生成列表中删除。

更进一步信息,请参阅后面几节。

2.3.5.4、模式窗体实例化函数

所有窗体单元都应当含有实例化函数,用于创建、设置、模式显示和释放窗体。

这个函数将返回由窗体返回的模式结果。

传递给这个函数的参数遵循参数传递的规则。

之所以要这样封装,是为了便于代码的重用和维护。

窗体的变量应当从单元中移走,改在窗体实例化函数中作为局部变量定义(注意,要求从ProjectOptions对话框的自动生成列表中移走该窗体。

请看前面的内容。

例如,下面的单元文件演示了GetUserData的实例化函数。

UnituFrmUserData;//文件名命名

Interface

Uses

Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,

Dialogs,StdCtrls;

Type

TFrmUserData=class(TForm)//窗口名命名

edtUserName:

TEdit;

edtUserID:

TEdit;

private

{Privatedeclarations}

public

{Publicdeclarations}

end;

functionGetUserData(varaUserName:

String;varaUserID:

Integer):

Word;

implementation

{$R*.DFM}

functionGetUserData(varaUserName:

String;varaUserID:

Integer):

Word;

varFrmUserData:

TFrmUserData;//窗口变量名

begin

FrmUserData:

=TFrmUserData.Create(Application);

try

FrmUserData.Caption:

='GettingUserData';

Result:

=FrmUserData.ShowModal;

ifResult=mrOKthen

begin

aUserName:

=FrmUserData.edtUserName.Text;

aUserID:

=StrToInt(FrmUserData.edtUserID.Text);

end;

finally

FrmUserData.Free;

end;

end;

End.

2.3.5.5、窗体框架与复合窗体

如果一个窗体结构过于复杂,就必须将其分化成为一个主窗体框架以及嵌入到主窗体框架的若干子窗体框架。

使用窗体框架,主要是为了解决界面和代码复用问题,以及提高单元代码的内聚力(划分后,每一个窗体框架为一个独立单元),从而提高软件工程质量。

你必须提炼出界面关联代码(可复用的)和应用关联代码(不能复用的)。

TFrame类的命名方法和TForm类似。

框架窗体类名(TFrame)

实例名

对应的源文件名

TFamAbout

FramAbout

uFramAbout.pas

TFramCustomerEntry

FramCustomerEntry

uFramCustomerEntry.pas

TFramLogin

FramLogin

uFramLogin.pas

2.3.6、数据模块类型

2.3.6.1、数据模块的命名标准

数据模块类型名称应表达出它的用途,且要加前缀“Tdm”,后跟描述性名称。

例如,Customer数据模块的类型名称为:

TdmCustomer=class(TDataModule)

Orders数据模块的类型名称为:

TdmOrder=class(TDataModule)

2.3.6.2、数据模块实例的命名标准

数据模块实例的名称应当与相应的类型名称相同,但没有前缀T。

例如,前面的数据模块类型、实例名称如下:

类型名称

实例名

对应源文件名

TdmCustomer

dmCustomer

udmCustomer.pas

TdmOrder

dmOrder

udmOrder.pas

2.4、文件

2.4.1、项目文件(.dpr)

项目文件的名称应当具有描述意义。

例如,“TheDelphi5Developer’sGuideBugManager”的项目名称为DDGBugs.dpr,一个系统信息程序的名称为SysInfo.dpr。

2.4.2、窗体文件(.dfm)

窗体文件的名称应该和窗体类名保持一致,只不过,把窗体的类型名改成小写的u就行了。

例如,About窗体的文件名叫uFrmAbout.dfm,单元名为uFrmAbout.pas。

主窗体的窗体文件名叫uFrmMain.dfm,单元名为uFrmMain.pas。

2.4.3、数据模块文件

数据模块文件的命名规则和窗体文件的命名规则一致,例如,Customers数据模块的文件名叫udmCustomers.dfm,单元名为udmCustomers.pas。

2.4.4、远程数据模块文件

远程数据模块文件的名称的命名规则和窗体文件命名规则一致。

例如,Customers远程数据模块的文件叫urdmCustomers.dfm,单元名为urdmCustomers.pas。

2.4.5、单元文件(.pas)

2.4.5.1、普通单元

(1)单元名

单元的名称应当有描述性。

例如,应用程序的主窗体单元叫uFrmMaim.pas。

(2)Uses子句

Interface部分的Uses子句应当只包含该部分需要的单元。

不要包含可能由Delphi自动添加的单元名。

Implementation部分的Uses子句应当只包含该部分需要的单元,不要有多余的单元。

(3)Interface部分

Interface部分应当只包含需要被外部单元访问的类型、变量、过程与函数的声明。

而且,这些声明应当在Implementation部分之前。

(4)Implementation部分

Implementation部分包括本单元私有的类型、变量、过程与函数的实现。

(5)Initialization部分

不要在Initialization部分放置花费时间很多的代码。

否则,将导致应用程序启动时显得很慢。

(6)Finalization部分

确保释放所有在Initialization部分中分配的资源。

2.4.5.2、窗体单元

窗体单元文件的名称与相应的窗体名称相同,窗体单元和窗体文件只是后缀名不通。

例如,About窗体的单元名称叫uFrmAbout.pas。

主窗体的单元文件名称叫uFrmMain.pas。

2.4.5.3、数据模块单元

数据模块单元文件的名称与相应的数据模块名称相同,数据模块单元和数据模块文件只是后缀名不通。

例如,数据模块单元的名称叫udmCustomers.pas。

2.4.5.4、通用单元

通用单元是用于存放函数库,一般类型,或常量而非元件的单元。

通用单元的名称应当表达出它的用途,名称前要加“u”前缀。

例如,一个实用调试工具单元的名称叫uDebugUtilities.pas,包含全局变量的单元名称叫uCustomerGlobals.pas。

注意,一个项目中单元名称必须是唯一的。

通用单元名不能重名。

2.4.5.5、元件单元

(1).命名

元件单元应放在单独的路径中,以表明它们是定义元件的单元。

它们一般与项目不放在同一路径下。

单元文件名称应表达出其内容。

注意,有关元件命名标准的更多信息,请参阅“元件类型的命名标准”。

元件单元只能含有一个主要元件,这是指出现在元件选项板上的元件。

其他辅助性的元件或对象也可以包含在同一单元中。

(2).注册单元

元件的注册过程应当从元件单元中移走,放在一个单独的单元中。

这个注册单元用于注册所有元件、属性编辑器、元件编辑器、向导等。

元件注册应当在设计期包中进行。

因此,注册单元应当包含在设计期包而不是运行期包中。

建议注册单元这样命名:

xxxReg.pas

其中,xxx字符前缀,以标识元件包名称或公司、个人、其他实体。

例如,注册单元命名为xxxReg.pas。

2.4.6、包文件(.dpk)

2.4.6.1、运行期包与设计期包

运行期包中应当只包含所需要的单元。

那些属性编辑器和元件编辑器的单元应当放在设计期包中。

注册单元也应当放在设计期包中。

2.4.6.2、文件命名标准

(1)、与控件开发相关的包

命名名遵循下列模式:

dcliiiDescvvCn.pkg—设计期包

iiiDescvvCn.pkg—运行期包

其中,iii代表一个2-3字符的前缀,用于标识公司、个人或其他需要标识的事情,也可不要;Desc表示该控件包的简短描述;vv代表包的版本号,你可以根据需要取舍;前缀“dcl”表示设计期包,没有该前缀表示运行期包;字母“Cn”表示编译器类型与编译器版本号,如:

Delphi5=D5,Delphi7=D7...。

注意包名称中的lib或std分别表示这是设计期包还是运行期包。

例如:

dclrbStd

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 成人教育 > 远程网络教育

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2