martes, 12 de agosto de 2014

Programa ABAP con clases y evento.

Este programa controla la cantidad de galones que gasta X vehículo, si gasta mas de lo permitido lo manda a tanquear con 3 galones.





REPORT zhamlet_class.


*----------------------------------------------------------------------*
*       CLASS Z_CARRO DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS z_carro DEFINITION.

  PUBLIC SECTION.

    EVENTS parar .

    METHODS constructor
     IMPORTING
       i_modelo TYPE string.

    METHODS rodar
    IMPORTING
      i_galon TYPE .

    METHODS tanquear
      IMPORTING
        i_galon TYPE .

    METHODS get_msg
      RETURNING
        value(r_msgTYPE msg .

    METHODS get_modelo
      RETURNING
        value(r_modeloTYPE msg .

  PRIVATE SECTION.

    DATA modelo TYPE msg .
    DATA galon TYPE .
    CONSTANTS galon_min TYPE VALUE 1.
    CONSTANTS galon_max TYPE VALUE 5.

ENDCLASS.                    "Z_CARRO DEFINITION

*----------------------------------------------------------------------*
*       CLASS Z_OIL DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS z_oil DEFINITION.

  PUBLIC SECTION.

    METHODS stop
      FOR EVENT parar OF z_carro
      IMPORTING
        sender.

ENDCLASS.                    "Z_OIL DEFINITION


*----------------------------------------------------------------------*
*       CLASS Z_CARRO IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS z_carro IMPLEMENTATION.

  METHOD constructor.
*Constructor de modelo del carro y galon
    modelo i_modelo.
    galon 5.  "Inicia con 5 galones
  ENDMETHOD.                    "CONSTRUCTOR

  METHOD rodar.

    DATA galon_real TYPE i.
    galon_real galon i_galon.

    IF galon_real < galon_min.
      galon galon_min.
      RAISE EVENT parar.
    ELSE.
      galon galon_real.
    ENDIF.

  ENDMETHOD.                    "rodar

  METHOD tanquear.

    DATA galon_real TYPE i.
    galon_real galon + i_galon.

    IF galon_real > galon_max.
      galon galon_max.
    ELSE.
      galon galon_real.
    ENDIF.

  ENDMETHOD.                    "tanquear

  METHOD get_msg.

    DATA galon_msg TYPE LENGTH 2.

    WRITE galon TO galon_msg.
    CONCATENATE modelo 'Tiene:' galon_msg 'Galones' INTO r_msg SEPARATED BY space.

  ENDMETHOD.                    "GET_msg

  METHOD get_modelo.

    r_modelo modelo.

  ENDMETHOD.                    "GET_modelo
ENDCLASS.                    "Z_CARRO IMPLEMENTATION


*----------------------------------------------------------------------*
*       CLASS Z_OIL IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS z_oil IMPLEMENTATION.

  METHOD stop.

    DATAmsg TYPE msg,
    modelo_msg TYPE msg,
    gas TYPE VALUE 3,
    s_gas .

    sender->tanqueargas ).
    modelo_msg sender->get_modelo).

    s_gas gas.
    CONCATENATE  modelo_msg 'TANQUEO' s_gas 'GALONES'  INTO msg SEPARATED BY ' '.

    WRITE,msg .


  ENDMETHOD.                    "stop

ENDCLASS.                    "Z_OIL IMPLEMENTATION


INITIALIZATION.

  DATAvolvo1  TYPE REF TO z_carro,
        volvo2  TYPE REF TO z_carro,
        oil TYPE REF TO z_oil,

        estado  TYPE msg.

*Modelos de carros
  PARAMETERS carro1 TYPE string DEFAULT 'Volvo XC90'.
  PARAMETERS carro2 TYPE string DEFAULT 'Volvo S80'.

  PARAMETERS c1_gast1 TYPE DEFAULT 3"gasto de gasolina 1
  PARAMETERS c2_gast1 TYPE DEFAULT 4.

  PARAMETERS c1_gast2 TYPE DEFAULT 4.
  PARAMETERS c2_gast2 TYPE DEFAULT 2.

START-OF-SELECTION.

*Crea al objeto 1 segun Constructor
  CREATE OBJECT volvo1
    EXPORTING
      i_modelo carro1.
*Crea al objeto 2 segun Constructor
  CREATE OBJECT volvo2
    EXPORTING
      i_modelo carro2.

  CREATE OBJECT oil.
  SET HANDLER oil->stop FOR ALL INSTANCES.


  WRITE 'MAXIMO DE GALONES 5 Y MINIMO 1'.
  WRITE /.

  WRITE/,carro1'TIENE 5 GALONES Y GASTA 'c1_gast1.

  CALL METHOD volvo1->rodar
    EXPORTING
      i_galon c1_gast1.

  CALL METHOD volvo1->get_msg
    RECEIVING
      r_msg estado.

  WRITE/,estado.

  WRITE/,carro2'TIENE 5 GALONES Y GASTA 'c2_gast1.
  volvo2->rodarc1_gast2 ).
  estado volvo2->get_msg).
  WRITE/,estado.


  WRITE/,carro1'TANQUEA 4 GALONES'.

  CALL METHOD volvo1->tanquear
    EXPORTING
      i_galon 4"tanquea 4 galones

  CALL METHOD volvo1->get_msg
    RECEIVING
      r_msg estado.

  WRITE/,estado.


  WRITE/,carro2'GASTA 'c2_gast2'GALONES'.
  volvo2->rodarc2_gast2 )."gasta 5 galones
  estado volvo2->get_msg).
  WRITE/,estado.





No hay comentarios:

Publicar un comentario