第 4 单元:模块化练习(10 道题)
第 4 单元:模块化练习(10 道题)
#practice #abap #abap-modularization
相关概念
📌关键模式(点击展开)
| 关键词 | 答案 |
|---|---|
| 局部技术 | 子程序 + 局部类方法 |
| 全局技术 | 函数模块 + 全局类方法 |
| 子程序参数 | 仅 USING/CHANGING |
| BAPI 异常 | 不得抛出 — 使用 RETURN 参数 |
| 静态选择符 | => |
| 实例选择符 | -> |
第 1 题 - 模块化类型 [recall]
说出 ABAP 中两种局部和两种全局模块化技术。
📌显示答案
局部:子程序(FORM 例程)和局部类中的方法。全局:函数模块(在函数组中)和全局类中的方法。
第 2 题 - 数据封装 [recall]
什么是数据封装?为什么它很重要?
📌显示答案
数据封装意味着模块化单元不直接访问调用程序的数据对象,反之亦然。所有数据交换通过接口(参数)进行。它提高了透明性、可维护性,并防止数据不一致。
第 3 题 - 子程序的局限 [recall]
与函数模块相比,子程序参数有什么局限?
📌显示答案
子程序仅支持 USING 和 CHANGING 参数。它们没有 IMPORTING、EXPORTING 和 RETURNING 参数。这严重限制了对数据传输方向的控制。
第 4 题 - 跨程序调用子程序 [recall]
可以从另一个程序调用子程序吗?应该这样做吗?
📌显示答案
技术上可行(由于历史原因),但你不应该这样做。它违反了封装原则,被认为是不良实践。
第 5 题 - 函数组加载 [application]
当一个程序两次调用同一个函数组中的函数模块时,函数组被加载到程序上下文中几次?
📌显示答案
函数组在每个主程序上下文中仅加载一次。组中的所有函数模块共享相同的全局数据。后续调用复用已加载的函数组。
第 6 题 - BAPI 属性 [recall]
列出 BAPI 函数模块必须满足的四个技术要求。
📌显示答案
- 命名规范:
BAPI_<对象>_<方法> - 必须支持远程调用
- 不得包含用户对话或消息
- 不得抛出异常 — 通过 RETURN 参数报告错误
- 参数使用带 BAPI_ 前缀的结构类型
第 7 题 - 类与函数组 [analysis]
函数组和全局类在数据管理方面的关键区别是什么?
📌显示答案
函数组在每个上下文中只能加载一次(单一全局数据集)。全局类可以有多个实例(对象),每个实例都有自己的属性值。这允许不同的数据状态同时存在。
第 8 题 - 异常处理 [application]
一个方法使用基于类的异常。写出调用该方法并处理异常的代码结构。
📌显示答案
1 | TRY. |
调用必须位于 TRY 和 ENDTRY 之间。异常在 CATCH 块中捕获。
第 9 题 - 静态与实例 [analysis]
比较静态方法和实例方法。分别在什么情况下使用?
📌显示答案
静态方法:无需实例化即可调用(
class=>method)。当函数不需要对象特定的状态时使用。实例方法:需要先执行 CREATE OBJECT(ref->method)。当每次调用需要独立的属性值时使用。第 10 题 - 构造函数 [recall]
什么是构造函数?它在什么时候执行?
📌显示答案
CONSTRUCTOR 是一种特殊方法,在 CREATE OBJECT 后自动执行。它用于初始化实例的属性。构造函数的输入参数在 CREATE OBJECT 语句中提供。
📌模式总结(点击展开)
| 关键词 | 答案 |
|---|---|
| 局部模块化 | 子程序 + 局部类方法 |
| 全局模块化 | 函数模块 + 全局类方法 |
| 封装性 | 仅通过接口交换数据 |
| 子程序参数 | USING/CHANGING |
| BAPI 异常 | 不可抛出 — 使用 RETURN 参数 |
| 函数组实例 | 每个上下文一个 |
| 类实例 | 多个(CREATE OBJECT) |
| 静态选择符 | => |
| 实例选择符 | -> |