面向物件OO FOR ABAP
*&---------------------------------------------------------------------*
*& Report ZTEST1
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ztest1.
**&---------------------------------------------------------------------*
**& Class simpleobj
**&---------------------------------------------------------------------*
** Text
**----------------------------------------------------------------------*
CLASS simpleobj DEFINITION.
PUBLIC SECTION.
METHODS: show_text.
PRIVATE SECTION.
DATA text(100) TYPE c VALUE 'This is my first ABAP object.'.
ENDCLASS. "simpleobj
*&---------------------------------------------------------------------*
*& Class (Implementation) SIMPLEOBJ
*&---------------------------------------------------------------------*
* Text
*----------------------------------------------------------------------*
CLASS simpleobj IMPLEMENTATION.
METHOD show_text.
WRITE text.
ENDMETHOD. "show_text
ENDCLASS. "SIMPLEOBJ
* Global Data Declaratioin
DATA ob_app TYPE REF TO simpleobj.
START-OF-SELECTION.
CREATE OBJECT ob_app.
CALL METHOD ob_app->show_text.
*
*----------------------------分割線-------------------------------------------------------
*-----------------------------分割線-----------------------------------------------------
CLASS vehicle DEFINITION.
PUBLIC SECTION.
METHODS:exp_speed IMPORTING cname TYPE string
EXPORTING ispeed TYPE i,
accelerate IMPORTING rate TYPE i,
add CHANGING addone TYPE i.
PRIVATE SECTION.
DATA speed TYPE i VALUE 0.
ENDCLASS. "vehicle
*----------------------------------------------------------------------*
* CLASS vehicle IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS vehicle IMPLEMENTATION.
METHOD accelerate.
speed = speed + rate.
ENDMETHOD. "accelerate
METHOD exp_speed.
ispeed = speed.
WRITE cname.
ENDMETHOD. "show_speed
METHOD add.
addone = addone + 1.
ENDMETHOD. "add
ENDCLASS. "vehicle
DATA o_vehicle TYPE REF TO vehicle.
DATA int TYPE i VALUE 3.
DATA fname TYPE string VALUE 'Speed = '.
START-OF-SELECTION.
CREATE OBJECT o_vehicle.
CALL METHOD o_vehicle->accelerate
EXPORTING
rate = int.
CALL METHOD o_vehicle->accelerate
EXPORTING
rate = int.
CALL METHOD o_vehicle->exp_speed
EXPORTING
cname = fname
IMPORTING
ispeed = int.
WRITE:int.
CALL METHOD o_vehicle->add
CHANGING
addone = int.
WRITE: / int.
*----------------------------分割線-------------------------------------------------------
*-----------------------------類函式方法-----------------------------------------------
*----------------------------------------------------------------------*
* CLASS circle DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS circle DEFINITION.
PUBLIC SECTION.
METHODS get_area IMPORTING value(i_radius) TYPE i
RETURNING value(r_size) TYPE f.
PRIVATE SECTION.
CONSTANTS pi TYPE f VALUE '3.14159265'.
ENDCLASS. "circle
*----------------------------------------------------------------------*
* CLASS circle IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS circle IMPLEMENTATION.
METHOD get_area.
r_size = i_radius ** 2 * pi.
ENDMETHOD. "get_area
ENDCLASS. "circle
PARAMETERS radius TYPE i.
DATA: o_circle TYPE REF TO circle,
area TYPE f.
START-OF-SELECTION.
CREATE OBJECT o_circle.
CALL METHOD o_circle->get_area
EXPORTING
i_radius = radius
RECEIVING
r_size = area.
WRITE: / area.
***功能如上的CALL METHOD 功能一樣
area = o_circle->get_area( radius ).
WRITE: / area.
*----------------------------分割線-------------------------------------------------------
*-----------------------------分割線-----類的構造方法------------------------------------------------
CLASS vehicle DEFINITION.
PUBLIC SECTION.
METHODS: accelerate IMPORTING rate TYPE i,
constructor IMPORTING i_speed TYPE i,
show_speed.
PRIVATE SECTION.
DATA speed TYPE i VALUE 0.
ENDCLASS. "vehicle DEFINITION
*----------------------------------------------------------------------*
* CLASS vehicle IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS vehicle IMPLEMENTATION.
METHOD accelerate.
speed = speed + rate.
ENDMETHOD. "accelertate
METHOD show_speed.
WRITE / speed.
ENDMETHOD. "show_speed
METHOD constructor.
speed = i_speed.
WRITE: 'constructor i_speed = ', speed.
ENDMETHOD. "constructor
ENDCLASS. "vehicle
DATA o_vehicle TYPE REF TO vehicle.
START-OF-SELECTION.
**直接給值
CREATE OBJECT o_vehicle "會執行 METHOD constructor
EXPORTING
i_speed = 4.
CALL METHOD o_vehicle->accelerate
EXPORTING
rate = 2.
CALL METHOD o_vehicle->show_speed.