SAP ABAP OBJECTS Tutorials

1. Simple class

This example shows how to create a simple employee class. The constructor method is used to initialize number and name of thje employee when the object is created. A display_employee method can be called to show the attributes of the employee, and CLASS-METHOD dosplay_no_of_employees can be called to show the total number of employees (Number of instances of the employee class).

REPORT zbc404_hf_events_1.

*********************************************************************

* L C L _ E M P L O Y E E

*********************************************************************

*—- LCL Employee – Definition

CLASS lcl_employee DEFINITION.

PUBLIC SECTION.

*——————————————————————–

* The public section is accesible from outside

*——————————————————————–

TYPES:

BEGIN OF t_employee,

no  TYPE i,

name TYPE string,

END OF t_employee.

METHODS:

constructor

IMPORTING im_employee_no TYPE i

im_employee_name TYPE string,

display_employee.

*   Class methods are global for all instances

CLASS-METHODS: display_no_of_employees.

PROTECTED SECTION.

*——————————————————————–

* The protecetd section is accesible from the class and its subclasses

*——————————————————————–

*   Class data are global for all instances

CLASS-DATA: g_no_of_employees TYPE i.

PRIVATE SECTION.

*——————————————————————–

* The private section is only accesible from within the classs

*——————————————————————–

DATA: g_employee TYPE t_employee.

ENDCLASS.

*— LCL Employee – Implementation

CLASS lcl_employee IMPLEMENTATION.

METHOD constructor.

g_employee-no = im_employee_no.

g_employee-name = im_employee_name.

g_no_of_employees = g_no_of_employees + 1.

ENDMETHOD.

METHOD display_employee.

WRITE:/ ‘Employee’, g_employee-no, g_employee-name.

ENDMETHOD.

METHOD display_no_of_employees.

WRITE: / ‘Number of employees is:’, g_no_of_employees.

ENDMETHOD.

ENDCLASS.

************************************************************************

* R E P O R T

*********************************************************************

DATA: g_employee1 TYPE REF TO lcl_employee,

g_employee2 TYPE REF TO lcl_employee.

START-OF-SELECTION.

CREATE OBJECT g_employee1

EXPORTING im_employee_no = 1

im_employee_name = ‘John Jones’.

CREATE OBJECT g_employee2

EXPORTING im_employee_no = 2

im_employee_name = ‘Sally Summer’.

CALL METHOD g_employee1->display_employee.

CALL METHOD g_employee2->display_employee.

CALL METHOD g_employee2->display_no_of_employees.

2. Inheritance and polymorphism

This example uses a superclass lcl_company_employees and two subclasses lcl_bluecollar_employee and lcl_whitecollar_employee to add employees to a list and then display a list of employees and there wages. The wages are calcukated in the method add_employee, but as the wages are calculated differently for blue collar employees and white collar emplyees, the superclass method add_employee is redeifined in the subclasses.

Principles:

Create super class LCL_CompanyEmployees.

The class has the methods:

Constructor
Add_Employee – Adds a new employee to the list of employees
Display_Employee_List – Displays all employees and there wage
Display_no_of_employees – Displays total number of employees

Note the use of CLASS-DATA to keep the list of employees and number of employees the same from instance to instance.

Create subclasses lcl_bluecollar_employee and lcl_whitecollar_employee. The calsses are identical, except for the redifinition of the add_employee method, where the caclculation of wage is different.

Methodes:

Constructor. The constructor is used to initialize the attributes of the employee. Note that the constructor in the supclasss has to be called from within the constructor of the subclass.
Add_Employee. This is a redinition of the same method in the superclass. In the redefined class the wage is calcuated, and the superclass method is called to add the employees to the emploee list.:

The program

REPORT zbc404_hf_events_2 .

*******************************************************

* Super class LCL_CompanyEmployees

*******************************************************

CLASS lcl_company_employees DEFINITION.

PUBLIC SECTION.

TYPES:

BEGIN OF t_employee,

no  TYPE i,

name TYPE string,

wage TYPE i,

END OF t_employee.

METHODS:

constructor,

add_employee

IMPORTING im_no   TYPE i

im_name TYPE string

im_wage TYPE i,

display_employee_list,

display_no_of_employees.

PRIVATE SECTION.

CLASS-DATA: i_employee_list TYPE TABLE OF t_employee,

no_of_employees TYPE i.

ENDCLASS.

*– CLASS LCL_CompanyEmployees IMPLEMENTATION

CLASS lcl_company_employees IMPLEMENTATION.

METHOD constructor.

no_of_employees = no_of_employees + 1.

ENDMETHOD.

METHOD add_employee.

*   Adds a new employee to the list of employees

DATA: l_employee TYPE t_employee.

l_employee-no = im_no.

l_employee-name = im_name.

l_employee-wage = im_wage.

APPEND l_employee TO i_employee_list.

ENDMETHOD.

METHOD display_employee_list.

*   Displays all employees and there wage

DATA: l_employee TYPE t_employee.

WRITE: / ‘List of Employees’.

LOOP AT i_employee_list INTO l_employee.

WRITE: / l_employee-no, l_employee-name, l_employee-wage.

ENDLOOP.

ENDMETHOD.

METHOD display_no_of_employees.

*   Displays total number of employees

SKIP 3.

WRITE: / ‘Total number of employees:’, no_of_employees.

ENDMETHOD.

ENDCLASS.

*******************************************************

* Sub class LCL_BlueCollar_Employee

*******************************************************

CLASS lcl_bluecollar_employee DEFINITION

INHERITING FROM lcl_company_employees.

PUBLIC SECTION.

METHODS:

constructor

IMPORTING im_no             TYPE i

im_name           TYPE string

im_hours          TYPE i

im_hourly_payment TYPE i,

add_employee REDEFINITION.

PRIVATE SECTION.

DATA:no             TYPE i,

name           TYPE string,

hours          TYPE i,

hourly_payment TYPE i.

ENDCLASS.

*—- CLASS LCL_BlueCollar_Employee IMPLEMENTATION

CLASS lcl_bluecollar_employee IMPLEMENTATION.

METHOD constructor.

*   The superclass constructor method must be called from the subclass

*   constructor method

CALL METHOD super->constructor.

no = im_no.

name = im_name.

hours = im_hours.

hourly_payment = im_hourly_payment.

ENDMETHOD.

METHOD add_employee.

*   Calculate wage an call the superclass method add_employee to add

*   the employee to the employee list

DATA: l_wage TYPE i.

l_wage = hours * hourly_payment.

CALL METHOD super->add_employee

EXPORTING im_no = no

im_name = name

im_wage = l_wage.

ENDMETHOD.

ENDCLASS.

*******************************************************

* Sub class LCL_WhiteCollar_Employee

*******************************************************

CLASS lcl_whitecollar_employee DEFINITION

INHERITING FROM lcl_company_employees.

PUBLIC SECTION.

METHODS:

constructor

IMPORTING im_no                 TYPE i

im_name               TYPE string

im_monthly_salary     TYPE i

im_monthly_deductions TYPE i,

add_employee REDEFINITION.

PRIVATE SECTION.

DATA:

no                    TYPE i,

name                  TYPE string,

monthly_salary        TYPE i,

monthly_deductions    TYPE i.

ENDCLASS.

*—- CLASS LCL_WhiteCollar_Employee IMPLEMENTATION

CLASS lcl_whitecollar_employee IMPLEMENTATION.

METHOD constructor.

*   The superclass constructor method must be called from the subclass

*   constructor method

CALL METHOD super->constructor.

no = im_no.

name = im_name.

monthly_salary = im_monthly_salary.

monthly_deductions = im_monthly_deductions.

ENDMETHOD.

METHOD add_employee.

*   Calculate wage an call the superclass method add_employee to add

*   the employee to the employee list

DATA: l_wage TYPE i.

l_wage = monthly_salary – monthly_deductions.

CALL METHOD super->add_employee

EXPORTING im_no = no

im_name = name

im_wage = l_wage.

ENDMETHOD.

ENDCLASS.

*******************************************************

* R E P O R T

*******************************************************

DATA:

* Object references

o_bluecollar_employee1  TYPE REF TO lcl_bluecollar_employee,

o_whitecollar_employee1 TYPE REF TO lcl_whitecollar_employee.

START-OF-SELECTION.

* Create bluecollar employee obeject

CREATE OBJECT o_bluecollar_employee1

EXPORTING im_no  = 1

im_name  = ‘Gylle Karen’

im_hours = 38

im_hourly_payment = 75.

* Add bluecollar employee to employee list

CALL METHOD o_bluecollar_employee1->add_employee

EXPORTING im_no  = 1

im_name  = ‘Gylle Karen’

im_wage = 0.

* Create whitecollar employee obeject

CREATE OBJECT o_whitecollar_employee1

EXPORTING im_no  = 2

im_name  = ‘John Dickens’

im_monthly_salary = 10000

im_monthly_deductions = 2500.

* Add bluecollar employee to employee list

CALL METHOD o_whitecollar_employee1->add_employee

EXPORTING im_no  = 1

im_name  = ‘Karen Johnson’

im_wage = 0.

* Display employee list and number of employees. Note that the result

* will be the same when called from o_whitecollar_employee1 or

* o_bluecolarcollar_employee1, because the methods are defined

* as static (CLASS-METHODS)

CALL METHOD o_whitecollar_employee1->display_employee_list.

CALL METHOD o_whitecollar_employee1->display_no_of_employees.

The resulting report

List of Employees
1 Karen Johnson 2.850
2 John Dickens 7.500

Total number of employees: 2