michelchenrich

Untitled

Oct 25th, 2016
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ABAP 3.20 KB | None | 0 0
  1. REPORT zhm_foop.
  2.  
  3. INTERFACE block.
  4.   METHODS execute.
  5. ENDINTERFACE.
  6.  
  7. INTERFACE boolean.
  8.   METHODS if_true IMPORTING block         TYPE REF TO block
  9.                   RETURNING VALUE(return) TYPE REF TO boolean.
  10.   METHODS if_false IMPORTING block         TYPE REF TO block
  11.                    RETURNING VALUE(return) TYPE REF TO boolean.
  12. ENDINTERFACE.
  13.  
  14. CLASS true DEFINITION CREATE PRIVATE.
  15.   PUBLIC SECTION.
  16.     CLASS-DATA value TYPE REF TO boolean READ-ONLY.
  17.     CLASS-METHODS class_constructor.
  18.     INTERFACES boolean.
  19. ENDCLASS.
  20. CLASS true IMPLEMENTATION.
  21.   METHOD class_constructor.
  22.     value = NEW true( ).
  23.   ENDMETHOD.
  24.   METHOD boolean~if_true.
  25.     block->execute( ).
  26.     return = me.
  27.   ENDMETHOD.
  28.   METHOD boolean~if_false.
  29.     return = me.
  30.   ENDMETHOD.
  31. ENDCLASS.
  32.  
  33. CLASS false DEFINITION CREATE PRIVATE.
  34.   PUBLIC SECTION.
  35.     CLASS-DATA value TYPE REF TO boolean READ-ONLY.
  36.     CLASS-METHODS class_constructor.
  37.     INTERFACES boolean.
  38. ENDCLASS.
  39. CLASS false IMPLEMENTATION.
  40.   METHOD class_constructor.
  41.     value = NEW false( ).
  42.   ENDMETHOD.
  43.   METHOD boolean~if_true.
  44.     return = me.
  45.   ENDMETHOD.
  46.   METHOD boolean~if_false.
  47.     block->execute( ).
  48.     return = me.
  49.   ENDMETHOD.
  50. ENDCLASS.
  51.  
  52. DEFINE start_of_block.
  53.   CLASS &1 DEFINITION CREATE PRIVATE.
  54.     PUBLIC SECTION.
  55.       CLASS-DATA value TYPE REF TO block READ-ONLY.
  56.       CLASS-METHODS class_constructor.
  57.       INTERFACES block.
  58.   ENDCLASS.
  59.   CLASS &1 IMPLEMENTATION.
  60.     METHOD class_constructor.
  61.       value = NEW &1( ).
  62.     ENDMETHOD.
  63.     METHOD block~execute.
  64. END-OF-DEFINITION.
  65. DEFINE start_of_block_with_x.
  66.   CLASS &1 DEFINITION CREATE PRIVATE.
  67.     PUBLIC SECTION.
  68.       CLASS-METHODS make IMPORTING x TYPE REF TO &2 RETURNING VALUE(return) TYPE REF TO block.
  69.       METHODS constructor IMPORTING x TYPE REF TO &2.
  70.       INTERFACES block.
  71.     PRIVATE SECTION.
  72.       DATA x TYPE REF TO &2.
  73.   ENDCLASS.
  74.   CLASS &1 IMPLEMENTATION.
  75.     METHOD make.
  76.       return = NEW &1( x ).
  77.     ENDMETHOD.
  78.     METHOD constructor.
  79.       me->x = x.
  80.     ENDMETHOD.
  81.     METHOD block~execute.
  82. END-OF-DEFINITION.
  83. DEFINE end_of_block.
  84.   ENDMETHOD.
  85. ENDCLASS.
  86. END-OF-DEFINITION.
  87.  
  88. start_of_block print_foo.
  89. WRITE 'FOO'.
  90. end_of_block.
  91.  
  92. start_of_block print_bar.
  93. WRITE 'BAR'.
  94. end_of_block.
  95.  
  96. CLASS foo_bar_printer DEFINITION.
  97.   PUBLIC SECTION.
  98.     METHODS constructor IMPORTING number TYPE i.
  99.     METHODS print.
  100.     METHODS print_from_block.
  101.   PRIVATE SECTION.
  102.     DATA number TYPE i.
  103.     METHODS should_print_foo RETURNING VALUE(return) TYPE REF TO boolean.
  104. ENDCLASS.
  105.  
  106. start_of_block_with_x print_foobar foo_bar_printer.
  107. x->print_from_block( ).
  108. end_of_block.
  109.  
  110. CLASS foo_bar_printer IMPLEMENTATION.
  111.   METHOD constructor.
  112.     me->number = number.
  113.   ENDMETHOD.
  114.  
  115.   METHOD print.
  116.     should_print_foo( )->if_true( print_foo=>value
  117.                       )->if_false( print_bar=>value ).
  118.  
  119.     print_foobar=>make( me )->execute( ).
  120.   ENDMETHOD.
  121.  
  122.   METHOD print_from_block.
  123.     WRITE 'from a block'.
  124.   ENDMETHOD.
  125.  
  126.   METHOD should_print_foo.
  127.     return = true=>value.
  128.   ENDMETHOD.
  129. ENDCLASS.
  130.  
  131. PARAMETERS p_num TYPE i DEFAULT 1.
  132.  
  133. START-OF-SELECTION.
  134.   DATA(printer) = NEW foo_bar_printer( p_num ).
  135.   printer->print( ).
Advertisement
Add Comment
Please, Sign In to add comment