Intelligroup Asia Ltd., Technology Team
Vinitha RajanIntelligroup Asia Ltd.
SAP AG
ABAP Objects Workshop
Intelligroup Asia Ltd., Technology Team
Topics Covered
Object orientation
Objects & Object References
ABAP Objects
Intelligroup Asia Ltd., Technology Team
Real-world objects
Data
MethodMethodMethod
Software objects Object model as anabstraction of the
real world
Object Orientation
Function
FunctionFunction Function Function
Data Data
Data Data
Data
Functions and data Data model as an abstraction of the
real world
Function Function Function
MethodsMethods
AttributesAttributes
Abstraction Abstraction
Intelligroup Asia Ltd., Technology Team
Objects & Object References
Privateaccess
Privatecomponents
Flight
Address
Passenger-list
Customer
Publicaccess
Interface
Public events
Public attributes
Public methods
BOOK
AirlineFlight number
FLIGHT
Intelligroup Asia Ltd., Technology Team
ABAP Objects
ABAP Objects is an upwards-compatible extension of the existing ABAP language
You can use existing ABAP statements within ABAP Objects
You can use ABAP Objects within existing programs
ABAP Objects is fully integrated in the ABAP Debugger
ABAP Objects is an upwards-compatible extension of the existing ABAP language
You can use existing ABAP statements within ABAP Objects
You can use ABAP Objects within existing programs
ABAP Objects is fully integrated in the ABAP Debugger
Intelligroup Asia Ltd., Technology Team
From Function Groups to Classes
Instances of function groups as objects
Example: Function group as counter
Intelligroup Asia Ltd., Technology Team
External session
… …
Internal session of an ABAP program
ABAP program with data
CALL FUNCTION ...
ABAP program with data
CALL FUNCTION ...
Instances of Function Groups as Objects
DataFunctionmodule
Function group 1
DataFunctionmodule
Function group 2
Intelligroup Asia Ltd., Technology Team
Function Group as Counter - Definition
FUNCTION-POOL COUNTER.
DATA COUNT TYPE I.
FUNCTION SET_COUNTER. * Local Interface IMPORTING VALUE(SET_VALUE) COUNT = SET_VALUE. ENDFUNCTION.
FUNCTION INCREMENT_COUNTER. COUNT = COUNT + 1. ENDFUNCTION.
FUNCTION GET_COUNTER. * Local Interface: EXPORTING VALUE(GET_VALUE) GET_VALUE = COUNT. ENDFUNCTION.
FUNCTION-POOL COUNTER.
DATA COUNT TYPE I.
FUNCTION SET_COUNTER. * Local Interface IMPORTING VALUE(SET_VALUE) COUNT = SET_VALUE. ENDFUNCTION.
FUNCTION INCREMENT_COUNTER. COUNT = COUNT + 1. ENDFUNCTION.
FUNCTION GET_COUNTER. * Local Interface: EXPORTING VALUE(GET_VALUE) GET_VALUE = COUNT. ENDFUNCTION.
Intelligroup Asia Ltd., Technology Team
Function Group as Counter - Call
DATA NUMBER TYPE I VALUE 5.
CALL FUNCTION 'SET_COUNTER' EXPORTING SET_VALUE = NUMBER.
DO 3 TIMES. CALL FUNCTION 'INCREMENT_COUNTER'.ENDDO.
CALL FUNCTION 'GET_COUNTER' IMPORTING GET_VALUE = NUMBER.
DATA NUMBER TYPE I VALUE 5.
CALL FUNCTION 'SET_COUNTER' EXPORTING SET_VALUE = NUMBER.
DO 3 TIMES. CALL FUNCTION 'INCREMENT_COUNTER'.ENDDO.
CALL FUNCTION 'GET_COUNTER' IMPORTING GET_VALUE = NUMBER.
NUMBER has value 8
Intelligroup Asia Ltd., Technology Team
External session
Internal session of an ABAP program
DatenDatenDatenDaten... Data
...
InterfaceInterface
…
nth instance, class m
…
DatenDatenDatenDaten... Data
...
InterfaceInterface
…
nth instance, class 1
…
Classes Generalize Function Groups
ABAP program with dataABAP program with data
DataInterface
1st instance, class m
DataInterface
1st instance, class 1
Intelligroup Asia Ltd., Technology Team
Classes, References, and Objects
Example: Class as counter
Reference variables
Creating objects
Calling methods
Working with references
Intelligroup Asia Ltd., Technology Team
Example: Class as Counter
CLASS counter DEFINITION. PUBLIC SECTION. METHODS: set IMPORTING VALUE(set_value) TYPE i, increment, get EXPORTING VALUE(get_value) TYPE i. PRIVATE SECTION. DATA count TYPE i.ENDCLASS.
CLASS counter DEFINITION. PUBLIC SECTION. METHODS: set IMPORTING VALUE(set_value) TYPE i, increment, get EXPORTING VALUE(get_value) TYPE i. PRIVATE SECTION. DATA count TYPE i.ENDCLASS. CLASS counter IMPLEMENTATION.
METHOD set. count = set_value. ENDMETHOD. METHOD increment. count = count + 1. ENDMETHOD. METHOD get. get_value = count. ENDMETHOD.ENDCLASS.
CLASS counter IMPLEMENTATION. METHOD set. count = set_value. ENDMETHOD. METHOD increment. count = count + 1. ENDMETHOD. METHOD get. get_value = count. ENDMETHOD.ENDCLASS.
Intelligroup Asia Ltd., Technology Team
Reference Variables
DATA: cnt_1 TYPE REF TO counter.DATA: cnt_1 TYPE REF TO counter.
CNT_1
Intelligroup Asia Ltd., Technology Team
Creating an Object
DATA: cnt_1 TYPE REF TO counter.
CREATE OBJECT cnt_1 TYPE counter.
DATA: cnt_1 TYPE REF TO counter.
CREATE OBJECT cnt_1 TYPE counter.
CNT_1
1<COUNTER>
Intelligroup Asia Ltd., Technology Team
Calling Methods
DATA: cnt_1 TYPE REF TO counter.
DATA number TYPE I VALUE 5.
CREATE OBJECT cnt_1 TYPE counter.
CALL METHOD cnt_1->set EXPORTING set_value = number.
DO 3 TIMES. CALL METHOD cnt_1->increment.ENDDO.
CALL METHOD cnt_1->get IMPORTING get_value = number.
DATA: cnt_1 TYPE REF TO counter.
DATA number TYPE I VALUE 5.
CREATE OBJECT cnt_1 TYPE counter.
CALL METHOD cnt_1->set EXPORTING set_value = number.
DO 3 TIMES. CALL METHOD cnt_1->increment.ENDDO.
CALL METHOD cnt_1->get IMPORTING get_value = number.
CNT_1
1<COUNTER>
NUMBER has the value 8
Intelligroup Asia Ltd., Technology Team
Several Reference Variables
DATA: cnt_1 TYPE REF TO counter,
cnt_2 TYPE REF TO counter,
cnt_3 TYPE REF TO counter.
DATA: cnt_1 TYPE REF TO counter,
cnt_2 TYPE REF TO counter,
cnt_3 TYPE REF TO counter.
CNT_1
CNT_2
CNT_3
Intelligroup Asia Ltd., Technology Team
Several Objects
DATA: cnt_1 TYPE REF TO counter,
cnt_2 TYPE REF TO counter,
cnt_3 TYPE REF TO counter.
CREATE OBJECT: cnt_1,
cnt_2.
DATA: cnt_1 TYPE REF TO counter,
cnt_2 TYPE REF TO counter,
cnt_3 TYPE REF TO counter.
CREATE OBJECT: cnt_1,
cnt_2.
CNT_1
CNT_2
CNT_3
2<COUNTER>
1<COUNTER>
Intelligroup Asia Ltd., Technology Team
CNT_1
CNT_2
CNT_3
2<COUNTER>
1<COUNTER>
Assigning Reference Variables
DATA: cnt_1 TYPE REF TO counter,
cnt_2 TYPE REF TO counter,
cnt_3 TYPE REF TO counter.
CREATE OBJECT: cnt_1,
cnt_2.
MOVE cnt_2 TO cnt_3.
DATA: cnt_1 TYPE REF TO counter,
cnt_2 TYPE REF TO counter,
cnt_3 TYPE REF TO counter.
CREATE OBJECT: cnt_1,
cnt_2.
MOVE cnt_2 TO cnt_3.
Intelligroup Asia Ltd., Technology Team
CNT_2
CNT_3
2<COUNTER>
CNT_1
Deleting Reference Variables
DATA: cnt_1 TYPE REF TO counter,
cnt_2 TYPE REF TO counter,
cnt_3 TYPE REF TO counter.
CREATE OBJECT: cnt_1,
cnt_2.
MOVE cnt_2 TO cnt_3.
CLEAR cnt_2.
DATA: cnt_1 TYPE REF TO counter,
cnt_2 TYPE REF TO counter,
cnt_3 TYPE REF TO counter.
CREATE OBJECT: cnt_1,
cnt_2.
MOVE cnt_2 TO cnt_3.
CLEAR cnt_2.
1<COUNTER>
Intelligroup Asia Ltd., Technology Team
CNT_1
CNT_2
CNT_3
2<COUNTER>
1<COUNTER>
Garbage Collection
DATA: cnt_1 TYPE REF TO counter,
cnt_2 TYPE REF TO counter,
cnt_3 TYPE REF TO counter.
CREATE OBJECT: cnt_1,
cnt_2.
MOVE cnt_2 TO cnt_3.
CLEAR cnt_2.
cnt_3 = cnt_1.
DATA: cnt_1 TYPE REF TO counter,
cnt_2 TYPE REF TO counter,
cnt_3 TYPE REF TO counter.
CREATE OBJECT: cnt_1,
cnt_2.
MOVE cnt_2 TO cnt_3.
CLEAR cnt_2.
cnt_3 = cnt_1.
Intelligroup Asia Ltd., Technology Team
CNT_1
CNT_2
CNT_3
Garbage Collection
DATA: cnt_1 TYPE REF TO counter,
cnt_2 TYPE REF TO counter,
cnt_3 TYPE REF TO counter.
CREATE OBJECT: cnt_1,
cnt_2.
MOVE cnt_2 TO cnt_3.
CLEAR cnt_2.
cnt_3 = cnt_1.
CLEAR cnt_3.
DATA: cnt_1 TYPE REF TO counter,
cnt_2 TYPE REF TO counter,
cnt_3 TYPE REF TO counter.
CREATE OBJECT: cnt_1,
cnt_2.
MOVE cnt_2 TO cnt_3.
CLEAR cnt_2.
cnt_3 = cnt_1.
CLEAR cnt_3.
2<COUNTER>
1<COUNTER>
Intelligroup Asia Ltd., Technology Team
3<COUNTER>
New Objects
DATA: cnt_1 TYPE REF TO counter,
cnt_2 TYPE REF TO counter,
cnt_3 TYPE REF TO counter.
CREATE OBJECT: cnt_1,
cnt_2.
MOVE cnt_2 TO cnt_3.
CLEAR cnt_2.
cnt_3 = cnt_1.
CLEAR cnt_3.
CREATE OBJECT: cnt_2,
cnt_3.
DATA: cnt_1 TYPE REF TO counter,
cnt_2 TYPE REF TO counter,
cnt_3 TYPE REF TO counter.
CREATE OBJECT: cnt_1,
cnt_2.
MOVE cnt_2 TO cnt_3.
CLEAR cnt_2.
cnt_3 = cnt_1.
CLEAR cnt_3.
CREATE OBJECT: cnt_2,
cnt_3.
CNT_1
CNT_2
CNT_3
2<COUNTER>
1<COUNTER>
Intelligroup Asia Ltd., Technology Team
Example: Class Identity
CLASS counter DEFINITION. PUBLIC SECTION. METHODS: set IMPORTING VALUE(set_value) TYPE i, increment, get EXPORTING VALUE(get_value) TYPE i. PUBLIC SECTION. DATA count TYPE i.ENDCLASS.
CLASS counter DEFINITION. PUBLIC SECTION. METHODS: set IMPORTING VALUE(set_value) TYPE i, increment, get EXPORTING VALUE(get_value) TYPE i. PUBLIC SECTION. DATA count TYPE i.ENDCLASS. CLASS counter IMPLEMENTATION.
METHOD set. count = set_value. ENDMETHOD. METHOD increment. count = count + 1. ENDMETHOD. METHOD get. get_value = count. ENDMETHOD.ENDCLASS.
CLASS counter IMPLEMENTATION. METHOD set. count = set_value. ENDMETHOD. METHOD increment. count = count + 1. ENDMETHOD. METHOD get. get_value = count. ENDMETHOD.ENDCLASS.
Intelligroup Asia Ltd., Technology Team
Identity
DATA: cnt_1 TYPE REF TO counter,
cnt_2 TYPE REF TO counter,
cnt_3 TYPE REF TO counter.
DATA number TYPE I VALUE 5.
CREATE OBJECT: cnt_1,
cnt_2.
CALL METHOD cnt_1->set EXPORTING set_value = number.
CALL METHOD cnt_2->set EXPORTING set_value = number.
* Reference Semantics
If cnt_1 = cnt_2.
* This will not be executed
endif
DATA: cnt_1 TYPE REF TO counter,
cnt_2 TYPE REF TO counter,
cnt_3 TYPE REF TO counter.
DATA number TYPE I VALUE 5.
CREATE OBJECT: cnt_1,
cnt_2.
CALL METHOD cnt_1->set EXPORTING set_value = number.
CALL METHOD cnt_2->set EXPORTING set_value = number.
* Reference Semantics
If cnt_1 = cnt_2.
* This will not be executed
endifCNT_1
CNT_2
CNT_3
2<COUNTER>
1<COUNTER>
Intelligroup Asia Ltd., Technology Team
Identity (Contd.)
* Attribute values are the same!!!
If cnt_1->count = cnt_2->count.
* This will be executed
Endif
cnt_3 = cnt_1
If cnt_3 = cnt_1.
* This will be executed
Endif.
* Attribute values are the same!!!
If cnt_1->count = cnt_2->count.
* This will be executed
Endif
cnt_3 = cnt_1
If cnt_3 = cnt_1.
* This will be executed
Endif.
CNT_1
CNT_2
CNT_3
2<COUNTER>
1<COUNTER>
Intelligroup Asia Ltd., Technology Team
3<COUNTER>
Methods of Several Objects
DATA: cnt_1 TYPE REF TO counter,
cnt_2 TYPE REF TO counter,
cnt_3 TYPE REF TO counter.
CREATE OBJECT: cnt_1,
cnt_2,
cnt_3.
CALL METHOD cnt_1->set EXPORTING set_value = 1.
CALL METHOD cnt_2->set EXPORTING set_value = 10.
CALL METHOD cnt_3->set EXPORTING set_value = 100.
DATA: cnt_1 TYPE REF TO counter,
cnt_2 TYPE REF TO counter,
cnt_3 TYPE REF TO counter.
CREATE OBJECT: cnt_1,
cnt_2,
cnt_3.
CALL METHOD cnt_1->set EXPORTING set_value = 1.
CALL METHOD cnt_2->set EXPORTING set_value = 10.
CALL METHOD cnt_3->set EXPORTING set_value = 100.
CNT_1
CNT_2
CNT_3
2<COUNTER>
1<COUNTER>
The value of COUNT is different in each object
Intelligroup Asia Ltd., Technology Team
Declaring reference variables
Creating objects
Accessing attributes and methods
Object References and identities
DATA: ref1 TYPE REF TO class, ref2 TYPE REF TO class.DATA: ref1 TYPE REF TO class, ref2 TYPE REF TO class.
CREATE OBJECT: ref1, ref2.CREATE OBJECT: ref1, ref2.
x = ref1->attr + ref2->attr.CALL METHOD ref1->method EXPORTING ...x = ref1->attr + ref2->attr.CALL METHOD ref1->method EXPORTING ...
Objects: Summary