Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- *-----------------------------------------
- *класс с методом умножения числа на 2
- CLASS lcl_example_double DEFINITION FINAL.
- PUBLIC SECTION.
- DATA:
- n TYPE i READ-ONLY.
- METHODS:
- constructor IMPORTING n TYPE i,
- double.
- ENDCLASS.
- CLASS lcl_example_double IMPLEMENTATION.
- METHOD constructor.
- me->n = n.
- ENDMETHOD.
- METHOD double.
- n = n * 2.
- ENDMETHOD.
- ENDCLASS.
- *--------------------------------------------
- * класс с примером подохода процедурного и ФП стиля
- CLASS lcl_example_multi DEFINITION FINAL.
- PUBLIC SECTION.
- METHODS:
- multi
- IMPORTING a TYPE i
- EXPORTING n TYPE i,
- multi_return
- IMPORTING n TYPE i
- a TYPE i
- RETURNING VALUE(return) TYPE i.
- ENDCLASS.
- CLASS lcl_example_multi IMPLEMENTATION.
- METHOD multi.
- n = n * a.
- ENDMETHOD.
- METHOD multi_return.
- return = a * n.
- ENDMETHOD.
- ENDCLASS.
- *--------------------------------
- *пример параметров обязательных и нет
- CLASS lcl_example_parameters DEFINITION FINAL.
- PUBLIC SECTION.
- METHODS:
- test
- IMPORTING a TYPE string
- b TYPE string DEFAULT 'DEFAULT STRING'
- c TYPE string OPTIONAL
- RETURNING VALUE(return) TYPE string.
- ENDCLASS.
- CLASS lcl_example_parameters IMPLEMENTATION.
- METHOD test.
- return = | a= { a } \| b = { b } { COND #( WHEN c IS SUPPLIED THEN | c = { c } OPTIONAL | ELSE | c = empty | ) } |.
- ENDMETHOD.
- ENDCLASS.
- *------------------------------------------
- * пример с наследованием и суперклассами
- CLASS lcl_beg_a DEFINITION.
- PUBLIC SECTION.
- METHODS:
- constructor,
- some_method,
- test_super RETURNING VALUE(return) TYPE string.
- "защищенная может наследоваться
- PROTECTED SECTION.
- DATA: protected_attr TYPE string.
- "приватная секция не наследуется
- PRIVATE SECTION.
- DATA: priv_attr TYPE string VALUE 'attr from super class'.
- ENDCLASS.
- CLASS lcl_beg_a IMPLEMENTATION.
- METHOD constructor.
- WRITE: /'call constructor superclass'.
- ENDMETHOD.
- METHOD some_method.
- WRITE: /'call some_method superclass'.
- WRITE:/ |priv_attr { priv_attr } |.
- WRITE: / |this protected attr { protected_attr }|.
- ENDMETHOD.
- METHOD test_super.
- return = 'Hello world'.
- ENDMETHOD.
- ENDCLASS.
- CLASS lcl_beg_b DEFINITION INHERITING FROM lcl_beg_a.
- PUBLIC SECTION.
- METHODS: constructor IMPORTING a TYPE string,
- some_method REDEFINITION.
- PRIVATE SECTION.
- DATA: priv_attr TYPE string VALUE 'attr from child class'.
- ENDCLASS.
- CLASS lcl_beg_b IMPLEMENTATION.
- METHOD constructor.
- super->constructor( ).
- WRITE: /'call constructor child'.
- protected_attr = a.
- ENDMETHOD.
- METHOD some_method.
- super->some_method( ).
- WRITE: /.
- WRITE: /'call some_method child'.
- WRITE:/ |priv_attr { priv_attr } |.
- WRITE: / |this protected attr { protected_attr }|.
- ENDMETHOD.
- ENDCLASS.
- *----------------------------------------------------
- * класс отправитель
- CLASS lcl_event_sender DEFINITION.
- PUBLIC SECTION.
- METHODS: clock.
- EVENTS update_clock EXPORTING VALUE(count) TYPE i.
- PRIVATE SECTION.
- DATA: counter TYPE i.
- ENDCLASS.
- CLASS lcl_event_sender IMPLEMENTATION.
- METHOD clock.
- ADD 1 to counter.
- RAISE EVENT update_clock EXPORTING count = counter. "генерируем события
- ENDMETHOD.
- ENDCLASS.
- * класс обработчик
- CLASS lcl_event_receive DEFINITION.
- PUBLIC SECTION.
- METHODS:
- constructor,
- event_dispatch FOR EVENT update_clock OF lcl_event_sender IMPORTING count."описываем, что метод принимает из события парметр
- PRIVATE SECTION.
- CLASS-DATA:
- cls_counter TYPE i VALUE 0.
- DATA:
- current_cls_num TYPE i.
- ENDCLASS.
- CLASS lcl_event_receive IMPLEMENTATION.
- METHOD constructor.
- ADD 1 TO lcl_event_receive=>cls_counter.
- current_cls_num = lcl_event_receive=>cls_counter.
- "регистрируем наш метод на событие
- SET HANDLER me->event_dispatch FOR ALL INSTANCES.
- WRITE:/ |Create receiver { current_cls_num }|.
- ENDMETHOD.
- "метод обработчик события
- METHOD event_dispatch.
- WRITE: / |Dispatch event in class { current_cls_num } count = { count }|.
- ENDMETHOD.
- ENDCLASS.
- *---------------------------------------------
- *Классы исключения
- CLASS lcx_except_static DEFINITION INHERITING FROM cx_static_check.
- ENDCLASS.
- CLASS lcx_except_dynamic DEFINITION INHERITING FROM cx_dynamic_check.
- PUBLIC SECTION.
- INTERFACES if_t100_message.
- ENDCLASS.
- class lcx_except_no_check DEFINITION INHERITING FROM cx_no_check.
- ENDCLASS.
- CLASS lcl_exception_example DEFINITION.
- PUBLIC SECTION.
- METHODS: test IMPORTING t TYPE c." RAISING lcx_except_static.
- ENDCLASS.
- CLASS lcl_exception_example IMPLEMENTATION.
- METHOD test.
- CASE t.
- WHEN 'S'.
- * RAISE EXCEPTION NEW lcl_except_static( ).
- RAISE EXCEPTION TYPE lcx_except_static.
- WHEN 'D'.
- RAISE EXCEPTION TYPE lcx_except_dynamic MESSAGE i000(zdemo_msg) .
- WHEN OTHERS.
- RAISE EXCEPTION TYPE lcx_except_no_check.
- ENDCASE.
- ENDMETHOD.
- ENDCLASS.
- CLASS lcl_zdemo DEFINITION CREATE PRIVATE.
- PUBLIC SECTION.
- CLASS-METHODS:
- get_instance RETURNING VALUE(ro_instance) TYPE REF TO lcl_zdemo.
- METHODS:
- example_double IMPORTING n TYPE i
- RETURNING VALUE(return_obj) TYPE REF TO lcl_example_double,
- example_multi,
- example_multi_func,
- example_parameters,
- example_beginner,
- example_events.
- PRIVATE SECTION.
- CLASS-DATA :
- instance TYPE REF TO lcl_zdemo.
- ENDCLASS.
- CLASS lcl_zdemo IMPLEMENTATION.
- METHOD get_instance.
- IF instance IS NOT BOUND.
- instance = NEW #( ).
- ENDIF.
- ro_instance = instance.
- ENDMETHOD.
- "пример подхода как к объектной сущности
- METHOD example_double.
- WRITE:'Example double'.
- DATA(obj) = NEW lcl_example_double( n ).
- WRITE: / obj->n.
- obj->double( ).
- WRITE: / obj->n.
- ENDMETHOD.
- "пример умножения в процедурном стиле
- METHOD example_multi.
- WRITE:'Example multi'.
- DATA(n) = 2.
- NEW lcl_example_multi( )->multi( EXPORTING a = 2 IMPORTING n = n ).
- WRITE: / n.
- ENDMETHOD.
- "пример умножения в стиле ФП
- METHOD example_multi_func.
- WRITE:'Example multi functional style'.
- DATA(n) = 2.
- WRITE: / NEW lcl_example_multi( )->multi_return( a = 2 n = 3 ).
- ENDMETHOD.
- "передача обязательных не обязательных и дефолтных параметров
- METHOD example_parameters.
- WRITE:'Example parameters'.
- WRITE: / NEW lcl_example_parameters( )->test( 'abc' ).
- WRITE: / NEW lcl_example_parameters( )->test( a = 'abc' b = '123' ).
- WRITE: / NEW lcl_example_parameters( )->test( a = 'abc' b = '123' c = 'not empty').
- ENDMETHOD.
- METHOD example_beginner.
- WRITE: 'Пример наследования, полиморфизма и суперклассы'.
- DATA(obj) = NEW lcl_beg_b( 'Hello world' ).
- obj->some_method( ).
- WRITE: / obj->test_super( ).
- ENDMETHOD.
- METHOD example_events.
- WRITE: 'События и обработка их'.
- DATA(obj_sender) = NEW lcl_event_sender( ).
- DATA(obj_dispatch_1) = NEW lcl_event_receive( ).
- DATA(obj_dispatch_2) = NEW lcl_event_receive( ).
- DO 5 TIMES.
- obj_sender->clock( ).
- ENDDO.
- ENDMETHOD.
- ENDCLASS.
- START-OF-SELECTION.
- lcl_zdemo=>get_instance( )->example_events( ).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement