Sunday, March 25, 2018

Class

REPORT zqc_first_local_class.


CLASS zcl_employee DEFINITION.
  PUBLIC SECTION.
    TYPES: BEGIN OF ty_create_empl,
            id                  TYPE i,
            name                TYPE string,
            position            TYPE string,
            further_educated    TYPE boolean,
          END OF ty_create_empl.


    METHODS display_employee.

    METHODS set_name IMPORTING im_name TYPE string.

    METHODS get_name RETURNING VALUE(re_name) TYPE string.

*    METHODS constructor IMPORTING im_empl_id        TYPE i
*                                  im_empl_name      TYPE string
*                                  im_position       TYPE string.
    METHODS constructor IMPORTING im_employee        TYPE ty_create_empl.
    METHODS is_further_educated RETURNING VALUE(re_further_educated) TYPE boolean.
    METHODS raise_salary IMPORTING im_percent TYPE i.


    CLASS-METHODS get_no_of_employees RETURNING VALUE(re_no_of_employees) TYPE i.
    CLASS-METHODS display_no_of_employees.
    CLASS-METHODS class_constructor.

  PRIVATE SECTION.
    DATA: g_empl_id             TYPE i,
          g_empl_name           TYPE string,
          g_position            TYPE string,
          g_salary              TYPE p LENGTH 4 DECIMALS 2,
          g_is_further_educated TYPE boolean.


    CLASS-DATA g_no_of_employees TYPE i.
    CLASS-DATA g_max_no_of_empl  TYPE i.

    CONSTANTS co_start_salary TYPE p LENGTH 4 DECIMALS 2 VALUE '2000.00'.
    CLASS-METHODS count_employee.




ENDCLASS.

CLASS zcl_employee IMPLEMENTATION.

  METHOD display_employee.
    write: / g_empl_id, / g_empl_name, / g_position, / g_salary.
    ULINE.
  ENDMETHOD.

  METHOD class_constructor.
    g_max_no_of_empl = 10.
  ENDMETHOD.

  METHOD constructor.
    IF g_no_of_employees < g_max_no_of_empl.
      g_empl_id             = im_employee-id.
      g_empl_name           = im_employee-name.
      g_position            = im_employee-position.
      g_is_further_educated = im_employee-further_educated.
      g_salary              = co_start_salary.
      me->count_employee( ).

*      g_empl_id     = im_empl_id.
*      g_empl_name   = im_empl_name.
*      g_position    = im_position.
*      g_salary      = co_start_salary.
*      me->count_employee( ).
    ENDIF.
  ENDMETHOD.

  METHOD set_name.
    g_empl_name = im_name.
  ENDMETHOD.

  METHOD get_name.
    re_name = g_empl_name.
  ENDMETHOD.

  METHOD count_employee.
    add 1 to g_no_of_employees.
  ENDMETHOD.

  METHOD get_no_of_employees.
    re_no_of_employees = g_no_of_employees.
  ENDMETHOD.

  METHOD display_no_of_employees.
    WRITE: / 'Number of Employees ', g_no_of_employees.
  ENDMETHOD.
  METHOD is_further_educated.
    re_further_educated = g_is_further_educated.
  ENDMETHOD.
  METHOD raise_salary.
    me->g_salary = g_salary + ( g_salary / 100 * im_percent ).
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.

DATA g_employee1    TYPE REF TO zcl_employee.
DATA g_employee2    TYPE REF TO zcl_employee.
DATA g_empl_data    TYPE zcl_employee=>ty_create_empl.

*TRY .
*  g_empl_data-id                = 1.
*  g_empl_data-name              = 'John Doe'.
*  g_empl_data-position          = 'Sales'.
*  g_empl_data-further_educated  = abap_true.
*  CREATE OBJECT g_employee1
*          EXPORTING
*            im_employee = g_empl_data.
**            im_empl_data-id        =  1
**            im_empl_data-name      = 'John Doe'
**            im_employee-position  = 'Sales'.
*CATCH cx_sy_create_object_error.
*
*ENDTRY.
if g_employee1 IS NOT INITIAL.
  IF  g_employee1->is_further_educated( ) = abap_true.
      g_employee1->raise_salary( 5 ).
  ENDIF.
* 2 ways to call component method
call METHOD g_employee1->display_employee( ).
ENDIF.
TRY .
  clear g_empl_data.
  g_empl_data-id                = 2.
  g_empl_data-name              = 'Quang Cao'.
  g_empl_data-position          = 'IT'.
  g_empl_data-further_educated  = abap_false.
  CREATE OBJECT g_employee2
          EXPORTING
            im_employee = g_empl_data.
*            im_empl_id    =  2
*            im_empl_name  = 'Quang Cao'
*            im_position   = 'IT'.
CATCH cx_sy_create_object_error.

ENDTRY.
if g_employee2 IS NOT INITIAL.
  IF g_employee2->is_further_educated( ) = abap_true.
    g_employee2->raise_salary( 5 ).
  ENDIF.
  g_employee2->display_employee( ).
ENDIF.


* Class method
zcl_employee=>display_no_of_employees( ).

No comments:

Post a Comment