ABAP 面向对象学习

2021-11-09 17:38:08 浏览数 (1)

一、面向对象开发特点

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] …

代码语言:javascript复制
"变量定义和方法定义
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. "实例化类

0 人点赞