Oop ABAP活动的目的是什么?
从a学习ABAP,我开始学习对象/类事件。我知道其他语言(如C#/WinForms)中的事件是GUI中的用户操作(如按钮单击)与交互后执行的某些代码之间的连接。也有可能从代码中触发此类事件以模拟用户操作,这有时很有用Oop ABAP活动的目的是什么?,oop,events,abap,Oop,Events,Abap,从a学习ABAP,我开始学习对象/类事件。我知道其他语言(如C#/WinForms)中的事件是GUI中的用户操作(如按钮单击)与交互后执行的某些代码之间的连接。也有可能从代码中触发此类事件以模拟用户操作,这有时很有用 本书以raiseevent语句结束示例,该语句从代码手动触发事件。在其他在线来源(例如,,)中也是如此。如果我可以直接调用object方法,我看不出有任何理由从代码中引发事件。对我来说,这似乎是不必要的代码层。在ABAP中使用事件的目的或好处是什么?我错过了什么?谢谢你的评论;他们
本书以
raiseevent
语句结束示例,该语句从代码手动触发事件。在其他在线来源(例如,,)中也是如此。如果我可以直接调用object方法,我看不出有任何理由从代码中引发事件。对我来说,这似乎是不必要的代码层。在ABAP中使用事件的目的或好处是什么?我错过了什么?谢谢你的评论;他们让我走上了正确的道路。许多资料来源的问题在于,它们显示了一个非常简单的例子,事件并没有带来任何好处。这与对几行代码使用OOP相同,或者使用递归代替简单循环。这样简单的例子有助于学习语法,但不足以理解其目的或好处
在一个类中使用事件和处理程序对我来说没有多大意义。大多数示例都有两个类(仍然将可以单独使用的东西放在一起)。对我来说,一个包含三段独立代码的示例带来了最大的好处。据我了解,重点是:
EVENTS
定义的事件。类A不需要引用其他类。用我的话说:一些对其他人来说有趣的情况可能发生在内部。该类不了解外部世界(没有依赖性),但它可以向世界发出发生这种情况的信号raise event
从其内部代码引发(激发、触发)事件。用我的话来说:这种情况是在外面(向任何可能关心和订阅的人)广播的方法-for EVENT–OF
定义类A的方法/处理程序。这个类需要知道类A及其事件。用我的话说:类B提供了处理类A中可能出现的情况的代码SET handler-FOR
使用此处理程序。最重要的是,它也可以是来自不同于B类的另一个处理程序。用我的话说:当使用类A时,我可以通过从A不知道的一系列合适的处理程序中进行选择,轻松设置A中的情况发生后会发生什么CLASS lcl_class_a DEFINITION.
PUBLIC SECTION.
DATA a1 TYPE I.
EVENTS: my_event.
METHODS: method_raising_event.
ENDCLASS.
CLASS lcl_class_a IMPLEMENTATION.
METHOD method_raising_event.
"some working code would be here
RAISE EVENT my_event.
ENDMETHOD.
ENDCLASS.
CLASS lcl_class_b DEFINITION.
PUBLIC SECTION.
"This methods could be run after the event.
METHODS: handle_event1 FOR EVENT my_event OF lcl_class_a,
handle_event2 FOR EVENT my_event OF lcl_class_a.
ENDCLASS.
CLASS lcl_class_b IMPLEMENTATION.
METHOD handle_event1.
WRITE: / 'Event in class raised'.
ENDMETHOD.
METHOD handle_event2.
" Some code, e.g. logging to a file.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA(object_a) = new lcl_class_a( ).
DATA(object_b) = new lcl_class_b( ).
"Binding event and handler.
SET HANDLER object_b->handle_event1 FOR object_a.
CALL METHOD object_a->method_raising_event.
补充:
- 在实际场景中,在类B(处理程序)的对象中引用类A(raiser)的对象是很有用的。您可能需要从A类获得有关该事件的附加信息,但这不是必需的
- 可以将多个处理程序附加到一个事件
很高兴阅读关于我答案的评论。-同样的问题,请阅读答案
引发事件
不是SAP GUI中的用户操作所特有的,它是面向对象编程语言中事件的概念,用于松耦合、关注点分离等。@JozsefSzikszai,老实说,这些链接上没有提供太多答案,只有低耦合:)听到更广泛的内容会很有趣。@Suncatcher:对不起,这是第一个答案。它很好地解决了jcjr“面向对象中的事件”提出的问题,也实现了。它可以在类之外,但大多数情况下,设置处理程序
与处理程序方法在同一个类中(METHODS…FOR EVENT…OF…
)