一、面向对象开发特点
1、抽象(Abstraction)
抽象客观世界实体的模块化
2、封装(Encapsulation)
把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
3、集成(Inheritance)
使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展
4、多态(Polymorphism)
父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。
二、类与对象
1、 什么是对象?
- 类=>类型,对象=>个体
- 要使用所需功能的对象,首先要经过类定义对象的过程
- 根据类创建对象的过程称为实例化,根据类
2、CLASS
类是创建对象的模板
3、OBJECT
对象是类的实例
4、类的分类
全局类(Global)
- 存储在类池中(Class Library in the Repository)
- 所有ABAP程序都可以对其进行访问
- 事物代码SE24
本地类(Local)
- 在程序中定义
- 只有该程序可以使用
三、程序中类的创建
1、定义类的构成项目(属性、方法、事件)
- CLASS < class > DEFINITION 要素声明 所有项目都需要定义在三个访问区域之一中 ENDCLASS
- 实现类的方法 CLASS IMPLEMENTATION ENDCLASS
2、访问区域
三个访问区域
- Public Section.公有部分 内部可见,外部可见 PUBLIC部分的组件,构成类与用户的接口
- Protected Section. 保护部门 内部可见,集成可见,外部不可见 PROTECTED部分的组件,构成继承类之间的接口
- Private Section. 私有部分 内部可见,集成不可见,外部不可见
四、Class构成要素
构成要素的分类
实例组件(Instance-specific component)
- 参照类创建对象时,内存中存在的项目,每次创建对象时都会被初始化。各个类的对象中都存在
静态组件
- 遇到创建类的语句(CREATE OBJECT)开始,直到程序结束都存储于内存中,是依赖类存在的项目。即使不创建对象,若已存在与内存中即可以直接使用。
- 声明方式:属性:CLASS-DATA;方法:CLASS-METHODS。访问:CLASS=>COMP
类的所有要素在声明部分实现(Class Definition)
- 属性(Attributes) 可以拥有ABAP所有数据类型的类内部数据字段,对象状态由属性决定。DATA/CONSTANTS
- 方法(Method) 用来定义决定对象行为的类内部执行步骤,可以访问类的所有属性,可通过方法修改对象的内容,另外,方法提供传入传出参数,便于用户交互
- 事件(Event) 事件是没有继承关系的类之间可以互相调用彼此方法的特殊方法
属性类型 | ABAP语句 |
---|---|
实例属性 | DATA |
静态属性 | CLASS-DATA |
方法类型 | ABAP语句 |
实例属性 | METHODS |
静态属性 | CLASS-METHODS |
特殊方法 | CONSTRUTOR、CLASS-CONSTRUCTOR、EVENTS |
事件 | ABAP语句 |
事件声明 | EVENTS evt EXPORTING … VALUE(e1 e2) TYPE type |
调用事件(Trigger) | RAISE EVENT evt EXPORTING e1 = f1 e2 = f2 … |
Event Handler声明 | METHODS meth FOR EVENT evt OF cif IMPORTING e1 e2 |
Event Handler注册/登陆 | SET HANDLER h1 h2 [FOR] … |
"变量定义和方法定义
CLASS CL DEFINITION.
PUBLIC SECTION.
DATA: LV_DATA TYPE C LENGTH 20.
METHODS SET_DATA IMPORTING GV_IMP TYPE CHAR20.
METHODS GET_DATA EXPORTING GV_EXP TYPE CHAR20.
EVENTS:TOO_FAST EXPORTING VALUE(P1) TYPE I.
METHODS WRITE_DATA.
ENDCLASS.
"方法的实现
CLASS CL IMPLEMENTATION.
METHOD SET_DATA.
LV_DATA = GV_IMP.
ENDMETHOD.
METHOD GET_DATA.
WRITE LV_DATA.
GV_EXP = LV_DATA.
ENDMETHOD.
ENDCLASS.
"类的使用
DATA OBJ TYPE REF TO CL. “声明对象
CREATE OBJECT: OBJ.实例化类
"方法的调用
CALL METHOD OBJ->SET_DATA
EXPORTING
GV_IMP = '测试1'.
CALL METHOD OBJ->GET_DATA
IMPORTING
GV_EXP = LV_DATA1.
五、TYPE和TYPE REF TO 的区别
TYPE REF TO 用来定义一个数据对象,这个数据对象用来指向另外数据的; TYPE 用来定义一个数据对象,它本身就是一个存储数据的对象,不是用来指向别的数据对象。
DATA OBJ TYPE REF TO CL. 属于ABAP面向对象编程,CL是一个类,OBJ定义了这个类的对象。 CREATE OBJECT:OBJ. "实例化类