ABAP 命名约定与面向对象命名规范示例
It’s not enough to write the code well. The code has to be kept clean over time. We’ve all seen code rot and degrade as time passes. So we must take an active role in preventing this degradation.
命名约定
以下约定适用于 ABAP 程序中所有可定义对象的名称,例如数据类型、数据对象、类、宏或例程:
- 名称长度最多为 30 个字符
- 允许的字符是从“A”到“Z”的字母、从“0”到“9”的数字和下划线
_
- 名称必须以字母或下划线
_
开头。只有在 ABAP 对象之外,名称才能以不同的字符开头 - 名称可以具有命名空间前缀。命名空间前缀至少由三个字符组成,这些字符由两个正斜杠 (
/.../
) 括起来。前缀和名称的整个长度不能超过 30 个字符 - 预定义 ABAP 类型或预定义数据对象的名称不能用于数据类型或数据对象
- 实际上并不禁止使用 ABAP 关键词等自定义定义的 ID,但强烈建议不要使用
- 字段符号很特殊,因为它们的名称必须括在尖括号 (
<...>
) 中。尖括号是名称的一部分,这意味着字段符号可能被称为<>
(但不建议这样做)
命名空间
在类声明之外,不同的对象具有单独的命名空间,因此数据类型、数据对象或过程可以具有相同的名称。因此,类和接口与数据类型位于同一命名空间中。命名空间对相应的上下文有效。在上下文中,相同对象的名称必须是唯一的。例如,一个 ABAP 程序中只能有一个同名的子例程,而整个 ABAP 服务周期中只能有一个同名的功能模块。
在类声明中,每个类组件的名称(数据类型、属性、方法、事件或别名)必须是唯一的。
约定俗成
除了使用分配有意义名称的一般规则外,对于程序内部声明,坚持上述消除人为错误(避免名称混淆)的规则也很重要。与人类读者不同,编译器通常确切地知道标识符所指的内容。使用以下前缀可避免不必要的模糊和名称混淆的危险:
g_
for global data objectsl_
for local data objects that obscure static attributesi_
for IMPORTING parameterse_
for EXPORTING parametersc_
for CHANGING parametersr_
for RETURNING parameters
ABAP 面向对象命名规则
创建类的事务码 SE24
:
- 类命名
<ZCU>CL_<name>
,例如ZSDP_CL_COMPANY_CODE
- 接口命名
ZCU>IF_<name>
,例如ZSDP_IF_COMPANY_CODE
类内部定义(常量、类型、数据)
LC_
用于声明方法内,也就是本地,作用在方法里,L 意味着 local
GC_
用于在类属性中,G 意味着 global
常数:
LC_<name>
GC_<name>
类型:
TV_<name>
,V 表示 VariableTS_<name>
,S 表示 Structure TypeTT_<name>
, T 表示 Table Type
实例属性(public,private,protected):
MV_<name>
, 例如:mv_material(变量)MS_<name>
, 例如:ms_mara(结构体)MT_<name>
, 例如:mt_mara(表)MR_<name>
,R 表示 Reference 引用,例如:mr_header
静态属性(public,private,protected):
SV_<name>
, 避免命名为S_<name>
,这种命名方式可能会与 Select-option 的变量冲突SS_<name>
,同理,结构体ST_<name>
,同理,内表SR_<name>
,同理,对象引用
方法(本地定义):
LV_<name>
LS_<name>
LT_<name>
LR_<name>
<FS_name>
:Field Symbols
类定义:
LCL_<name>
,例如 LCL_CLEARING_TESTGCL_<name>
,一般定义在 TOP 的包含文件中
类接口定义:
LIF_<name>
,例如 LIF_VALUE_UPDATEGIF_<name>
FUNCTION LIF_VALUE_UPDATE.
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*" IMPORTING
*" VALUE(INTERN_LIFNR) LIKE LFA1-LIFNR DEFAULT ' '
*"----------------------------------------------------------------------
CALL FUNCTION 'LIF_VALUE_DBUPDATE' IN UPDATE TASK
EXPORTING
INTERN_LIFNR = INTERN_LIFNR
TABLES
X_LIF_MW = X_LIF_MW
Y_LIF_MW = Y_LIF_MW
USED_ATINN = USED_ATINN.
* Artikelspezifische Lieferantenmerkmalswerte
if not vend_art_akt is initial.
call method vend_art_badi->posting_vendor_char
exporting
c_xdata = x_lif_mw[]
c_ydata = y_lif_mw[]
c_atinn = used_atinn[].
endif.
ENDFUNCTION.
类方法中的参数命名方式
Import 参数:
iv_<name>
,例如iv_matnr
piv_<name>
,例如piv_matnr
is_<name>
,例如is_header
pis_<name>
,例如pis_header
it_<name>
,例如it_item
pit_<name>
,例如pit_item
ir_<name>
,例如ir_header
Export 参数
ev_<name>
,例如ev_subrc
pev_<name>
,例如pev_subrc
es_<name>
,结构体pes_<name>
,结构体et_<name>
,内表pet_<name>
,内表er_<name>
,对象引用
Changing 参数
cv_<name>
,变量pcv_<name>
,变量cs_<name>
,结构体pcs_<name>
,结构体ct_<name>
,内表pct_<name>
,内表cr_<name>
,对象引用
Returning 参数
rv_<name>
,变量prv_<name>
,变量rs_<name>
,结构体prs_<name>
,结构体rt_<name>
,内表prt_<name>
,内表rr_<name>
,对象引用
方法命名
对象 | 命名规则 | 举例 |
---|---|---|
SET 方法 | SET_<atrribute_name> |
set_status |
GET 方法 | GET_<atrribute_name> |
get_number |
事件处理方法 | ON_<event_name> |
on_button_pushed |
类型转换方法 | AS_<new_type> |
as_string |
判断是否是布尔值 | IS_<adjective> |
is_open,is_active,这些方法不能返回异常,建议使用 SPACE 代表 false,'X' 代表 true |
检查方法 | check_<objective> |
check_authorization |
- 点赞
- 收藏
- 关注作者
评论(0)