ABAP 对象

ABAP 对象

🎯 对象的概念

对象是一种特殊类型的变量,具有不同的==特征==和==行为==。对象的特性或属性用于描述对象的==状态==,行为或方法表示对象执行的==动作==。

对象是类的==实例==。它表示真实世界的实体,例如人或编程实体,如变量和常量。

对象的三个主要特点

特点 说明
==状态== 由一组属性及其值描述
==唯一身份== 每个对象有独一无二的标识
==行为== 在一段时间内属性中发生的变化
ℹ️状态 vs 行为
  • 对象的状态可以被描述为一组属性及其值。例如,银行帐户具有一组属性:帐号、名称、帐户类型、余额。
  • 对象的行为是指在一段时间内在其属性中发生的更改。

🔍 对象的唯一性

每个对象具有==唯一的标识==,可以用于将其与其他对象区分开。两个对象可以表现出相同的行为,并且它们可以具有或不具有相同的状态,但它们从不具有相同的身份

两个人可能具有相同的姓名、年龄和性别,但他们不相同。类似地,对象的身份在其整个生命周期永远不会改变。

^object-uniqueness

📋 对象交互

对象可以通过==发送消息==来相互交互。对象包含用于操作数据的==数据==和==代码==。对象也可以在类的帮助下用作用户定义的数据类型。

对象也称为==类型类的变量==。定义类后,可以创建属于该类的任意数量的对象。每个对象都与创建它的类型类的数据相关联。



graph TD
    A[类 Class] -->|实例化| B[对象1]
    A -->|实例化| C[对象2]
    A -->|实例化| D[对象N]
    B -->|发送消息| C
    C -->|发送消息| D
    D -->|发送消息| B

🏗️ 创建对象

对象创建通常包括以下步骤:

1. 创建引用变量

引用类创建引用变量,其语法是:

1
DATA: <object_name> TYPE REF TO <class_name>.

2. 创建对象实例

从引用变量创建对象,其语法是:

1
CREATE OBJECT: <object_name>.
💡两步创建流程
  1. 先声明 TYPE REF TO — 创建引用变量(指针)
  2. CREATE OBJECT — 在内存中分配实际对象
    两步缺一不可,引用变量只是指向对象的”遥控器”。


graph LR
    A["DATA lo_obj TYPE REF TO zcl_class"] --> B["引用变量(指针)"]
    B -->|"CREATE OBJECT lo_obj"| C["实际对象(内存)"]
    C -->|"lo_obj->method()"| D["访问对象成员"]

💡 示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
REPORT zdemo_object.
CLASS Class1 DEFINITION.
PUBLIC SECTION.
DATA: text1(45) VALUE 'ABAP Objects.'.
METHODS: Display1.
ENDCLASS.

CLASS Class1 IMPLEMENTATION.
METHOD Display1.
WRITE:/ 'This is the Display method.'.
ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
DATA: Class1 TYPE REF TO Class1.
CREATE OBJECT: Class1.
WRITE:/ Class1->text1.
CALL METHOD: Class1->Display1.

输出结果

1
2
ABAP Objects.
This is the Display method.
💥代码解析
  • CLASS Class1 DEFINITION — 定义类的结构(属性和方法声明)
  • CLASS Class1 IMPLEMENTATION — 实现类的方法逻辑
  • TYPE REF TO Class1 — 创建指向 Class1 的引用变量
  • CREATE OBJECT: Class1 — 实例化对象
  • Class1->text1 — 使用 -> 运算符访问对象成员
  • CALL METHOD: — 调用对象方法

⚠️ 注意事项

  • 对象是==类的实例==,每个对象有==唯一标识==
  • 对象通过==消息==进行交互
  • 可以创建==多个对象实例==
  • 使用 -> 运算符访问对象的属性和方法
  • 引用变量为空时访问成员会导致 CX_SY_REF_IS_INIT 异常