예전에 블로그에 올렸던건데.. 심심해서 ^^;;;
여기도 올려봅니다.
근데... 그냥 글로 써도 될 걸 점수 때문인지 자료로 올리는 사람도 좀 있던데..
se24에서 하셔요.
자료구조론을 공부하면서 예제로 짜 본 코드입니다. 전공자가 아니다 보니 stack에 대해서 충실하게 구현했는지도 의문이고 숙제로 받은 것 중에 모든 메쏘드를 구현한 것도 아니지만 abap class를 공부하시는 분들은 참조로 보시면 조금 이해가 될까 해서 올립니다.
class name: ZCL_STACK
[method]
TOP Instance Method Public
PUSH Instance Method Public
ISEMPTY Instance Method Public
[attributes]
STACK Instance Attribute Public Type Ref To ZCL_STACK
OBJ Instance Attribute Public Type Ref To OBJECT
[method implementation]
+++ parameter
TOP_STK Returning Type Ref To ZCL_STACK
+++
METHOD top .
DATA: tmp_obj TYPE REF TO zcl_stack.
tmp_obj = me.
DO.
IF tmp_obj->stack IS INITIAL.
top_stk = tmp_obj.
EXIT.
ELSE.
tmp_obj = tmp_obj->stack.
ENDIF.
ENDDO.
ENDMETHOD.
+++ parameter
INPUT_OBJ Importing Type Ref To OBJECT
+++
METHOD push .
DATA: tmp_obj TYPE REF TO zcl_stack.
tmp_obj = me->top( ).
IF 1 = tmp_obj->isempty( ).
tmp_obj->obj = input_obj.
ELSE.
CREATE OBJECT stack.
tmp_obj->stack = stack.
stack->obj = input_obj.
ENDIF.
ENDMETHOD.
+++ parameter
RC Returning Type I
+++
METHOD isempty .
IF me->obj IS INITIAL.
rc = 1. " empty
ELSE.
rc = 0. " not empty
ENDIF.
ENDMETHOD.
[test program]
REPORT z_stack .
START-OF-SELECTION.
DATA: gc_stck1 TYPE REF TO zcl_stack.
CREATE OBJECT gc_stck1.
IF 0 = gc_stck1->isempty( ).
WRITE:/ 'not empty'.
ELSE.
WRITE:/ 'empty'.
ENDIF.
DATA: any_object1 TYPE REF TO cl_htmlb_manager.
DATA: any_object2 TYPE REF TO cl_htmlb_event.
DATA: any_object3 TYPE REF TO cl_htmlb_inputfield.
CREATE OBJECT any_object1.
gc_stck1->push( any_object1 ).
break-point.
CREATE OBJECT any_object2.
gc_stck1->push( any_object2 ).
break-point.
CREATE OBJECT any_object3.
gc_stck1->push( any_object3 ).
break-point.