ABAP OO的八大理由(八)

原因三:代码重用性
代码重用性是软件维护和开发的一个重要衡量指标。我们应当把一些通用的代码放在一个中心库里,而无须一遍一遍的重复编写功能相似的代码。下面就在代码重用方面检查一下ABAP OO和ABAP OP孰优孰劣。
面向过程的代码重用性
在面向过程的模式中没有什么专门的机制来支持代码的重用性。你可以定义通用的过程,但是如果你想在特殊情况下使用通用代码,你不得不建立很庞大的模块池,每个功能模块又不得不有复杂的参数,而每个功能模块中你又不得不使用复杂的分支语句,例如SWITCH CASE.。
比如为了给银行账号加入两个特殊的账号,检查账号和存款账号,我们不得不修改我们的程序以支持这种变化。下面的例子演示了对功能模块withdraw的修改。
FUNCTION withdraw.
CASE kind.
WHEN ‘C’.
     PERFORM withdraw_from_checking_account USING id amount.
WHEN ‘S’.
PERORM withdraw_from_savings_account USING id amount.  
WHEN OTHERS.
    RAISE EXCEPTION TYPE cx_unknown_account_type.
  ENDCASE.
ENDFUNCTION.
FORM withdraw_from_checking_account.
      USING i_id TYPE accounts-id
             Amount TYPE accounts-amount.
DATA: account_wa TYPE accounts.
READ TABLE account_tab WITH TABLE KEY id = i_id
        INTO account_wa.
Account_wa-amount = account_wa-amount – amount.
MODIFY TABLE account_tab FROM account_wa.
IF account_wa-amount < 0.
    ………..
ENDIF.
ENDFORM.
FORM withdraw_from_savings_account.
      USING i_id TYPE accounts-id
             Amount TYPE accounts-amount
RAISING cx_negative_amount..
DATA: account_wa TYPE accounts.
READ TABLE account_tab WITH TABLE KEY id = i_id
        INTO account_wa.
IF account_wa-amount > i_amount.
Account_wa-amount = account_wa-amount – amount.
MODIFY account_tab FROM account_wa.
ELSE.
    RAISE cx_negative_amount.
ENDIF.
ENDFORM.
这样你就不得不怎加新的参数帐户类型了
在这个例子中还得增加新的例外信息,即如果帐户类型不在合理范围之内的情况。
最终为了实现对不同的帐户类型采取不同的处理逻辑,那么你就不得不写两个form来分别处理两种不同的情况。通过CASE语句来实现分支。
ABAP OO的代码可重用性
在ABAP OO中通过继承来实现代码的可重用性,可以通过通用的父类来派生特殊的子类。这样好处是简单的类既可代替代码庞杂的模块池,简单的方法参数既可代替功能模块复杂的参数,最重要的是通过继承实现了类的多态。这样就实现了子类的对象仍然可以使用父类的方法。这大大增强了软件开发的建模能力。

posted @ 2011-01-05 15:37  Kaming's SAP  阅读(132)  评论(0编辑  收藏  举报