第 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 函数模块必须满足的四个技术要求。

📌显示答案
  1. 命名规范:BAPI_<对象>_<方法>
  2. 必须支持远程调用
  3. 不得包含用户对话或消息
  4. 不得抛出异常 — 通过 RETURN 参数报告错误
  5. 参数使用带 BAPI_ 前缀的结构类型

第 7 题 - 类与函数组 [analysis]

函数组和全局类在数据管理方面的关键区别是什么?

📌显示答案
函数组在每个上下文中只能加载一次(单一全局数据集)。全局类可以有多个实例(对象),每个实例都有自己的属性值。这允许不同的数据状态同时存在。

第 8 题 - 异常处理 [application]

一个方法使用基于类的异常。写出调用该方法并处理异常的代码结构。

📌显示答案
1
2
3
4
5
6
TRY.
CALL METHOD cl_class=>method
EXPORTING iv_param = lv_val.
CATCH cx_exception_class.
" 处理错误
ENDTRY.

调用必须位于 TRY 和 ENDTRY 之间。异常在 CATCH 块中捕获。


第 9 题 - 静态与实例 [analysis]

比较静态方法和实例方法。分别在什么情况下使用?

📌显示答案
静态方法:无需实例化即可调用(class=>method)。当函数不需要对象特定的状态时使用。实例方法:需要先执行 CREATE OBJECT(ref->method)。当每次调用需要独立的属性值时使用。

第 10 题 - 构造函数 [recall]

什么是构造函数?它在什么时候执行?

📌显示答案
CONSTRUCTOR 是一种特殊方法,在 CREATE OBJECT 后自动执行。它用于初始化实例的属性。构造函数的输入参数在 CREATE OBJECT 语句中提供。

📌模式总结(点击展开)
关键词 答案
局部模块化 子程序 + 局部类方法
全局模块化 函数模块 + 全局类方法
封装性 仅通过接口交换数据
子程序参数 USING/CHANGING
BAPI 异常 不可抛出 — 使用 RETURN 参数
函数组实例 每个上下文一个
类实例 多个(CREATE OBJECT)
静态选择符 =>
实例选择符 ->