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 i .
METHODS tanquear
IMPORTING
i_galon TYPE i .
METHODS get_msg
RETURNING
value(r_msg) TYPE msg .
METHODS get_modelo
RETURNING
value(r_modelo) TYPE msg .
PRIVATE SECTION.
DATA modelo TYPE msg .
DATA galon TYPE i .
CONSTANTS galon_min TYPE i VALUE 1.
CONSTANTS galon_max TYPE i 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 c 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.
DATA: msg TYPE msg,
modelo_msg TYPE msg,
gas TYPE i VALUE 3,
s_gas .
sender->tanquear( gas ).
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.
DATA: volvo1 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 i DEFAULT 3. "gasto de gasolina 1
PARAMETERS c2_gast1 TYPE i DEFAULT 4.
PARAMETERS c1_gast2 TYPE i DEFAULT 4.
PARAMETERS c2_gast2 TYPE i 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->rodar( c1_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->rodar( c2_gast2 )."gasta 5 galones
estado = volvo2->get_msg( ).
WRITE: /,estado.
No hay comentarios:
Publicar un comentario