ABAP-OO Redefinition Methods. Türkçeleştirecek olursak, yaratılan metodları yeniden tanımlamak.

Amaç

Nesne yönelimli programlama mimari kurgu olarak oldukça detaylandırılabilir. Bu olanağı sağlayan konulardan bir tanesi de “Redefinition Methods” konusudur. Bir sınıf için yarattığımız metodun inherit edildiği diğer sınıflarda farklı davranmasını sağlayabileceğimiz bir özellik.


Senaryo

Bir şirketteki çalışanların maaşlarını hesaplayan bir yapı kuracağız. İki sınıfmız olacak. Bir tanesi Employee ikincisi ise Manager sınıfı. Kısacası çalışan ve yönetici sınıfları olacak.

Her yönetici aynı zamanda bir çalışan olduğu için, yönetici sınıfını oluştururken çalışan sınıfından kalıtım alarak yapacağız.


ABAP Kodu

[ABAP]
************************************************************************
* ABAP Development
*
* Author      : Barış Arslan
* Description : Redefinition Methods
************************************************************************

CLASS lcl_employee DEFINITION.
  PUBLIC SECTION.
    DATA : v_name   TYPE name1
         , v_salary TYPE dmbtr READ-ONLY
         .

    METHODS : calculate_salary.

  PROTECTED SECTION.
    CONSTANTS : c_working_days TYPE i VALUE 25.
ENDCLASS.

CLASS lcl_employee IMPLEMENTATION.
  METHOD calculate_salary.
    v_salary = me->c_working_days * 100.
  ENDMETHOD.
ENDCLASS.

CLASS lcl_manager DEFINITION INHERITING FROM lcl_employee.
  PUBLIC SECTION.
    METHODS : calculate_salary REDEFINITION.
ENDCLASS.

CLASS lcl_manager IMPLEMENTATION.
  METHOD calculate_salary.
    v_salary = me->c_working_days * 300.
  ENDMETHOD.
ENDCLASS.

START-OF-SELECTION.
  DATA : go_employee TYPE REF TO lcl_employee
       , go_manager  TYPE REF TO lcl_manager
       .

  CREATE OBJECT go_employee.
  go_employee->v_name = ‘Yavuz Kaya’.
  go_employee->calculate_salary( ).

  WRITE : go_employee->v_name
        , go_employee->v_salary
        .

  CREATE OBJECT go_manager.
  go_manager->v_name = ‘Emre Zararsız’.
  go_manager->calculate_salary( ).

  WRITE : / go_manager->v_name
        , go_manager->v_salary
        .
[/ABAP]


Programın Çıktısı

ABAP-OO Redefinition Methods
ABAP-OO Redefinition Methods