模块化概述 (★★★★)
模块化概述 (★★★★)
#abap #abap-modularization
概览表
| 技术 | 作用范围 | 可复用? | 封装性 |
|---|---|---|---|
| 子程序 (FORM) | 局部(一个程序) | 否 | 差(仅 USING/CHANGING) |
| 局部类方法 | 局部(一个程序) | 否 | 良好 |
| 函数模块 | 全局(任何程序) | 是 | 良好 |
| 全局类方法 | 全局(任何程序) | 是 | 最佳 |
为什么要模块化?
- 透明性:程序变得面向功能,划分为子功能
- 复用性:多次调用相同代码而无需重新实现
- 可维护性:在一处修复,而不是分散在主程序各处
- 可调试性:可以跳过整个模块化单元
局部与全局模块化
1 | 局部(仅限程序内) |
数据封装原则
1 | 调用程序 ←→ 接口(参数)←→ 模块化单元 |
📌数据封装
模块化单元不应直接使用调用程序的数据对象,反之亦然。数据交换应仅通过接口(参数)进行。
参数类型
| 参数类型 | 方向 | 描述 |
|---|---|---|
| 输入参数 (IMPORTING) | 调用者 → 模块 | 传入数据 |
| 输出参数 (EXPORTING) | 模块 → 调用者 | 返回数据 |
| 双向参数 (CHANGING) | 双向 | 传入并在修改后返回 |
| 返回参数 (RETURNING) | 模块 → 调用者 | 仅限方法使用;函数式调用风格 |
接口/签名
模块化单元的参数总和 = 其接口(也称为签名)。
⚠️子程序的局限
子程序仅支持 CHANGING 和 USING 参数 — 没有 IMPORTING/EXPORTING。这严重限制了数据传输控制。建议优先使用局部类方法而非子程序。
考试/测试模式
| 场景/关键词 | 答案 |
|---|---|
| “局部模块化技术有哪些?” | 子程序和局部类方法 |
| “全局模块化技术有哪些?” | 函数模块和全局类方法 |
| “子程序的参数类型?” | 仅 USING 和 CHANGING |
| “什么是接口/签名?” | 参数的总集合 |