ABAP OO的八大理由(十四)
学会ABAP OO一些简单的语句之后,你就可以通过开发程序直接告诉系统它需要做什么。需要系统做什么是由你明确告诉你的,系统不会做任何隐含的动作。你不需要为了了解系统一些隐含的动作而去读大量的文档,你只需去看程序本身就可以了。
下面的代码演示了如何把一个面向过程的逻辑数据库程序转换为面向对象的逻辑数据库程序,他会变得更加清晰。
CLASS ldb DEFINITION.
PUBLIC SECTION.
METHODS read_spfli.
EVENTS spfli_ready EXPORTING value(values) TYPE spfli.
PRIVATE SECTION.
DATA spfli_wa TYPE spfli.
ENDCLASS.
CLASS ldb IMPLEMENTATION.
METHOD read_spfli.
SELECT * FROM spfli INTO spfli_wa.
RAISE EVENT spfli_ready EXPORTING values = spfli_wa.
ENDSELECT.
ENDMETHOD.
ENDMETHOD.
ENDCLASS.
CLASS report DEFINITION.
PUBLIC SECTION.
METHODS start.
PRIVATE SECTION.
DATA spfli_tab TYPE TABLE OF spfli.
METHODS: get_spfli FOR EVENT spfli_ready OF ldb
IMPORTING values,
Display_spfli.
ENDCLASS.
CLASS report IMPLEMENTATION.
METHOD start.
DATA: ldb TYPE REF TO ldb.
CREATE OBJECT ldb.
SET HANDLER me->ge_spfli FOR ldb.
Ldb->read_spfli().
Display_spfli().
ENDMETHOD.
METHOD get_spfli.
APPEND value TO spfli_tab.
ENDMETHOD.
METHOD display_spfli.
……
ENDMETHOD.
ENDCLASS.
这里值得注意的是与面向过程的逻辑数据库相比面向对象的有了更加明确的接口。通过PUBLIC部分你可以知道这个类都提供了那些外部服务。为了运行这个报表,你可以把这个类与OO事务代码结合起来使用。不像通过GET隐含的处理事件,report类里有明确的处理事件方法get_spfli。并且数据显示部分也从数据处理部分分离出来了。
比较前后这两个例子,你会发现后者只需通过程序本身就可以理解整个程序的功能了。这里不存在任何黑匣子。同时通过这个例子我们也剔出了一种误解,即程序开发的简化并不意味着肯定就是更少的代码,有时并不是这样。当然,如果你想让一个不懂ABAP REPORT的人弄明白面向过程的ABAP程序,你不得不写大量的注释。
从这个例子我们可以明显地看出ABAP oo使得程序变得更加容易理解,易于维护更加可靠。