Переопределение ABAP: изучение различных методов с примерами кода

В ABAP (расширенное программирование бизнес-приложений) термин «переопределить» относится к возможности переопределить или изменить поведение существующего метода в суперклассе. Эта мощная функция позволяет разработчикам расширять функциональность предопределенных классов и адаптировать их к конкретным требованиям. В этой статье блога мы рассмотрим различные методы переопределения ABAP и предоставим примеры кода, демонстрирующие их использование.

Метод 1: переопределение
Наиболее распространенным методом переопределения ABAP является переопределение, при котором подкласс предоставляет собственную реализацию метода, объявленного в суперклассе. Вот пример:

CLASS superclass DEFINITION.
  PUBLIC SECTION.
    METHODS print_message.
ENDCLASS.
CLASS superclass IMPLEMENTATION.
  METHOD print_message.
    WRITE: 'This is the superclass method.'.
  ENDMETHOD.
ENDCLASS.
CLASS subclass DEFINITION INHERITING FROM superclass.
  PUBLIC SECTION.
    METHODS print_message REDEFINITION.
ENDCLASS.
CLASS subclass IMPLEMENTATION.
  METHOD print_message.
    WRITE: 'This is the subclass method.'.
  ENDMETHOD.
ENDCLASS.
DATA obj TYPE REF TO subclass.
CREATE OBJECT obj.
CALL METHOD obj->print_message.

Выход:

This is the subclass method.

Здесь подкласс subclassпереопределяет метод print_message, унаследованный от суперкласса superclass. Когда метод вызывается для экземпляра подкласса, он выполняет реализацию подкласса.

Метод 2: вызов суперкласса
В некоторых случаях вам может потребоваться улучшить поведение метода суперкласса, не переопределяя его полностью. Синтаксис SUPER->method_nameпозволяет вызывать метод суперкласса внутри подкласса. Вот пример:

CLASS subclass DEFINITION INHERITING FROM superclass.
  PUBLIC SECTION.
    METHODS print_message REDEFINITION.
ENDCLASS.
CLASS subclass IMPLEMENTATION.
  METHOD print_message.
    WRITE: 'Before superclass call.'.
    SUPER->print_message( ).
    WRITE: 'After superclass call.'.
  ENDMETHOD.
ENDCLASS.
DATA obj TYPE REF TO subclass.
CREATE OBJECT obj.
CALL METHOD obj->print_message.

Выход:

Before superclass call.
This is the superclass method.
After superclass call.

В этом примере подкласс subclassпереопределяет метод print_message. Однако, используя SUPER->print_message(), он вызывает реализацию суперкласса до и после выполнения своей собственной логики.

Метод 3: переопределение на основе событий
ABAP также поддерживает переопределение на основе событий, при котором подкласс может определить свой собственный обработчик для события, вызванного суперклассом. Вот пример:

CLASS superclass DEFINITION.
  PUBLIC SECTION.
    EVENTS event_raised.
    METHODS raise_event.
ENDCLASS.
CLASS superclass IMPLEMENTATION.
  METHOD raise_event.
    RAISE EVENT event_raised.
  ENDMETHOD.
ENDCLASS.
CLASS subclass DEFINITION INHERITING FROM superclass.
  PUBLIC SECTION.
    METHODS event_handler FOR EVENT event_raised OF superclass.
ENDCLASS.
CLASS subclass IMPLEMENTATION.
  METHOD event_handler FOR EVENT event_raised OF superclass.
    WRITE: 'Event handled by subclass.'.
  ENDMETHOD.
ENDCLASS.
DATA obj TYPE REF TO subclass.
CREATE OBJECT obj.
SET HANDLER obj->event_handler FOR obj.
CALL METHOD obj->raise_event.

Выход:

Event handled by subclass.

В этом примере суперкласс superclassопределяет событие event_raisedи метод raise_eventдля запуска этого события. Подкласс subclassопределяет обработчик события event_handlerдля события и предоставляет собственную реализацию.

Переопределение ABAP — это мощная функция, позволяющая разработчикам изменять поведение методов объектно-ориентированным способом. В этой статье мы рассмотрели три различных метода переопределения ABAP: переопределение, вызов суперкласса и переопределение на основе событий. Используя эти методы, разработчики могут расширять и адаптировать существующие классы ABAP для удовлетворения конкретных требований.