1. 程式人生 > >面向物件OO FOR ABAP

面向物件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.