ABAP 面向对象程序设计 (02)- 属性和方法
ABAP 中的类,最主要的组件有属性 (attributes) 和方法 (methods) , 构造方法 (constructor) 是一类特殊的方法,在创建对象实例时,构造方法自动运行。
可以从两个角度来看属性和方法,第一个角度是从可见性的角度,属性和方法可分为 public
, protected
和 private
。因为在程序中定义的 local class,只能在本程序中使用,所以下面的规则主要是针对 global class 而言。local class 的范围局限在程序内部。
public
属性和方法,外部可见protected
属性和方法,只在类本身、子类和友元类可见private
属性和方法,只在类本身可见
第二个角度,从对象属性和方法是属于类还是对象的实例,可以区分为静态属性 (static attributes) / 静态方法 (static methods),实例属性 (instance attributes) 和实例方法 (instance methods)。
- 静态属性:属性属于类本身,在各个对象实例之间是共享的,通过
CLASS-DATA
关键字声明,通过类名以及=>
符号调用; - 静态方法:方法属于类本身,在各个对象实例之间是共享的,通过
CLASS-METHODS
关键字声明,通过类名以及=>
符号调用; - 实例属性:属性属于对象的实例 (object instance),通过
DATA
关键字声明,通过对象变量以及->
符号调用; - 实例方法:方法属于对象的实例 (object instance),通过
METHODS
关键字声明,通过对象变量以及->
符号调用
总结:
- 静态属性和方法与类相关,实例属性/方法与对象实例相关,静态属性和方法通过类名 +
=>
符号调用,实例属性和方法通过对象变量 +->
符号调用。 - 静态属性和方法不能访问实例属性和方法,实例属性和方法能访问静态属性和方法。
静态属性和方法的定义
介绍静态属性、静态方法定义和调用的语法。静态方法的主要要点是:静态属性和方法属于类本身,通过类名来访问。调用的时候,不需要创建对象的实例,所以适合不需要创建对象实例的情形。比如在需要数学计算的时候,涉及数学中的一些常量,π 和 e 等,以及数学中的函数计算。没有必要创建 MATH 对象。我们用 Java 定义一个 MyMath 类,代码如下:
同样的功能,在 ABAP 中的实现代码是这样的:
ABAP 比其它语言啰嗦很多:
- 参数需要指定数据类型,由因为 p 不是一个完整的类型,不能直接在参数类型中指定为
class-data a type p
,所以需要提前定义一个数据类型。这是定义 ty_double 的原因。 - 在 Java 中, return xxx 返回方法的结果,但在 ABAP 中,返回值需要用
RETURNING VALUE(rv)
的方法。
静态属性和方法的访问
对上面定义的 lcl_math 类,调用静态属性和方法的语法示例如下。
- 方法定义
importing
调用时对应exporting
- 方法定义
returning
调用时对应receiving
call method 是传统调用对象方法的语法,如果方法只包含 importing 参数和 returning value 参数 (或者没有 returning 参数),调用的语法还可以作如下简化:
result = lcl_math=>pow( x = 25 y = 3 ).
实例属性和方法的定义
接下来定义一个 student 类,用于解释 ABAP 类的属性和方法的要点。首先用 Java 语言实现 student 类:
以上 Student 类有三个要点:
- sid 和 name 是不能改变的,使用 private 来定义。在 Java 中,一般不叫 attributes , 被称为 instance fields
- age 和 currentClass 是可以被改变的,按照 OOP 的设计原则,这些 instance fields 也被定义为 private,但提供 setAge() 方法和 setClass() 方法允许外部访问
- 构造方法 (constructor) 是一类特殊方法,在 Java 中,构造方法与类的名称相同,无返回值。
使用 ABAP 实现 student 类的定义:
实例属性和方法的调用
使用 ABAP 对象需要三步:
- 定义引用类型的变量 (
ref to
关键字):
- 创建对象的实例
在本例中,构造函数有 4 个参数,方法定义时关键字为 importing,调用时对应 exporting 关键字:
- 调用对象的属性和方法
本例中,set_age 方法和 set_class 方法可供调用。传统调用方法的语法如下:
调用的语法可以简化为:
注意 ABAP 调用方法的时候,参数值左右两边都有空格,即使参数为空,也要留一个空格。但括号与方法名之间不能有空格。调用 to_string 方法的语法也可以简化为:
stu_info = s1->to_string( ).
源码
本篇的源代码放在 github - ABAP-OOP-002。
参考
Different ways to call methods in ABAP
文章来自于网络,如果侵犯了您的权益,请联系站长删除!