ABAP 封装
ABAP 封装
📖 简介
封装(Encapsulation)是一种面向对象编程(OOP)核心概念,它将数据和功能绑定在一起,操作数据,并保持两者免受外部干扰和误用。
🔄 封装的核心概念
- 数据封装:将数据和相关功能打包在一起
- 数据隐藏:保护内部数据不被外部直接访问
- 接口暴露:只对外暴露必要的接口
- 实现隔离:隐藏内部实现细节
💡 重要提示 - 数据封装导致了数据隐藏的重要OOP概念。封装是捆绑数据和使用它们的函数的机制,数据抽象是一种仅暴露接口并向用户隐藏实现细节的机制。
🔒 访问控制
ABAP中的访问修饰符
| 修饰符 | 访问级别 | 描述 |
|---|---|---|
PRIVATE |
私有 | 仅在类内部可见 |
PROTECTED |
受保护 | 在类及其子类中可见 |
PUBLIC |
公共 | 外部可访问 |
默认行为
ABAP默认规则:
- 类中定义的所有项目默认都是私有的
- 这种设计强制良好的封装实践
graph TB
A[类内部] -->|可访问| B[Private成员]
A -->|可访问| C[Protected成员]
A -->|可访问| D[Public成员]
E[外部访问] -->|不可访问| B
E -->|不可访问| C
E -->|可访问| D
📝 接口封装示例
封装实际上意味着一个属性和方法可以在不同的类中修改。因此,数据和方法可以具有不同的形式和逻辑,可以隐藏以分离类。
🔗 接口封装原理
当我们需要在不同的类中创建具有不同功能的一个方法时,使用接口。这里方法的名称不需要改变。相同的方法必须在不同的类实现中实现。
📊 示例程序
1 | REPORT zencap1. |
📝 输出结果
1 | Class 1 Interface method |
🔍 代码解析
graph LR
A[接口inter_1] --> B[Class1]
A --> C[Class2]
B --> D[实现method1]
C --> D
- 接口定义:声明了公共的接口契约
- 类实现:两个类都实现了相同接口
- 不同实现:相同的方法名,不同的实现逻辑
- 统一调用:通过相同的接口引用调用不同实现
🏗️ 封装的优势
📈 降低耦合度
封装的类对外界没有很多依赖。此外,他们与外部客户端的交互通过稳定的公共接口进行控制。也就是说,封装类及其客户端松散耦合。
🔧 提高可重用性
在大多数情况下,具有定义良好的接口的类可以插入到另一个上下文中。当设计正确时,封装类成为可重用的软件资产。
🛡️ 增强可维护性
- 内部修改:内部实现可以随时修改而不影响外部调用者
- 接口稳定:对外暴露的接口保持稳定
- 减少副作用:内部变化不会影响外部代码
💡 设计策略
最佳实践
默认私有化
1
2
3
4
5
6
7
8CLASS my_class DEFINITION.
PRIVATE SECTION.
DATA: internal_data TYPE string.
PROTECTED SECTION.
METHODS: internal_method.
PUBLIC SECTION.
METHODS: public_method.
ENDCLASS.最小暴露原则
- 只暴露必要的接口
- 避免暴露内部实现细节
- 限制外部访问权限
接口设计
- 设计稳定且易于理解的接口
- 保持接口的向后兼容性
- 避免频繁变更公共接口
📋 设计检查清单
| 设计原则 | 实践方式 |
|---|---|
| 数据隐藏 | 使用private修饰符保护数据 |
| 接口稳定 | 避免频繁修改公共接口 |
| 功能内聚 | 相关功能放在同一类中 |
| 低耦合 | 最小化类之间的依赖关系 |
🎯 应用场景
1. 数据保护
1 | CLASS bank_account DEFINITION. |
2. 业务逻辑封装
1 | CLASS order_processor DEFINITION. |
3. 工厂模式实现
1 | CLASS factory DEFINITION. |