PB编程规范.docx
- 文档编号:16956820
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:20
- 大小:26.15KB
PB编程规范.docx
《PB编程规范.docx》由会员分享,可在线阅读,更多相关《PB编程规范.docx(20页珍藏版)》请在冰点文库上搜索。
PB编程规范
[PB]-PB编码规范
**综述
*编程对象的分类
以PowerBuilder作为前台开发工具,进行软件开发的过程中,所涉及的编程对象如下所示
序号类别
1源代码
2可执行代码
3资源文件(如pbr,bmp,ico文件)
4配置文件(如ini文件)
5其他
*编程对象的组织
使用PowerBuilder开发工具产生的对象,可以按照设计(正在编写和调试)和运行(调试、编译结束,可以接受测试和运行)中的状态进行编程对象的组织规划,重点是目录结构的划分,具体目录的相对关系如下所示
类别目录说明
源代码SrcCode可按子系统再划分子目录(如pbl等文件夹)
可执行代码Program或项目名称可按子系统再划分子目录
图片文件Images或pic等包含应用图标ICO文件、BMP/JPG/GIF文件
配置文件Ini
其他Other
**版本说明
a.软件版本号标准为A.B,其中A和B为0到99之间的数字。
b.当A大于1并且B为奇数时,表示当前版本为处于开发、测试阶段的版本,定义为“开发版”;当B为偶数时,表示当前版本为稳定的、可实际运行的版本,定义为“稳定版”。
c.当软件开始开发时,确定版本号为0.1;随着软件开发的进度,版本号随着每一次主要功能的完善而变化,最高达到0.99。
d.软件初步开发完成后,经过软件开发小组内部测试,初步能够完成软件需求提出的业务规范和技术要求,软件基本能正常运行,此时,确定该软件版本号为1.0BetaX,这意味着软件可以投入实际应用测试,其中X代表测试的次数。
e.当软件的1.0BetaX版本推出并经过用户实际应用或者试运行测试后,此时,确定该软件版本号为1.0RC。
这意味着软件可以投入实际应用运行。
f.当软件的1.0RC版本投入实际应用运行达到某一时限后,则认为该版本已经稳定,可以完全正常地使用了,这时,确定软件的版本号为1.0,这意味着软件开发完成,可以投入实际应用和推广。
g.当软件进行升级时,如果功能变化不大,则次版本号变化;如果软件功能发生重大变化时,主版本号变化。
**对象命名规范
*命名约定
a.部件名称可以达到40个字符,组成方式为A_B。
b.A部分表示前缀,表示部件的类型。
c.紧跟着一条下划线“_”。
d.B部分描述此部件的名称。
可以根据情况具体决定B的构成。
推荐将B部分分解成两部分:
功能代码_功能描述。
e.在重要变量后面写注解表示此变量的用途。
比如,常用的几种对象命名是
窗口的命名:
w_功能代码_功能描述。
数据窗口控件的命名:
dw_功能代码_功能描述。
数据窗口对象的命名:
d_功能代码_功能描述。
菜单命名:
m_功能代码_功能描述。
用户对象:
uo_功能代码_功能描述。
*具体命名规则
1.函数的命名规则
函数名=‘函数适用范围代码’+‘f’+‘_’+‘函数功能描述’,其中函数的
适用范围代码和意义如下:
g全局函数;
w窗口函数;
m菜单函数;
u用户对象函数。
例:
检查SQL语句执行结果的全局用户函数命名如下:
gf_checksql()。
2.应用
应用的命名应使用与该应用的意义相关联的英文字母,例如,app_si表示社会保险应用系统。
3.PBL库
PBL库组织的好坏很重要,它会影响应用开发和维护的容易程度以及应用的性能。
Library的组织应遵循以下原则:
a.Library的大小。
PowerBuilder对Library的大小没有限制,但最好使之小于1MB,Library太大,PowerBuilder要花更多的时间去打开和存储对象,这会影响开发的效率。
b.Library的数量。
尽量用最少的Library数量。
应在Library的数量和每个Library中对象数量之间找到平衡点,如果Library数量太多而每个Library中对象数量太少,搜索路径会太长,影响运行效率。
c.Library的优化。
要在Library画笔中经常对Library进行优化。
随着时间的推移,Library会被分段,会使Library的存储变得不连续,影响运行效率。
d.Library的分类组织。
PBL库可按子系统或功能组织,一般应用都包含公共PBL库。
每个PBL库文件命名应该与该文件作用相关联,例如报表PBL库文件命名为report.pbl。
每个PBL库文件应该包含详细注释,列出该PBL文件包含哪些对象,对应哪个子系统,与其他PBL(调用)关系等信息。
为了有效地进行团队开发,实现对PB源码的管理,要求基于对各方因素(如应用代码的执行效率和所占存储空间)和维护上的全面考虑,对PB源码实行分类的原则。
PowerBuilder的Library的分类原则有两种方式:
(1)制定对象分类法
根据所制定的不同类的对象进行分类。
例:
将所有的窗口放在一个Library中。
(2)功能模块分类法
根据系统的功能模块的不同,将属于不同类的制定对象放在一个Library中。
这是一种更为有效的方式。
4.初始化配置文件
初始化配置文件的命名必须与应用的名称一致,扩展名为.ini,例如:
si.ini。
用户的可变环境信息都应该保存在该文件中,关键信息加密保存,并且提供管理工具,而不是手工修改该文件。
5.资源文件
资源文件的命名必须与应用的名称一致,扩展名为.pbr,例如:
si.pbr。
6.窗口
窗口的命名必须以w(Window的首字符)开头,加下划线(_),其后紧接与窗口意义相关联的英文字母(总长不得超过PowerBuilder的40个字符限制),并且在注释(Comments)框内写出该窗口的作用(中文或英文),如下所示。
序号窗口名称Comments
1w_about关于本系统的版权信息
2w_system_error系统出错提示
3w_main系统主界面
4w_report_sheet报表输出
7.数据窗口
普通数据窗口的命名必须以dW(DataWindow缩写)开头,代码表下拉式子数据窗口必须以dddw(DropDownDataWindow缩写)开头,加下划线(_),其后紧接与数据窗口意义相关联的英文字母(总长不得超过PowerBuilder的40个字符限制),并且在Comments框内写出该数据窗口的作用(中文或英文),如下所示。
序号数据窗口名称Comments
1d_system_error显示系统错误,被w_System_Error窗口调用
2d_categories对产品分类,被w_Report_Sheet窗口调用
3d_detail_partsPartsofProductsDescribedinDetail
4d_detail_functionProductsFunctionDescribedinDetail
5dddw_sex性别代码表
8.菜单
菜单的命名必须以m(Menu缩写)开头,加下划线(_),其后紧接与菜单意义相关联的英文字母(总长不得超过PowerBuilder的40个字符限制),并且在Comments框内写出该菜单的作用(中文或英文),如下所示。
序号菜单名称Comments
1m_mainFrontEndMainMenu
2m_reportReportSubsystemMenu
3m_main_pop主界面的弹出菜单
9.函数
函数的命名必须符合<类型>f_subsystemname_detailname或lf_detailname格式,其中gf表示是全局函数,subsystemname是子系统的英文缩写,detailname是与函数意义相关联的英文字母(总长不得超过PowerBuilder的40个字符限制),对于全局函数应该在Comments框内简短写出该函数的作用(中文或英文),如下所示。
序号函数名称Comments
1gf_help_index帮助子系统索引全局函数
2lf_get_user_info获取用户信息局部函数
3gf_query_sortbyname查询子系统名排序全局函数
10.用户对象
用户对象的命名必须以uo(UserObject缩写)开头,加下划线(_),其后紧接与用户对象意义相关联的英文字母(总长不得超过PowerBuilder的40个字符限制),并且在Comments框内写出该用户对象的作用(中文或英文),如下所示
序号用户对象名称Comments
1uo_external_functionCrossplatformuserobjectancestor
2uo_report_structureUserObjectasastructureForreport
11.控件
控件的命名必须以控件名称缩写开头,加下划线(_),其后紧接与控件作用相关联的英文字母(总长不得超过PowerBuilder的40个字符限制),如下所示
序号控件名称控件缩写控件命名范例
1CommandButtoncbcb_ok
2PictureButtonpbpb_thank_info
3CheckBoxcbxcbx_age_show
4RadioButtonrbrb_typical_setup
5StaticTextstst_user_id
6Picturepp_user_photo
7GroupBoxgbgb_detail_info
8Linelnln_h_separator
9Ovalovaloval_used_flag
10Rectanglerr_photo_frame
11RoundRectanglerrrr_companyflag
12SingleLineEditslesle_user_name
13MultiLineEditmlemle_book_comments
14RichTextEditrterte_student_answer
15EditMaskemem_telephone_no
16HScrollBarhsbhsb_time_set
17VScrollBarvsbvsb_money_set
18DropDownListBoxddlbddlb_your_favourite
19DropDownPictureListBoxddplbddplb_photo_preview
20ListBoxlblb_department_name
21PictureListBoxplbplb_user_identification
22ListViewlvlv_all_user
23TreeViewtvtv_customers
24TabPagetpgtpg_ordinary_super
25Tabtabtab_super
26DataWindowdwdw_user_info_detail
27Graphgrgr_month_report
28Oleoleole_word_doc
**变量命名规范
变量取名应遵守命名规范,对使用频繁的或关键变量,为了便于阅读和修改,在定义时应加上注释标明其含义。
例如:
Stringls_name//参保人员姓名
变量命名规则为:
变量范围+变量数据类型+'_'+含义代码
*变量数据类型约定
数据类型前缀
Anya_
Blobbb_
Booleanb_
Characterc_
Dated_
DateTimedt_
Decimaldec_
Doubledb_
Integeri_
Longl_
Strings_
Timet_
UnsignedIntegerui_
UnsignedLongul_
DataWindowdw_
DataWindowChilddwc_
MailSessionms_
Menum_
Structurestr_
Transacttiontrans_
Windoww_
UserObjectuo_
*变量范围命名约定
范围字首描述
Globalg?
_全局变量将在整个应用中有效。
它们可能从
其他对象面板中定义,但它们将在整个应用中有效
Shareds?
_共享变量在一个对象及其实例中有效
Instancei?
_实例变量仅在一个对象的实例中有效。
相应对象
的不同实例中的变量保存各自的值
Locall?
_局部变量仅在一段子程序或在script开始和结束时生效
由值传递的变量v?
_在定义函数时,参数仅传递值,不会被函数
(仅适用于函数变量)改变,定义为value,例:
vdw_datawindow
由引用传递的变量r?
_在定义函数时,参数将被此函数改变,
(仅适用于函数变量)定义为reference,例:
rl_long
注意:
?
表示相应数据类型,如i,c,l,s等数据类型前缀。
对于上述的内容做如下说明。
a.全局变量的命名必须符合gT_subsystemname_detailname格式,其中g表示是全局变量(Globe),T是数据类型(DataType)的简写。
subsystename是子系统的英文简写。
detailname是有具体意义的英文字母。
例如:
gs_query_user_info,即为查询子系统定义了一个字符串型全局变量。
b.局部变量的命名必须符合lT_detailname格式,其中l表示是局部变量(Local),T是数据类型(DataType)的简写。
例如:
li_user_salary,即定义了一个整数型局部变量。
c.实例变量的命名必须符合iT_detailname格式,其中i表示是实例变量(Instance),T是数据类型(DataType)的简写。
Detailname是有具体意义的英文字母。
例如:
is_product_name,即定义了一个字符串型实例变量。
**编程规范
*书写格式
a.用分层缩进的写法显示嵌套结构的层次。
b.在注释段与程序段,以及不同逻辑的程序段之间插入空行。
c.每行只写一条语句,当需要滚动显示时应该分行书写。
*流控制
流控制首先应遵守PowerBuilder语法规范,且用分层缩进的写法突出显示嵌套的层次结构,例如:
Fori=1To100
Forj=1To50
Fork=1To200
Matrix[i,j,k]=1
Next
Next
Next
*注释及格式要求
注释总是加在程序中需要概括性说明或不易令人理解或容易令人理解错的地方。
注释语言应简练、易懂而又准确,所采用的语种首选是中文,如有输入困难或特殊需求也可采用英文。
注释原则:
a.函数或过程的注释
(1)在函数头部必须说明函数的功能和参数(值参、变参);
(2)在函数的主体部分,如算法复杂时,应以注释的方式对其算法结构做出说明;
(3)函数申请过全局资源且有可能导致资源紧张应加以注明(如内存和文件柄等);
(4)函数有副作用一定以十分醒目的方式(如加!
号等)注明。
b.语句的注释
(1)应对不易理解的分支条件表达式加注释;
(2)不易理解的循环,应说明出口条件(有GOTO的程序还应说明入口条件);
(3)过长的函数实现,应将其语句按实现的功能分段加以概括性说明。
c.常量和变量的注释
在常量名声明后应对该名做适当的注释,注释说明的要点是:
(1)被保存值的含义(必须);
(2)合法取值的范围(可选);
(3)全局量需要对以上逐点做充分的说明。
d.制定对象的注释
每个开发人员针对自己所制定的窗口、菜单、数据窗口、数据管道和用户对象等添加注释,要点是:
(1)标注对象的用途;
(2)标注对象的制定人员;
(3)标注时间或者修改时间。
具体格式要求如下:
1.在窗口Open事件前应说明
/*=======================================================*/
//窗口中英文名称:
//窗口作用:
//作者:
//日期:
/*=======================================================*/
2.在事件脚本(Script)之前应说明
/*=======================================================*/
//脚本作用:
//输入参数及数据类型:
//返回参数及数据类型:
//全局函数及其用途:
//全局变量及其用途:
//作者:
//日期:
//修改人的姓名:
//修改日期:
//修改原因:
/*=====================================================*/
若有多人修改,每个人均加上自己的注释,而不能改他人的姓名、日期、原因,对要修改的脚本,只能注释不能删除,并且在修改的地方加上修改人名、日期和"BeginningModification...","EndingModification"字样。
3.脚本中的注释
单行脚本程序注释:
//注释文本
脚本的程序段注释:
/*==================================*/
//
//注释文本
//
/*==================================*/
变量的注释如下:
数据类型变量名//注释
4.在函数、存储过程等脚本(Script)之前应说明
/*=======================================================*/
//函数名称:
//参数解释:
//功能描述:
//调用举例:
//最初作者:
//编写日期:
//返回值:
//变量情况:
//修改人:
//修改日期:
//修改原因:
/*========================================================*/
*Powerbuilder脚本编程规范
1.Powerbuilder编程注意事项
a.不要在子应用中声明全局变量!
如必须声明全局变量,则应事先向项目负责人申请。
b.供别的文件或函数调用的函数,绝不应使用全局变量交换数据。
c.所有SQL语句均需判断返回结果(包括SELECT,COMMIT语句)。
例:
Ifsqlca.sqlcode=-1Then
错误处理程序
跳出
Else
正常
EndIf
d.缺省SQLCA的连接语句connect,在应用Open事件中完成,其disconnect在主应用的Close事件中完成,其余任何pbl中均不能有disconnect语句。
e.由于要连接多个数据库,需要用Create创建对象,比如:
SQLSYB,则用connectusingSQLSYB,处理完毕后用disconnectusingSQLSYB,并且用destroySQLSYB释放资源。
2.编码标准
(1)在代码块前后留一个空行。
例子如下:
If
EndIf
For
Next
(2)把单行注释与当前script程序的缩进位置对齐:
//ThisisacommentForcondition1
If
//ThisisacommentForcondition2
If
//ThisisacommentForaction1
EndIf
EndIf
(3)缩进应以Tab键实现,不得采用空格。
(4)变量采用小写格式。
注意:
①变量全部用小写;
②一个变量一行,每个变量必须注释;
③通常情况下,变量的后半部分尽量用数据库字段名;
④变量声明全部在脚本之前声明完毕;
⑤所有变量声明时按代码功能段+变量类型进行排序。
例如:
Longll_quantity
Stringls_name
对象名采用小写,属性、关键字、保留字和内置函数均用首字母大写格式:
w_cont_de.Visible=True
m_mdi.m_file.m_print.Enabled=False
数据窗口控制的函数加上修饰,而不以数据窗口对象作为参数:
dw_main.SetTransObject(sqlca)
dw_main.SetRowFocusIndicator(Hand!
)
dw_main.Retrieve()
(5)当连接起来的字符串超过了两行的长度时,使用+符作为下行的第一个字符,每次均采用缩进格式。
字符串的随后部分应该再次缩进。
例如:
ls_msg="连接数据库失败!
错误信息为:
~r~n"&
+Sqlca.SqlErrText&
+"请与系统管理员联系"
(6)PowerBuilder保留字(关键字)首字母大写其余小写,这样看起来层次清晰,如:
This,Parent,ParentWindow,True,False,Return,Halt与Close。
(7)PowerBuilder内部函数及属性每个字首字母大写其余小写,这样看起来层次清晰,如:
sle_user.Text,dw_1.SetTransObject(Sqlca),Sqlca.SqlErrText。
(8)SQL语句按如下格式书写:
SELECTname,sex,dept_id
INTO:
ls_name,:
ls_sex,:
ls_dept_id
FROMemployee
WHEREemp_id=:
ls_emp_id;
(9)程序中应避免出现goto跳转语句。
3.脚本中一些常用功能模块的编程约定
(1)光标操作过程的编程约定如下:
DeclareCursornameCursorfor
Select语句
OpenCursorname;
fetchCursornameinto
DoWhileSqlca.Sqlcode=0
fetchCursornameinto
Loop
CloseCursorname
光标命名规则:
“Cur”+“_”+名称。
(2)调用数据库存储过程的编程约定如下:
declareProcedurenameprocedureForStoredProcedureName
:
Value1,:
Value2......;
executeProcedurename;
fetchProcedurenameinto
clos
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PB 编程 规范