SAP 公司于 1999 年发布了面向对象的 ABAP,但实际开发中更多的是面向过程的开发方式。本文简单介绍面向对象的初步。
如果我们需要使用一个对象,我们需要做下面几项工作:
- 定义一个类
- 创建一个对象,或者称为对象的实例 (object instance)
- 调用对象的方法
假设我们需要开发一个银行账户管理的程序,包含存款、取款、余额查询的功能。如果使用 ABAP 的数据类型,UML 类图如下:
代码如下:
REPORT z_oop_hello_world.
* lcl_account class definition
CLASS lcl_account DEFINITION.
PUBLIC SECTION.
TYPES:
ty_balance TYPE p LENGTH 10 DECIMALS 2.
METHODS:
constructor IMPORTING p_id TYPE string,
deposit IMPORTING p_amount TYPE p,
withdraw IMPORTING p_amount TYPE p,
get_balance RETURNING value(r_balance) TYPE ty_balance .
PRIVATE SECTION.
DATA:
id TYPE string,
balance TYPE p DECIMALS 2.
ENDCLASS.
* lcl_account class implementation
CLASS lcl_account IMPLEMENTATION.
METHOD constructor.
id = p_id.
balance = '0.00'.
ENDMETHOD.
METHOD deposit.
balance = balance + p_amount.
ENDMETHOD.
METHOD withdraw.
balance = balance - p_amount.
ENDMETHOD.
METHOD get_balance.
r_balance = balance.
ENDMETHOD.
ENDCLASS.
DATA: lo_account TYPE REF TO lcl_account,
lv_balance TYPE f.
START-OF-SELECTION.
CREATE OBJECT lo_account EXPORTING p_id = '3001'.
CALL METHOD lo_account->deposit
EXPORTING
p_amount = '2000.00'.
CALL METHOD lo_account->withdraw
EXPORTING
p_amount = '600.00'.
lv_balance = lo_account->get_balance( ).
WRITE: / '存款余额:', lv_balance EXPONENT 0 DECIMALS 2 LEFT-JUSTIFIED.
代码说明:
-
完整的 class 代码包含定义 (definition) 和实现 (implementation) 两部分。在定义部分,对数据类型、变量、方法进行声明。
-
在声明部分,
public section
必须在private section
前面。 -
构造函数 (constructor): 名称始终为
constructor
,与其他主流语言的构造函数与类名同名不同。 -
如果
p
类型作为方法的返回值,因为p
并不是一个 full specified type,检查时解释器会提示如下错误:The type of a RETURNING parameter must be fully specified.
所以通过声明一个 ty_balance
自定义类型的方法解决。
网友评论