美文网首页
ABAP 面向对象程序设计 (01)

ABAP 面向对象程序设计 (01)

作者: Stone0823 | 来源:发表于2018-10-01 19:22 被阅读123次

    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 自定义类型的方法解决。

    相关文章

      网友评论

          本文标题:ABAP 面向对象程序设计 (01)

          本文链接:https://www.haomeiwen.com/subject/unknoftx.html