ABAP 命名约定与面向对象命名规范示例

举报
雨绸缪 发表于 2023/10/30 16:19:49 2023/10/30
【摘要】 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. 命...

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 objects
  • l_ for local data objects that obscure static attributes
  • i_ for IMPORTING parameters
  • e_ for EXPORTING parameters
  • c_ for CHANGING parameters
  • r_ 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 表示 Variable
  • TS_<name>,S 表示 Structure Type
  • TT_<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_TEST
  • GCL_<name>,一般定义在 TOP 的包含文件中

类接口定义:

  • LIF_<name>,例如 LIF_VALUE_UPDATE
  • GIF_<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_openis_active,这些方法不能返回异常,建议使用 SPACE 代表 false,'X' 代表 true
检查方法 check_<objective> check_authorization
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。