bc 404多态的优雅

             之前一直用c或者汇编写代码,对OO的理解仅限于看过c++ primer。在SK是在无聊,看了BC404和code complete。404里有一段对多态的例子,感觉是在是比面向过程好用。例子如下:

  1.  * Procedural realization of the polymorphism example 
  2.      DATA: plane_list          TYPE TABLE OF plane_list_type, 
  3.             plane              TYPE plane_list_type, ... 
  4.      ... 
  5.      LOOP AT plane_list INTO plane. 
  6.        CASE plane-category. 
  7.           WHEN 'CARGO'
  8.             PERFORM estimate_fuel_consum_for_cargo USING ... 
  9.                                                               CHANGING cargo_fuel. 
  10.             needed_fuel = needed_fuel + cargo_fuel. 
  11.           WHEN 'PASSENGER'
  12.             PERFORM estimate_fuel_consum_for_pass USING ... 
  13.                                                              CHANGING passenger_fuel. 
  14.             needed_fuel = needed_fuel + passenger_fuel. 
  15.        ENDCASE. 
  16.      ENDLOOP. 

              csdn好像不能插入ABAP代码。可以看到对于计算同一飞机耗油的计算如果有不同方法那么就用if来判断,再加上类型判断。如果用了OO,看下面我写的加法例子:

  1. INCLUDE zcalc.

    DATA: ref_calc1 TYPE REF TO calc,
          ref_calc2 
    TYPE REF TO calc2,
          ref_table_calc 
    TYPE TABLE OF REF TO calc,
          ref_wa         
    TYPE REF TO calc,
          
    sum TYPE i.

    START-
    OF-SELECTION.

      
    CREATE OBJECT: ref_calc1.
      
    APPEND ref_calc1 TO ref_table_calc.
      
    CREATE OBJECT: ref_calc2.
      
    APPEND ref_calc2 TO ref_table_calc.

      
    LOOP AT ref_table_calc INTO ref_wa.
        
    CALL METHOD ref_wa->add
          
    EXPORTING
            a1 = 
    23
            a2 = 
    23.
        
    CALL METHOD ref_wa->print.
      
    ENDLOOP.

    Include里类的定义如下:

    CLASS calc DEFINITION.
      
    PUBLIC SECTION.
        
    METHODSadd IMPORTING a1 TYPE i
                                a2 
    TYPE i,
                 
    print.
    *  PRIVATE SECTION.
        
    DATAsum TYPE i.       "sum作为私有变量子类继承时调用print会出现问题
    ENDCLASS.                    "calc DEFINITION

    *----------------------------------------------------------------------*
    *       CLASS calc DEFINITION
    *----------------------------------------------------------------------*
    *
    *----------------------------------------------------------------------*
    CLASS calc IMPLEMENTATION.
      
    METHOD add.
        
    sum = a1 + a2.
      
    ENDMETHOD.                    "calc
      
    METHOD print.
        
    WRITE:/ 'sum is' , sum LEFT-JUSTIFIED.
      
    ENDMETHOD.                    "print
    ENDCLASS.                    "calc DEFINITION

    *----------------------------------------------------------------------*
    *       CLASS calc2 DEFINITION
    *----------------------------------------------------------------------*
    *
    *----------------------------------------------------------------------*
    CLASS calc2 DEFINITION INHERITING FROM calc.
      
    PUBLIC SECTION.
        
    METHODSadd REDEFINITION.
      
    PRIVATE SECTION.
        
    DATA sum1 TYPE i.
    ENDCLASS.                    "calc2 DEFINITION

    *----------------------------------------------------------------------*
    *       CLASS calc2 IMPLEMENTATION
    *----------------------------------------------------------------------*
    *
    *----------------------------------------------------------------------*
    CLASS calc2 IMPLEMENTATION.
      
    METHOD add.
        
    sum = a1 + 2 * a2.
      
    ENDMETHOD.                    "add
    ENDCLASS.                    "calc2 IMPLEMENTATION

  2.   可以看到一个loop就解决了,如果添加修改只用多继承一个类。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值