在SAP R/3 4.0之前,abap完全是面向过程的语言。在这之后才开始慢慢引入面向对象这种技术到系统中,面向对象可以简化系统设计,实现对象封装,继承并使程序易于维护。
面向对象的概念
面向对象的程序设计一般具有如下的特性:封装,继承,多态。
ABAP Objects
ABAP Objects这个概念在4.0之后有双层含义。一方面代表ABAP的运行时的环境,一方面代表新增的面向对象的部分。ABAP的面向对象部分是基于java,C++的模型改来的,并与DCOM,CORBA等外部对象的接口相互兼容。
类和对象
系统中的类有局部和全局类之分,具体的表现就是作用范围不同。全局类由Class Builder开发,保存在系统类库程序(Class Pool)可供所有程序使用。局部类一般只应用在本程序。
类的声明及实现
声明语句:CLASS/ENDCLASS
进行定义。声明部分包括类成员(属性,方法,事件)。实现部分则是方法的具体实现代码。同JAVA一样,类成员也有不同的可见性。
代码部分 | 可见性 |
---|---|
public section | 公有,可以被所有对象使用,包括类方法及子类 |
protected section | 保护,只能被定义的类成员及其派生类使用 |
private section | 私有,只能被类本身的方法使用 |
属性:描绘类的状态,使用
DATA
orCLASS-DATA
定义。class-data用于定义静态类型。定义属性的语句中增加read-only
关键字,则该属性不能被类外部读取但可以被类内部方法所修改。
CONSTANT
语句可用来定义类常量。常量创建后不能在编译和运行期内修改,必须在定义时候指定值,性质类似于静态属性。
TYPES
语句在类中定i数据类型,也相当与静态属性,方法普通的abap程序类似,但是在使用遵循类定义的可见性原则。方法:需要在类的声明和实现两个部分定义。声明部分说明方方法的参数接口,实现部分定义具体功能。定义的语句为
METHOD/ENDMETHOD
.
类定义代码示例:
REPORT Z_CLASS_DEFINITION.
class vehicle definition.
public section.
class-data class_name(10) type c value 'Vehicle'.
methods: accelerate,
show_speed.
protected section.
data speed type i .
endclass.
class vehicle implementation.
method accelerate.
speed = speed + 1.
endmethod.
method show_speed.
write: / 'spedd is :', speed.
endmethod.
endclass.
data: o_vehicle type ref to vehicle,
count type i .
start-of-selection.
create object o_vehicle.
DO 5 TIMES.
call method o_vehicle->accelerate.
ENDDO.
call method o_vehicle->show_speed.