4gl语言开发原则及规范简化版Word下载.docx

上传人:b****1 文档编号:5850889 上传时间:2023-05-05 格式:DOCX 页数:19 大小:24.27KB
下载 相关 举报
4gl语言开发原则及规范简化版Word下载.docx_第1页
第1页 / 共19页
4gl语言开发原则及规范简化版Word下载.docx_第2页
第2页 / 共19页
4gl语言开发原则及规范简化版Word下载.docx_第3页
第3页 / 共19页
4gl语言开发原则及规范简化版Word下载.docx_第4页
第4页 / 共19页
4gl语言开发原则及规范简化版Word下载.docx_第5页
第5页 / 共19页
4gl语言开发原则及规范简化版Word下载.docx_第6页
第6页 / 共19页
4gl语言开发原则及规范简化版Word下载.docx_第7页
第7页 / 共19页
4gl语言开发原则及规范简化版Word下载.docx_第8页
第8页 / 共19页
4gl语言开发原则及规范简化版Word下载.docx_第9页
第9页 / 共19页
4gl语言开发原则及规范简化版Word下载.docx_第10页
第10页 / 共19页
4gl语言开发原则及规范简化版Word下载.docx_第11页
第11页 / 共19页
4gl语言开发原则及规范简化版Word下载.docx_第12页
第12页 / 共19页
4gl语言开发原则及规范简化版Word下载.docx_第13页
第13页 / 共19页
4gl语言开发原则及规范简化版Word下载.docx_第14页
第14页 / 共19页
4gl语言开发原则及规范简化版Word下载.docx_第15页
第15页 / 共19页
4gl语言开发原则及规范简化版Word下载.docx_第16页
第16页 / 共19页
4gl语言开发原则及规范简化版Word下载.docx_第17页
第17页 / 共19页
4gl语言开发原则及规范简化版Word下载.docx_第18页
第18页 / 共19页
4gl语言开发原则及规范简化版Word下载.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

4gl语言开发原则及规范简化版Word下载.docx

《4gl语言开发原则及规范简化版Word下载.docx》由会员分享,可在线阅读,更多相关《4gl语言开发原则及规范简化版Word下载.docx(19页珍藏版)》请在冰点文库上搜索。

4gl语言开发原则及规范简化版Word下载.docx

●字段长度:

不超过INFORMIX规定字段长度(十八位);

1.字段名由英文单词构成,每个单词首字母大写;

保单号码:

PolicyNo

2.一个字段名所用的单词不超过5个,在字段名不超过规定长度的情况下,尽量采用英文单词的全称;

3.在字段名总长度超长的情况下,不缩略核心单词,其他单词缩略不短于3个字母;

4.形容词定语放在所修饰名词的后面;

损失金额:

SumLoss

1.1.1.4程序(文件)模块命名

●长度:

不超过INFORMIX规定长度(十位);

以对象名开头(第一个字母大写),后接对象操作名(第一个字母大写);

●命名规则:

ObjectOpt.4gl其中,Object是对象名。

数据层默认为基本表名。

如果表名超过10位。

则按照缩略规则执行。

●BL层模块划分及命名:

原则上每个BL层的对象对应两个模块,一个对象主模块,一个模块存放归属于该对象的模块变量。

当且仅当主模块中内容过多时,按照如下规则划分:

objectRd.4gl:

存放涉及到查询(读)数据库的服务函数

objectWt.4gl:

存放涉及到更新(写)数据库的服务函数

objectTx.4gl:

存放事务服务函数

objectLg.4gl:

存放不涉及数据库操作的服务函数

●DB层模块划分及命名:

全局动态数组(DE):

对于数据层的实体对象服务模块,它们一般由工具生成,文件名一般要与实体对象名一致,除非表名超过10位,此时参考词根表进行命名。

注意表名或者词根表是命名仅有的参考依据。

另外,除了通用服务以外,有些实体对象需要一些扩展的服务,这些服务放在实体对象服务模块的最后定义;

1.1.1.5函数命名规范

采用由大小写英文字母和“_”组成方式,规则如下;

●直接调用的工具函数命名公式

pub_”+”对象名”+”_”+“函数名”

其中:

对象名和函数名区分大小写

●对象服务函数命名

由于INFORMIX-4GL语言不是面向对象的开发语言,因而在程序设计中的对象服务是以函数的方式体现的;

●一般函数命名公式:

作用范围+”_”+对象名+”_”+对象的方法

作用范围包括pub/pri,对象名和方法名区分大小写

逻辑层险种对象BLPrpDrisk的增加操作add所对应的函数名为:

pub_BLPrpDrisk_Add

数据层代码对象DBPrpDcode的delete操作所对应的函数名为:

pub_DBPrpDcode_Delete

界面层保单对象UIPolicy的录入操作对应的函数名为:

pub_UIPolicy_Input

事务型的函数(或模块)命名规范参见(数据库事务编写约定)

●数据层扩展服务函数命名:

如果存在某数据表TableName的数据层服务,其功能是获取表中某字段ColumnName的最大值,则该数据层服务函数名定义为:

pub_DBTableName_GetMaxColumnName

如果某两层结构数据表TableName的字段名为Col,现存在数据层服务,其功能是根据Col删除表中数据,则该数据层服务函数名定义为:

pub_DBTableName_DeleteByCol

如果某两层结构数据表TableName主键为id和no,每个id下包括若干no,现存在数据层服务,其功能是根据id删除表中数据,则该数据层服务函数名定义为:

pub_DBTableName_DeleteByIN

如果某数据表TableName主键为id、no和col,现存在数据层服务,其功能是根据id和no删除表中数据,则该数据层服务函数名定义为:

pub_DBTableName_DeleteByINC

也就是说,此时只取涉及的字段的首字母,写在函数名的最后。

1.1.1.6屏幕表格命名

●屏幕FORM名应与相关数据表或主调用文件保持一致;

命名规则:

,其中Obj是对象名,Opt是对象操作名。

“主保单录入”屏幕表格名称为

“保单查询”屏幕表格名为

“保单清单显示”屏幕表格名为

如果一个屏幕表格被用于录入、查询等多种功能,功能名为:

main;

主保单录入、查询的通用屏幕表格名为:

如果一个屏幕表格被用于非录入、查询等多种功能,功能名为:

pub。

主保单非录入、查询的通用屏幕表格名为:

●屏幕记录:

以小写字母命名,形式为sc_tablename

●屏幕数组:

以小写字母命名,形式为sa_tablename

1.1.1.7窗口和游标命名

采用由小写英文字母和“_”组成方式,规则如下;

●窗口命名

以功能名开头,后接win,以“_”分隔。

某项功能需要以屏幕表格的方式打开窗口,该功能主要实现权限记录的增加。

功能名为grade_add,则窗口命名为:

grade_add_win。

OPENWINDOWgrade_add_winAT2,2

WITHFORM“GradeMain”

……

CLOSEWINDOWgrade_add_win

●游标命名

游标的命名规则同窗口,只不过以cur结尾;

某功能需以预处理+游标的方式从表prpgrade获取数据。

设功能名为prpgrade_sel,则预处理命名为:

prpgrade_sel_pre,游标命名为prpgrade_sel_cur

PREPAREprpgrade_sel_preFROMlv_sql

DECLAREprpgrade_sel_curCURSORFORprpgrade_sel_pre

FOREACHprpgrade_sel_curINTOsel_var_list

ENDFOREACH

如果在同一个程序模块内,游标的命名重复,可在结尾处加序号与以区别,序号从1开始,依次递增。

1.1.2常量和变量命名

命名公式:

常量名称=变量作用域前缀+变量类型+’_’+自定义名称

注意:

自定义名称要有一定的意义且整个常量名称全部大写

变量名称=变量作用域前缀+变量类型+’_’+自定义名称

自定义名称要有一定的意义且整个常量名称全部小写

除了对象之外,常量和变量也需要良好格式的命名约定。

常量或变量应该总是被定义在尽可能小的范围内。

全局(Global)变量可以导致极其复杂的状态机构,并且使一个应用程序的逻辑非常难于理解。

全局变量也使代码的重用和维护更加困难。

较好的编码习惯是尽可能写模块化的代码。

除了全局变量(应该是不被传递的),过程和函数应该仅对传递给它们的对象操作。

在过程中使用的全局变量应该在过程起始处的声明部分中标识出来。

作用范围

前缀

例子

全局

g

gr_prpcmain

模块级

p

pv_sql

本地到过程

l

lv_count

传入参数

i

ir_prpcmain

常量/变量类型

结构

r

数组

a

pa_count[10]

其他

v

lv_proposalno

描述变量

变量主体应该使用小写形式,并且应该足够长以描述它的作用。

对于频繁使用的或长的项,推荐使用标准缩略语以使名称的长度合理化。

当使用缩略语时,要确保它们在整个应用程序中的一致性。

在一个工程中,如果一会儿使用proposalno代表投保单号码,一会使用prpsalno代表保单号码,将导致不必要的混淆。

变量使用遵循如下几条规则:

●函数内部定义的每一个变量在使用之前都必须初始化,初始化区域以/--@INIT开头和-/结尾。

●便于工具能够定期检查变量是否初始化或者初始化是否正确,在函数内部的变量初始化区域,严格按照上述规定检查;

●对于数组的初始化,必须采用INITIALIZE数组TONULL,不要采用循环一条条记录进行初始化,除非需要针对数组记录中的某个字段特殊赋值;

比如:

定义数组变量la_prptplanARRAY[20]OFRECORDLIKEPrpTplan.*,初始化时直接用INITIALIZEla_prptplanTONULL,不要使用:

FORi=1TO20

INITIALIZEla_prptplan[i].*TONULL

ENDFOR

●对象化后的系统不允许使用模块变量;

●终端版系统应优化算法,尽量避免使用数组,不允许使用大数组;

变量定义及初始化举例如下:

FUNCTIONpub_BLPrpCaddress_Ini()

DEFINElr_prpcaddressRECORDLIKEPrpCaddress.*,

la_prpcaddressARRAY[20]OFRECORDLIKEPrpCaddress.*,

lv_prpcaddress_countSMALLINT,

lv_resultINTEGER

#/--@INIT

#--变量初始化

INITIALIZElr_prpcaddress.*TONULL

INITIALIZEla_prpcaddressTONULL#--初始化数组变量

LETlv_prpcaddress_count=0

LETlv_result=0

#-/

CALLpub_DEPrpCaddress_GetRec()RETURNINGlr_prpcaddress.*

ENDFUNCTION

1.2注释规范

良好的程序注释有助于帮助我们了解程序的实现,也可以对程序文件进行一定量统计分析。

约定如下:

●程序注释是程序文件的一个重要组成部分,中英文注释均可(考虑到各种平台对中文的支持,建议用英文);

●INFORMIX-4GL的注释有三种:

#、--、{}。

分单行注释和多行注释两种。

单行注释以--开头。

多行注释以##开头。

除了临时的注释(调试程序使用),严禁使用{}。

●为了对4GL文件进行一定量的统计分析,规范代码的编写质量。

制定了一组注释框架来对4GL程序进行说明。

规则如下:

1.2.1程序文件部分的注释

程序文件头的注释说明主要包括该程序文件包含类的名称(CLASS)、类的功能描述(DESC)、文件创建作者(AUTHOR)、创建日期(CREATEDATE)、及更新列表(MODIFYLIST)等信息。

还包括类的成员包括公有和私有。

#/--@CLASSDBPrpDkind

#@DESC类功能描述

#@AUTHOR创建者名称

#@CREATEDATEYYYY/MM/DD

#@MODIFYLIST

#NAMEDATEREASON

#WuPeng2002/03/13优化save函数,提高效率

#SunRibo2002/03/14增PremiumCal函数计算保费

#-/

说明:

MODIFYLIST中#后一个空格,NAME,DATE,REASON和其内容都要左对齐,NAME宽8列,其后一个空格,然后是DATE宽10列,其后一个空格,然后是REASON,如果REASON需要折行,另起一行,仍和REASON对齐

#/--@PUBLICPROPERTIES

GLOBAL

DEFINEgr_prpcmainRECORDLIKEprpcmain.*

ENDGLOBAL

#/--@PRIVATEPROPERTIES

DEFINEpr_prpcmainRECORDLIKEPrpCmain.*

DEFINEpv_proposalnoLIKEPprpTmain.ProposalNo--**投保单号

1.2.2函数部分的注释

每一函数(或过程)都应包括该函数(或过程)的注释部分包括一个METHOD框架。

描述实现的功能简介、输出参数说明等方面的描述。

在函数内部变量定义前包括该函数RETURN的框架,以/--@RETURN开头和-/结尾,对于无返回值和有返回值的RETURN描述规则如下:

1、无返回值的RETURN书写规则:

#/--@RETURN

#VARIABLEDEFINEREMARK

2、有返回值的RETURN书写规则:

#lv_resultsmallint返回的sql值

#lr_prpcmainPrpCmain.*数据库表记录

#lv_amountDECIMAL(16,2)

#lv_policynoPrpCmain.PolicyNo保单号

#lr_sumpolicySELFDEFINE

#NONETRUE/FALSE

#NONE-1/0/100失败/成功/没找到

3、有返回值且注释超过一行的RETURN书写规则:

#lv_resultsmallint返回的sql值\

#0:

成功;

1失败

#lr_prpcmainPrpCmain.*数据库表记录\

#对应保单主表

说明:

(1)#--@RETURN、VARIABLE、DEFINE、REMARK所在行为固定格式;

(2)每行只能注释一个返回值,返回值注释的先后与函数实际返回顺序一致;

(3)VARIABLE、DEFINE、REMARK和其内容要左对齐;

(4)对于REMARK一行不够的话,在注释后补反斜杠”\”,另起一行,和上一行的注释内容左对齐。

(5)DEFINE节约定:

对于LIKE型的变量,该处写出表名.*,或者表名.字段名,如:

PrpCmain.*,PrpCmain.PolicyNo;

对于DECIMAL类型,必须写出精度,如DECIMAL(16,2)。

(6)如果变量为自定义的结构,在DEFINE行填写SELFDEFINE;

(7)如果返回值不是变量,VARIABLE项固定为NONE,DEFINE项罗列出返回数值,用“/”分隔;

(8)该规则位置放在函数中的PARAMETER节之前。

举例如下:

#/--@METHOD

#@DESC根据主键获取PrpCfee表的记录

FUNCTIONpub_DBPrpCfee_GetInfo(iv_policyno,iv_currency)

#lr_PrpCfee.*PrpCfee.*保额保费记录

#lv_retSMALLINT

#/--@PARAMETER

在函数内部变量定义的同时包括一个PARAMETER框架,以/--@PARAMETER开头和-/结尾,用来说明函数的入参及入参的类型。

#@DESC函数描述

#@RETURNSMALLINT--函数返回值

#INTEGER--其他返回值

FUNCTIONpub_DBPrpCmain_Insert(iv_prpcmain.*)

--PrpCmain表纪录

DEFINEiv_cmainRECORDLIKEPrpCmain.*

DEFINElv_resultINTEGER

...

1.2.3函数(过程)程序的增、删、改的注释说明约定

程序的这几种操作包含在注释关键字MODIFY中。

注释以”--*MODIFY”开头,其中MODIFY与”*”之间不能有空格,框架中包括注释人姓名(必须),操作[DELETE/ADD/UPDATE](必须),操作时间(必须),地点(必须),必要时说明操作原因。

(空行)

--*MODIFYBEGINSunribo,DELETE,2002-03-15,beijing,程序逻辑错误–

##FUNCTIONpub_DBPrpDkind_Update(ir_prpdkind)

##...

##ENDFUNCTION

--*MODIFYENDSunribo,DELETE,2002-03-15,beijing––

记住下列几点:

●程序增、删、改的注释应该按时整理。

无用的注释及时清理掉。

●所有的变量定义之后都要加上能够说明其用途的注释。

1.2.4函数体内部的代码段修改注释

在函数中修改代码段应在所修改代码段首尾处增加注释,在结尾处应将缩添加起首处注释的修改人、修改信息和关键字等信息重复一次,并将起首处的BEGIN改为结束标志END所添加注释应与所注释代码段保持同样缩进,并与所注释代码段间上下各保留一空行以便于浏览。

此外,在进行BUG修改或补充功能开发时应将BUG编号或功能编号书写在注释中,作为与功能相关的标识。

--*MODIFYBEGINSunribo,DELETE,2002-03-15,beijing,FORIBUG2111–

LETlr_prptmain.ProposalNo=”…”

LETlr_prptmain.RiskCode=”QZA”

--*MODIFYENDSunribo,DELETE,2002-03-15,beijing–

1.2.5函数体内部的代码段说明约定

在程序中开始大的代码段之前,要加入特殊的注释,用于标记说明下面代码段的功能。

此类注释以#--开头,缩进和代码段的缩进相同,同时这种注释需要配以整齐的标号,以增加可读性,便于理解。

#--4.循环判断路径是否满足条件,并标记满足条件的记录

1.3书写规范

1.3.1基本原则

编码要清晰工整,保证程序的可读性、系统的可维护性:

●在任何情况下都不能使用TAB键;

●程序中一律采用4个空格的缩进;

●除了”,”运算符之外,所有的运算符和操作数之间都要加一个空格;

●一个代码行物理上不能超过屏幕规定的缺省最大宽度(80列),即不能产生折行,如果逻辑行长度超过80,除了函数定义或者调用语句根据函参折行对齐、DEFINE语句根据变量折行对齐以外,其他情况一律将超长部分另起一行空4格后书写;

●成对出现的语句起始和结束关键字必须左对齐书写。

●UI-BL-DB三层允许前端调用后端(UI→BL,UI→DB,BL→DB),不允许出现后端反调前端的情况;

IF…THEN

...

ENDIF

WHILEcondition

do…

ENDWHILE

FUNCTIONabc()

1.3.2保留字引用规则

●编码中引用的所有保留字均必须大写;

●程序注释提供的关键字:

AUTHORCREATEDATEDESCPARAMETERRETURNPUBLICPROPERTIESPRIVATEPROPERTIESCLASSMODIFYMODIFYLIST

●INFORMIX-4GL提供的保留字:

SELECTUPDATEDELETEINSERTIFTHENELSECASEWHENOTHERWISEENDFUNCTIONPROCEDUREWHILEEXIT

●INFORMIX-4GL提供的系统变量、函数一律大写;

INT_FLAG、ARR_COUNT、SET_COUNT等

1.3.3LET语句

LET语句一行能写下就写在一行,逻辑行长度大于80时按照逻辑表达式拆分后,另起一行空4格后书写。

LETlv_where_part="

a.UserName=e.UserCodeAND"

"

e.GroupNo=d.GroupNoAND"

e.ModelNo="

lr_wflog.ModelNo,"

AND"

e.NodeNo=

1.3.4IF语句

●IF之后的逻辑表达式一行能写下就写在一行,逻辑行长度大于80时按照逻辑表达式拆分后,另起一行空4格后书写。

●对于IF加上之后的条件如果足够在一行的话,THEN跟在后面,否则单独占一行。

●所有的逻辑运算符(AND,OR)一律放在每行开始。

●禁止使用ELSEIF语句,可以采用CASE语句改写。

IFlr_prptmain.ProposalNoISNULLTHEN

ERROR"

该字段不允许为空,请重新输入!

IFlr_prptmain.ProposalNoISNULL

ORLENGTH(lr_prptmain.ProposalNo)=0

THEN

NEXTFIELDProposalNo

ELSE

另外,控制分支结构较为复杂时,用CASE语句代替一系列IF语句,必要的时候另外组织函数,宁可牺牲一些资源,也要保持程序文件的清晰程度。

1.3.5DEFINE语句

●DEFINE语句必须和FUNCTION对齐书写。

●每个函数的入参都要单独使用一个DEFINE语句。

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

当前位置:首页 > IT计算机 > 电脑基础知识

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

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