程序设计规范Delphi.docx
《程序设计规范Delphi.docx》由会员分享,可在线阅读,更多相关《程序设计规范Delphi.docx(29页珍藏版)》请在冰点文库上搜索。
程序设计规范Delphi
程序设计规范(Delphi)
1.概述:
1.1.编写目的
本规范规定了YUNTONG-TECH程序在编写过程中涉及到的程序文件和编码风格。
本规范以Delphi语言为标准制定,使用其它编程语言的编码风格和规范在相关的文档中规定。
1.2.参考资料
(1)程序员指南,MicrosoftPress
(2)Windows界面应用程序设计指南,MicrosoftPress
(3)Delphi5开发人员指南,机械工业出版社
(4)程序设计规范VB,聂俊华,北航十四系
2.程序文件
1.1.项目文件的组织
在Delphi中,按照项目为单位来组织程序文件。
在一个典型的项目中包括:
(1)项目文件(.DRP文件)含有工程主程序的Pascal源代码;
(2)单元文件(.PAS文件)项目中每个窗体的Pascal源文件,包含该窗体的所有声明和过程(包括时间处理过程);
(3)窗体文件(.DFM文件)含有一个窗体的设计属性的二进制文件,每个窗体的.DFM文件与.PAS文件相互对应;
(4)资源文件(.RES文件)编译的二进制资源文件,被链接到应用程序的可执行文件中;
(5)项目选项文件(.DOF文件)存储了Project|Options菜单命令所设置的项目选项;
(6)桌面设置文件(.DSK文件)存储了Tools|Options菜单命令所设置的桌面选项;
(7)包文件(.DPK/.BPL文件)用于共享组件、类、数据和代码的文件。
源文件为.DPK文件,编译后为.BPL文件;每个软件项目应使用独立的目录,软件项目下的不同类别文件、不同模块分设子目录。
以下给出软件项目及软件模块中,设置子目录名称的规范:
子目录说明
\Bin建立产品的工作目录,存放项目中所有可执行文件的当前版本。
\Lib与项目有关的库文件。
\Man包括项目的所有外部文档。
包括手册、帮助文件、其他在线文档、README文件以及其他将和产品一起发放到用户手中的文档。
\SQL存放数据库的SQL文件(只针对数据库程序的开发)。
\Res包括应用程序的所有共享资源,如ICON(图表)、资源文件、Bitmap等。
\Include公用的窗体或Unit。
\Control存放项目内用的自编或第三方提供的控件。
\Source程序源代码\Public可以公用的模块或程序。
本规范在以下的各小节中具体说明Delphi两种文件类型.PAS和.DFM在程序文件中的相关内容要求。
1.2.常量定义
内容:
l逻辑值的定义;
l常数值的定义;
l错误码的定义;
格式:
一个定义占一行。
如下:
Const<常量>:
类型=值;//注释
说明:
使用Const语句来声明用于代替文字值的常数。
示例:
ConstC_SQL:
string='selectCH_USERER_IDfromT_CD_USER';//查询用户ID
ConstC_PI:
real=3.1415926;//圆周率
1.3.结构类型定义
内容:
结构类型定义
格式:
Type
<类型名>//结构说明注释
<变量名1>:
变量类型;//变量说明注释
<变量名2>:
变量类型;//变量说明注释
…
End;
说明:
<类型名>是以大写字母开头的字符串。
结构定义中定义变量类型的语句从第二行第五列开始。
示例:
type
TableList=record//系统树单元类型定义
InID:
integer;//单元编号
Name:
string;//单元名称
PID:
string;//上一级单元名称
PT:
PTableList;//指向下一单元类型的指针
end;
3.程序风格
程序风格规定了每个语句的定位规则及程序中的注释。
1.1.函数(Function)/过程(Procedure)风格
Name(变量:
变量类型[,…]);//函数/过程说明
Var
变量1:
变量类型;//变量说明
变量2:
变量类型;//变量说明
…
Begin
语句;
语句;
…
End;
注:
变量声明、语句均从第三列写起,如有缩进,每次缩进两列,并与相对应语句对齐。
1.2.语句风格
说明:
l在程序体中通常最多每十行有一个段落功能说明;
l规范使用各种语句;
l语句中有缩进是以二列为单位。
1.2.1.变量定义语句
Var
var_name:
<数据类型>;
1.2.2.赋值语句
var_name:
=<表达式>;
1.2.3.条件语句
If条件Then//注释
Begin
语句;
…
End;
ElseIf条件Then//注释
Begin
语句;
...
End
Else//注释
语句;
注:
如果执行语句只有一句,可省略Begin、End语句。
1.2.4.循环语句
l//循环功能注释
Forcounter:
=startToendDo
Begin
[语句];
…
End;
l//循环功能注释
While[condition]Do
Begin
[语句];
…
End;
l//循环功能注释
Repeat
[语句];
….
Until[condition]
1.2.5.开关语句
//开关功能说明
Case<表达示>Of
<值1>:
[语句1];
<值2>:
[语句2];
…
<值n>:
[语句n]
End;
1.3.注释行
在程序代码单元文件顶端必须拥有本单元文件“模块说明”及“单元说明”注释。
对于常量、结构类型、函数/过程、自定义变量、代码段功能块、关键语句等有含义的代码部分,必须有注释行进行详细说明。
注释行可在需说明部分行后以“//XXXXXXXX”方式添加,也可在需说明部分行上以“{XXXXXXXXXX}”方式添加多行或以“//XXXXXX”方式添加一行。
4.变量名命名规则
命名包括对程序中文件、变量(包括控件等对象)、常量、过程和函数等程序对象的命名。
本公司命名以匈牙利规则为参考,采用“限制+类型+名称”的命名方式。
l限制是指变量与常量的区分和对作用域的确定,默认为变量和局部对象。
对于常量要特
指出,对于非局部变量,要表明其使用范围,如全局或模块级。
l类型以缩写表明该程序对象的类型,如32位有符号整数类型和列表框控件类型。
l名称为对象的具体含义,要准确表达其用途,而不要使用与变量所代表的实体没有任何
系的名字,以英文、英文缩写组合给出;名称的书写采用大小写结合的方式,如CaseCount表示事件计数、DeleteUser表示删除人员等。
命名不宜过短,也不宜过长,除去限制和类型外,以8~15为好。
过短的命名往往不能准确描述用意,如nCount命名含义太不明确,可以是雇员的计数,也可以是找到的文件的计数,而命名为nEmployeeCount和nFileCount将更有助于记忆和理解;过长的命名如recLoginUserInformation又显得冗长,改为recLoginUserInfor或recLoginUserInfo则会在不损失含义的情况下减少输入量,换言之,改动后的命名更合适。
命名中恰当使用反意词,可以提高可读性,下面是一些常用的容易理解的词对:
Add/RemoveBegin/EndCreate/Destroy
Insert/DeleteFirst/LastGet/Release
Get/SetGet/PutIncrement/Decrement
Lock/UnlockMin/MaxNext/Previous
Next/PriorOld/NewOpen/Close
Show/HideSource/DestinationSource/Target
Start/StopWrite/Read
记住一些常见布尔型变量的命名,对规范化的实施也会有不少帮助,如Done、Error、Found、Success、Ready等
命名中的特例之一是单层循环的循环变量,使用i、j、k、l、m命名,简捷明快;当循环为多层时,各层的循环变量应尽可能命以有意义的名称,以避免使用时由于输入而产生的逻辑错误,尤其是在访问多维数组变量时,这种作法可以大大减少因数组下标指定失误引发的程序逻辑失败的机率,如将Cells[i,j]误作Cells[j,i],而Cells[nRow,nCol]就不易误为Cells[nCol,nRow]。
以下定义Delphi中的变量命名规则:
1.1.变量命名
1.1.1.简单变量命名
类型缩写含义
BooleanbBoolean变量
ByteBoolbbBooleanByte变量
WordBoolbwBooleanWord变量
LongBoolblBooleanLong变量
IntegernNumber变量
ShortIntntNumberTiny变量
SmallIntnsNumberShort变量
LongIntnlNumberLong变量
Int64neNumberExtended变量
CompneNumberExtended变量
ByteuntUnsignedNumberTiny变量
WordunsUnsignedNumberShort变量
LongWordunlUnsignedNumberLong变量
RealfFloat变量
SinglefsFloatSingle变量
DoublefdFloatDouble变量
ExtendedfeFloatExtended变量
CharcChar变量
AnsiCharcaCharAnsi变量
WideCharcwCharWide变量
StringsString变量
ShortStringssStringShort变量
AnsiStringsaStringAnsi变量
WideStringswStringWide变量
VariantvVariant变量
EnumerateeEnumerate变量
PointerpPointer变量
1.1.2.结构型变量命名
类型缩写含义
ArrayaArray
SetmMass
RecordrRecord
ClassoObject
1.1.3.复合变量命名
命名中有些缩写词是基础类型缩写,而另有一些是类型限定词,如u代表Unsigned和a代表Array。
整体缩写采用从右至左的分析方式,举例如下:
lBoolean数组命名为abXXXX
l单精度附点数数组命名为afsXXXX
l结构数组命名为arXXXX
l枚举数组命名为aeXXXX
l指针数组命名为apXXXX
l字符集合命名为mcXXXX
l32位整数集合数组命名为amnXXXX
l结构指针命名为prXXXX
lPChar命名为pszXXXX
lPChar数组命名为apszXXXX
1.1.4.命名中限制的法则
l全局冠以g_
l模块级冠以m_
l常量以C_开始
l全局常量以gC_开头,模块级常量则mC_
1.1.5.其它命名
l类型的命名采用Delphi通用的TXxxxYyyyZzzz形式
l枚举型变量的元素命名为以小写的类型英文名字母缩写开始,如TFontStyle=(fsBold,fsItalic,...)
l类型常量命名为C_类型缩写_XxxxYyyy形式,无类型常量命名为C_含义或分组名_XxxxYyyy。
其中XxxxYyyy要描述常量含义,可以归为一类的常量;有时Xxxx说明分组含义,而Yyyy为常量含义,如C_FontSizeBig=20,C_FontSizeNormal=12,C_FontSizeSmall=8。
举例:
C_as_FileNames:
array[0..2]ofstring=(‘C:
\AUTOEXEC.BAT’,‘C:
\CONFIG.SYS’,‘C:
\IO.SYS)和gC_MaxUsers=500分别定义了“局部一维字符串数组常量”和“全局常数”。
1.2.文件及窗体命名
含义类名命名格式
工程文件Program(.DPR)XXXX_P
单元Unit(PAS)XXXX_U
窗体Form.Name(.DFM)XXXX_F
数据模块DataModuleXXXX_DM
1.3.控件命名
1.3.1.Standard页控件
类名命名格式
TMainMenummnuXXXX
TPopupMenupmnuXXXX
TLabellblXXXX
TEditedtXXXX
TMemommoXXXX
TButtonbtnXXXX
TCheckBoxchkXXXX
TRadioButtonrdbtXXXX
TListBoxlbxXXXX
TComboBoxcbxXXXX
TScrollBarscbrXXXX
TGroupBoxgbxXXXX
TRadioGrouprgpXXXX
TPanelpnlXXXX
TActionListactsXXXX
1.3.2.Additional页控件
类名命名格式
TBitBtnbtbtXXXX
TSpeedButtonspbtXXXX
TMaskEditmedtXXXX
TStringGridsgrdXXXX
TDrawGriddgrdXXXX
TImageimgsXXXX
TShapeshpXXXX
TBevelbvlXXXX
TScrollBoxscbxXXXX
TCheckListBoxchksXXXX
TSplitterspltXXXX
TStaticTextstxtXXXX
TControlBarctbrXXXX
TChartchtXXXX
1.3.3.Win32页控件
类名命名格式
TTabControltctlXXXX
TPageControlpctlXXXX
TImageListimgsXXXX
TRichEditredtXXXX
TTrackBartkbrXXXX
TProgressBarpgbrXXXX
TUpDownupdnXXXX
THotKeyhtkXXXX
TAnimateanmtXXXX
TDateTimePickerdtpXXXX
TMonthCalendarmcldXXXX
TTreeViewtvwXXXX
TListViewlvwXXXX
THeaderControlhctlXXXXTStatusBarstbrXXXX
TToolBartlbrXXXX
TCoolBarclbrXXXX
TPageScrollerpsclXXXX
1.3.4.System页控件
类名命名格式
TTimertmrXXXX
TPaintBoxptbxXXXX
TMediaPlayermplrXXXX
TOLEContainerolectXXXX
TDDEClientConvddeccXXXX
TDDEClientItemddeciXXXX
TDDEServerConvddescXXXX
TDDEServerItemddesiXXXX
1.3.5.Internet页控件
类名命名格式
TClientSocketXxxxClientSocket
TServerSocketXxxxServerSocket
TWebDispatcherXxxxWebDispatcher
TPageProducerXxxxPageProducer
TQueryTableProducerXxxxQTProducer
TDataSetTableProceducerXxxxDSTProducer
TDataSetPageProceducerXxxxDSPProducer
TNMDayTimeXxxxNMDayTime
TNMEchoXxxxNMEcho
TNMFingerXxxxNMFinger
TNMFTPXxxxNMFTP
TNMHTTPXxxxNMHTTP
TNMMsgXxxxNMMsg
TNMMSGServXxxxNMMsgServ
TNMNNTPXxxxNMNNTP
TNMPOP3XxxxNMPOP3
TNMUUProcessorXxxxNMUUProcessor
TNMSMTPXxxxNMSMTP
TNMStrmXxxxNMStrm
TNMStrmServXxxxNMStrmServ
TNMTimeXxxxNMTime
TNMUDPXxxxNMUDP
TPowerSockXxxxPowerSock
TNMGeneralServerXxxxNMGeneralServer
THTMLXxxxHTML
TNMURLXxxxNMURL
1.3.6.DataAccess页控件
类名命名格式
TDataSourcedsXXXX
TTabletblXXXX
TQueryqryXXXX
TStoredProcsprcXXXX
TDatabasedbXXXX
TSessionssnXXXX
TBatchMovebmvXXXX
TUpdateSQLupdtXXXX
TNestedTablentblXXXX
1.3.7.DataControls页控件
类名命名格式
TDBGriddbgrdXXXX
TDBNavegatordbnvXXXX
TDBTextdbtxtXXXX
TDBEditdbedtXXXX
TDBMemodbmmoXXXX
TDBImagedbimgXXXX
TDBListBoxdblbxXXXX
TDBComboBoxdbcbxXXXX
TDBCheckBoxdbchkXXXX
TDBRadioGroupdbrgpXXXX
TDBLookupListBoxdbllbXXXX
TDBLookupComboBoxdblcbXXXX
TDBRichEditdbredXXXX
TDBCtrlGriddbcgdXXXX
TDBChartdbchtXXXX
1.3.8.Midas页控件
类名命名格式
TClientDataSetcltdsXXXX
TDCOMConnectiondcmcnXXXX
TCorbaConnectioncrbcnXXXX
TSocketConnectionsktcnXXXX
TOLEnterpriseConnectionolecnXXXX
TDataSetProviderdsprdXXXX
TProviderprvdrXXXX
TSimpleObjectBrokersobkrXXXX
TRemoteServerrmtsvXXXX
TMidasConnectionmdscnXXXX
1.3.9.DecisionCube页控件
类名命名格式
TDecisionCubedccbXXXX
TDecisionQuerydcqryXXXX
TDecisionSourcedcsrXXXX
TDecisionPivotdcpvtXXXX
TDecisionGriddcgrdXXXX
TDecisionGraphdcchtXXXX
1.3.10.QReport页控件
类名命名格式
TQuickRepqrptXXXX
TQRSubDetailqrsdtXXXX
TQRStringsBandqrsbdXXXX
TQRBandqrbdXXXX
TQRChildBandqrcbdXXXX
TQRGroupqrgrpXXXX
TQRLabelqrlblXXXX
TQRDBTextqrdbtXXXX
TQRExprqrxprXXXX
TQRSysDataqrsysXXXX
TQRMemoqrmmoXXXX
TQRExprMemoqrxpmXXXX
TQRRichEditqrredXXXX
TQRDBRichEditqrdbrXXXX
TQRShapeqrshpXXXX
TQRImageqrimgXXXX
TQRDBImageqrdbiXXXX
TQRCompositeReportqrcrpXXXX
TQRPreviewqrprvXXXX
TQRTextFilterqrtflXXXX
TQRCSVFilterqrcsvXXXX
TQRHTMLFilterqrhtfXXXX
TQRChartqrchtXXXX
1.3.11.Dialogs页控件
类名命名格式
TOpenDialogopdgXXXX
TSaveDialogsvdgXXXX
TOpenPictureDialogoppdgXXXX
TSavePictureDialogsvpdgXXXX
TFontDialogftdgXXXX
TColorDialogcldgXXXX
TPrintDialogprdgXXXX
TPrinterSetupDialogpsdgXXXX
TFindDialogfndgXXXX
TReplaceDialogrpdgXXXX
1.3.12.Win3.1页控件
类名命名格式
TDBLookupListdbllsXXXX
TDBLookupCombodblcbXXXX
TTabSettbstXXXX
TOutLineotlnXXXX
TTabbedNoteBooktnbkXXXX
TNoteBookntbkXXXX
THeaderhdrXXXX
TFileListBoxflbxXXXX
TDirectoryListBoxdlbxXXXX
TDriveComboBoxdcbxXXXX
TFilterComboBoxfcbxXXXX
1.3.13.Samples页控件
类名命名格式
TGaugeggeXXXX
TColorGridclgrdXXXX
TSpinButtonspnbtXXXX
TSpinEditspedtXXXX
TDirectoryOutlinedirolXXXX
TCalendarcldrXXXX
TIBEventAlerteribaltXXXX
1.3.14.ActiveX页控件
类名命名格式
TChartFXchtfxXXXX
TVSSpellvssplXXXX
TF1Bookbkf1XXXX
TVtChartvtchtXXXX
TGraphgrphXXXX
注:
1.可只对进行编码的控件命名,如果某控件只用做显示,如TLabel,则可采用Delphi自动生成的名字Lable1;
2.若使用第三方控件或自定义类型控件,命名规则应以以上规则为参考。