OO特点是什么,封装,多态,继承. 在当下流行的编程语言中, 支持面向对象成为了最大的共同点,比如JAVA, C#.等. 而对于ABAP语言, 90年代后期, SAP对ABAP/4进行了扩展以支持面向对象, 称之为ABAP Objects. 其广泛应用在如SAP EnjoySAP controls, RTTS, Workflow, WebDynpro等之中. 比如说NW7.0中ALV的OO模型,将List与Grid的实现进行封装到一个类中, 而你只需要更改一下构造参数即可分别支持List与Grid输出.
ABAP Objects 同其它支持OO的语言一样也支持封装,多态,继承. 而比较有意思的一点是其在语言级别支持定义事件,使得在ABAP中非常容易实现订阅—发布机制. 这跟在JAVA中支持观察者模式差不多, 都是在当一个对象的状态发生改变时,可以通知多个依赖于它的对象, 而发布者对于有哪些订阅者并不感兴趣, 从而将两者之间的关系松耦合.事件发生时, 事件的触发者并不知道有哪些对象会作出回应, 其对事件如何进行处理.
看个实例
场景: 一个产品当改变价格时,需要通知多个客户, 价钱已更改, 另外由日志类记录日志.
1. 定义事件
priceChanged
CLASS lcl_product DEFINITION.
PUBLIC SECTION.
EVENTS: pricechanged.
PRIVATE SECTION.
DATA: price TYPE i.
ENDCLASS. "lcl_product DEFINITION
2. 定义如何触发
CLASS lcl_product DEFINITION.
PUBLIC SECTION.
EVENTS: pricechanged.
METHODS:
raise_event.
PRIVATE SECTION.
DATA: price TYPE i.
ENDCLASS. "lcl_product DEFINITION
CLASS lcl_product IMPLEMENTATION.
METHOD raise_event.
WRITE: / '------------------------------------'.
WRITE: / 'Before event trrigger'.
RAISE EVENT pricechanged.
WRITE: / 'After event trrigger'.
WRITE: / '------------------------------------'.
ENDMETHOD. "raise_event
ENDCLASS. "lcl_product IMPLEMENTATION
3. 定义事件处理
*----------------------------------------------------------------
* CLASS lcl_customer
*----------------------------------------------------------------
CLASS lcl_customer DEFINITION.
PUBLIC SECTION.
METHODS:
handle_price_changed FOR EVENT pricechanged OF lcl_product
IMPORTING sender.
ENDCLASS. "lcl_customer DEFINITION
CLASS lcl_customer IMPLEMENTATION.
METHOD handle_price_changed.
WRITE: / ' Customer handle changed price'.
ENDMETHOD. "handle_price_changed
ENDCLASS. "lcl_customer IMPLEMENTATION
*----------------------------------------------------------------
* CLASS lcl_logger
*----------------------------------------------------------------
CLASS lcl_logger DEFINITION.
PUBLIC SECTION.
METHODS:
handle_price_changed FOR EVENT pricechanged OF lcl_product
IMPORTING sender.
ENDCLASS. "lcl_logger DEFINITION
CLASS lcl_logger IMPLEMENTATION.
METHOD handle_price_changed.
WRITE: / ' Logger log changed price'.
ENDMETHOD. "handle_price_changed
ENDCLASS. "lcl_logger IMPLEMENTATION
4. 注册事件处理
* Create object instances
CREATE OBJECT grf_product.
CREATE OBJECT grf_customer.
CREATE OBJECT grf_logger.
* Register event
SET HANDLER grf_customer->handle_price_changed FOR grf_product.
SET HANDLER grf_logger->handle_price_changed FOR grf_product.
* Trigger event
grf_product->raise_event( ).
很美妙的事情, 我们并不需要直接发送消息给客户,日志类,就可以让他们知道价格已更改, 从而使代码松耦合.
分享到:
相关推荐
ABAP中的事件处理使用`RAISE EVENT`和`HANDLE EVENT`关键字。 7. **构造函数与析构函数**:构造函数在对象创建时被调用,用于初始化对象的状态;析构函数在对象销毁前执行,释放资源。在ABAP中,`CONSTRUCTOR`和`...
在ABAP中,ALV(Application List Viewer)是用于显示表格数据的强大工具之一。在处理大量数据时,ALV提供了丰富的功能来优化数据展示,包括排序、过滤、分组等操作。其中,序号控制是ALV中的一个重要功能,特别是在...
本文将详细介绍如何使用面向对象编程(Object-Oriented Programming,OOP)在SAP ABAP中实现ALV框的可编辑功能。 首先,我们需要定义一个事件接收器类(Event Receiver Class),用于处理ALV框中的事件。在这个类中...
`CLASS`,`DEFINITION`,`ENDCLASS`,`CREATE OBJECT`等关键字用于创建和使用类。 11. **数据库访问**: ABAP提供了丰富的数据库操作功能,如`SELECT`,`INTO`,`FROM`,`WHERE`用于查询数据库,`UPDATE`和`DELETE...
lo_grid->set_event_handler( EXPORTING event_handler = lo_grid_handler ). lo_grid->display( ). ``` 这段代码首先定义了一个包含材料编号和工厂编号的简单数据表`lv_data_tab`。然后创建了一个`cl_salv_table`...
2. 报表(Reports):报表主要用于读取数据库并生成数据列表,它们是独立的程序模块,根据不同的事件(Depending Event)进行调用。 3. 对话(Dialog):对话模块专门处理与数据库交互的事务处理,如屏幕参数输入,...
ABAP 有三种类型的处理块:Event blocks、Dialog Modules、Procedures。只有 Procedures 可以拥有自己的局部变量,而且程序语句是内部调用,而前两者处理块之间实行外部调用。 四、应用程序类型 应用程序类型可以...
- ABAP支持面向对象编程,包括类(Class)、对象(Object)和继承(Inheritance)。 - ABAP的对象模型基于公共接口(Interface)和抽象类(Abstract Class)。 - 构造函数(Constructor)用于创建对象,析构函数...
2. 对象(Object):类的实例,具有类定义的属性和行为。 3. 继承(Inheritance):一个类可以继承另一个类的属性和方法。 4. 封装(Encapsulation):通过访问控制(PUBLIC, PROTECTED, PRIVATE)来保护数据和方法...
ABAP4引入了面向对象的概念,如类(CLASS)、对象(OBJECT)、继承(INHERITING FROM)、多态性(OVERLOADING)、接口(INTERFACE)等,使得代码更易于维护和扩展。 五、数据库访问 ABAP4提供了一系列的数据库通信...
- **对象(Object)**:对象是类的实例,它拥有类定义的属性和方法。每个对象都可以有自己的状态,即属性值的独立副本。 2. **继承(Inheritance)**: - ABAP Objects支持单继承,一个类可以从另一个类继承其...
CREATE OBJECT lo_cl_salv_table. lo_cl_salv_table->initialize( ). lo_cl_salv_table->set_table_for_first_display( itab = lt_data ). lo_cl_salv_table->display( ). ``` #### 四、注意事项 - **性能考虑**: ...
根据提供的文件信息,我们可以推断出这是一份与ABAP(Advanced Business Application Programming)认证测试相关的文档,专注于面向对象编程(Object-Oriented Programming, OOP)的概念和技术。以下是对文档中提到...
* IMPORTINGe_objecte_interactive, user_command FOREVENTuser_commandOFcl_gui_alv_grid IMPORTINGe_ucomm, handle_data_changed FOREVENTdata_changedOFcl_gui_alv_grid IMPORTINGer_data_changed. ...
ABAP中的event有很多,如01(显示)、02(输入)、03(新增)、04(修改)、05(删除)等,每个event都有其特定的用途和行为。 4. 对于参数的使用,需要特别注意Unicode系统和non-Unicode系统的不同。在non-Unicode...
CREATE OBJECT go_event_field EXPORTING io_alv = go_alv_field i_f4_form = 'HANDLE_F4' i_toolbar_form = 'HANDLE_TOOLBAR_FIELD' i_user_command_form = 'HANDLE_USER_COMMAND_FIELD' i_double_click_form...
1. **Object Navigator (SE80)** 是ABAP开发的核心工具,提供了对所有ABAP对象的访问,如程序、功能模块、类等。其他常用事务代码包括: - **SE38**:用于编辑和运行ABAP报告。 - **SE24**:用于编辑和维护ABAP类...
2. OIF(Object Instance Floorplan):使用的时候引用 FPM_OIF_COMPONENT。进去之后默认只有一个 Tab UIBB 为主界面,所有其它的 UIBB 要加到这个 Tab UIBB 中去,缺点就是 raise 出来的 event 只有当前显示的那个 ...