模块化概述 (★★★★)

模块化概述 (★★★★)

#abap #abap-modularization

概览表

技术 作用范围 可复用? 封装性
子程序 (FORM) 局部(一个程序) 差(仅 USING/CHANGING)
局部类方法 局部(一个程序) 良好
函数模块 全局(任何程序) 良好
全局类方法 全局(任何程序) 最佳

为什么要模块化?

  • 透明性:程序变得面向功能,划分为子功能
  • 复用性:多次调用相同代码而无需重新实现
  • 可维护性:在一处修复,而不是分散在主程序各处
  • 可调试性:可以跳过整个模块化单元

局部与全局模块化

1
2
3
4
5
6
7
8
9
局部(仅限程序内)
├── 子程序(FORM 例程)
└── 局部类中的方法
仅在定义程序中可用

全局(系统范围)
├── 函数模块(在函数组中)
└── 全局类中的方法
存储在仓库中,按需加载到调用者的上下文中

数据封装原则

1
2
3
4
调用程序 ←→ 接口(参数)←→ 模块化单元

理想情况:不直接访问彼此的数据对象
所有数据交换通过参数进行
📌数据封装
模块化单元不应直接使用调用程序的数据对象,反之亦然。数据交换应仅通过接口(参数)进行。

参数类型

参数类型 方向 描述
输入参数 (IMPORTING) 调用者 → 模块 传入数据
输出参数 (EXPORTING) 模块 → 调用者 返回数据
双向参数 (CHANGING) 双向 传入并在修改后返回
返回参数 (RETURNING) 模块 → 调用者 仅限方法使用;函数式调用风格

接口/签名

模块化单元的参数总和 = 其接口(也称为签名)。

⚠️子程序的局限
子程序仅支持 CHANGINGUSING 参数 — 没有 IMPORTING/EXPORTING。这严重限制了数据传输控制。建议优先使用局部类方法而非子程序。

考试/测试模式

场景/关键词 答案
“局部模块化技术有哪些?” 子程序和局部类方法
“全局模块化技术有哪些?” 函数模块和全局类方法
“子程序的参数类型?” 仅 USING 和 CHANGING
“什么是接口/签名?” 参数的总集合

相关笔记