面向对象编程模型
面向对象编程模型 (★★★)
#abap-objects #oo-basics
概览表
| 项目 | 关键点 |
|---|---|
| 过程式模型 | 数据与函数分离,全局变量可被任意访问 |
| 函数组 | 封装数据与服务,但只能有一个实例 |
| OO模型 | 封装 + 多实例化 + 继承 + 多态 |
过程式编程模型
数据和函数通常分开存储:
- 全局变量存储数据
- 子程序(Subroutines) 存储函数
- 每个子程序都可以访问任何变量 → 无法保证一致的数据访问
典型过程式ABAP程序结构:
1 | 类型定义 + 数据声明 (数据) |
⚠️过程式模型的风险
主程序层面上,全局数据对象没有特殊保护。任何地方都可以读写全局变量。
使用函数组实现封装
函数组提供了一定程度的封装:
- 函数组加载到独立内存区域
- 主程序只能通过函数模块访问函数组的数据
- 不能直接访问函数组的全局数据
1 | ┌─────────────────┐ ┌──────────────────┐ |
OO编程的关键特性
| 特性 | 说明 |
|---|---|
| 封装 | 对象保护自身数据,外部只能通过公有方法访问 |
| 多实例化 | 同一个类可以创建多个独立的运行时实例 |
| 继承 | 子类继承父类的特征,可以扩展和修改 |
| 多态 | 同一接口可以有不同的实现 |
多实例化 — OO的核心优势
函数组的局限:一个程序中一个函数组只有一个实例。如果要管理多个”车辆”,需要额外的编程和管理工作。
OO编程:可以轻松创建多个独立对象实例:
1 | CLASS LCL_VEHICLE 定义 |
内存管理
1 | ┌── Internal Session ──────────────────────┐ |
考试/测试模式
| 场景/关键词 | 答案 |
|---|---|
| “函数组 vs 类的区别” | 函数组只能单实例,类支持多实例化 |
| “封装在过程式中的实现” | 函数组可以封装,但不够灵活 |
| “OO的主要优势” | 封装 + 多实例 + 继承 + 多态 |
| “对象存储在哪里” | 与主程序相同的内部会话中,但数据区分离 |