BC401 - 考试陷阱

考试陷阱 (Exam Traps)

#dashboard #exam-traps

⚠️本笔记的目的
考试中容易出错或混淆的重点陷阱集合。

OO编程模型

Trap: 函数组可以实现封装但无法实现多实例
  • 函数组虽然可以封装数据,但一个程序中一个函数组只有一个实例
  • 只有OO编程才能通过类创建多个独立对象实例
  • OO编程模型

UML建模

Trap: 聚合(Aggregation)与组合(Composition)的区别
  • 聚合: 部分可以独立于整体存在(空心菱形)
  • 组合: 部分不能独立于整体存在(实心菱形),生命周期绑定
  • UML类图

类与对象

Trap: READ-ONLY 只能在 PUBLIC SECTION 中使用
  • READ-ONLY 附加项只能在公有可见性部分声明
  • 外部可以读取但不能修改,只有类内部方法可以修改
  • 类属性与方法
Trap: LIKE 在类中只能用于本地数据对象或SY字段
  • 在类的 DATA 语句中,只能使用 TYPE 引用数据类型
  • LIKE 仅允许用于本地数据对象或 SY-DATE, SY-UNAME 等SY字段
  • 类属性与方法
Trap: CLASS 语句不能嵌套
  • 不能在一个类内部定义另一个类
  • 但可以定义局部辅助类(在全局类中)
  • 类属性与方法

继承

Trap: 构造器不被继承
  • 子类必须自己定义构造器(如果需要)
  • 如果子类定义了构造器,必须调用 super->constructor( )
  • 如果子类没有定义构造器,则使用父类的构造器
  • 继承基础
Trap: 方法的重定义 ≠ 重载
  • ABAP Objects 不支持重载(Overloading) — 不能有多个同名不同参的方法
  • 重定义(Redefinition) 是改变继承方法的实现,不改签名
  • 重定义只能在 PUBLIC 或 PROTECTED SECTION 中进行
  • 继承基础
Trap: PROTECTED SECTION 的语法顺序
  • 定义局部类时,必须遵循: PUBLIC SECTION → PROTECTED SECTION → PRIVATE SECTION
  • 顺序不能颠倒
  • 继承基础

类型转换

Trap: Up-cast vs Down-cast 的命名
  • Up-cast (Widening Cast): 子类→父类,= 赋值,隐式安全
  • Down-cast (Narrowing Cast): 父类→子类,?= 赋值,可能运行时错误
  • 名称容易混淆:up-cast 视角变窄但类型兼容性变宽
  • 类型转换与多态
Trap: Down-cast 何时会失败
  • 当引用变量实际指向的对象不是目标类(或其子类)的实例时
  • 会触发 CX_SY_MOVE_CAST_ERROR 运行时异常
  • 类型转换与多态

接口

Trap: 接口组件的可见性
  • 接口中的所有组件都是公有的 — 接口没有可见性分区
  • 但在实现类中,接口组件通过 ~ 操作符访问
  • 别名(ALIASES)受类的可见性规则约束
  • 接口定义与实现
Trap: 接口不能被实例化
  • CREATE OBJECT ref TYPE intf 是不可能的
  • 只能通过实现了接口的类的实例进行 up-cast
  • 接口多态

事件

Trap: 事件处理器的调用顺序不确定
  • 如果多个方法注册到同一事件,调用顺序不保证
  • 不能依赖处理器的执行顺序
  • ABAP事件
Trap: 事件参数只能通过值传递
  • 事件的 EXPORTING 参数必须 VALUE(...) 传递
  • 处理器中用 IMPORTING 接收
  • SENDER 是预定义的隐式参数
  • ABAP事件
Trap: 注册和取消注册
  • SET HANDLER ... ACTIVATION 'X' = 注册(默认)
  • SET HANDLER ... ACTIVATION ' ' = 取消注册
  • FOR ALL INSTANCES 是唯一能注册尚未创建的对象的方式
  • ABAP事件

异常处理

Trap: 三种异常类的区别
  • CX_STATIC_CHECK: 必须在方法签名中声明或在TRY中处理(默认推荐
  • CX_DYNAMIC_CHECK: 运行时检查,不需要显式声明
  • CX_NO_CHECK: 完全不检查,总是可以传播
  • 不能直接继承 CX_ROOT,必须从三个子类之一继承
  • 异常处理概念
Trap: TRY 块中的异常搜索顺序
  • 从最内层 TRY 块开始搜索 CATCH
  • 按 CATCH 语句的出现顺序检查
  • 如果找到匹配(异常类本身或其父类),跳转到该处理器
  • 找不到则向外层扩展搜索
  • 异常处理概念
Trap: CLEANUP 块的执行时机
  • CLEANUP 只在异常被外层或调用者捕获时执行
  • 如果异常在当前 TRY 块内被捕获,CLEANUP 不执行
  • 异常处理概念

RTTS

Trap: RTTI 获取的描述对象需要 Down-cast
  • DESCRIBE_BY_DATA 返回的是 CL_ABAP_TYPEDESCR 类型引用
  • 需要用 ?= (down-cast) 转换为具体子类如 CL_ABAP_STRUCTDESCR
  • 运行时类型服务

  • [[_posts/SAP_ABAP/BC401_ABAP对象/00-仪表板/学习地图]] → 薄弱领域
  • [[_posts/SAP_ABAP/BC401_ABAP对象/00-仪表板/快速参考]]