Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
pessoal não dá muita bola, até porque os alunos ainda estão tentando
se recuperar das aulas de polimorfismo e interface, mas entender o
funcionamento dela é vital para desenvolver boas soluções usando
orientação a objetos (não somente para aprender a escrever a palavra
exceção).
*&---------------------------------------------------------------------*
*& Include ZABAP101_EXCEPTION_CLASSES
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
* CLASS lcl_exception_demo DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_exception_demo DEFINITION.
PUBLIC SECTION.
METHODS: dump_factory,
simple_catch,
cleanup_live RAISING cx_sy_zerodivide,
cleanup_dead RAISING cx_sy_zerodivide,
propagating RAISING cx_sy_zerodivide.
PRIVATE SECTION.
DATA: result TYPE i.
METHOD dump_factory.
result = 1 / 0.
ENDMETHOD. "dump_factory
METHOD simple_catch.
TRY .
result = 1 / 0.
CATCH cx_sy_zerodivide.
WRITE: / 'Executou o CATCH do método SIMPLE_CATCH.'.
ENDTRY.
ENDMETHOD. "simple_catch
METHOD cleanup_live.
TRY .
result = 1 / 0.
CLEANUP.
WRITE: / 'Executou o Cleanup do método CLEANUP_LIVE.'.
ENDTRY.
ENDMETHOD. "cleanup_live
METHOD cleanup_dead.
TRY .
result = 1 / 0.
CATCH cx_sy_zerodivide.
WRITE: / 'Executou o CATCH do método CLEANUP_DEAD'.
CLEANUP.
" o programa nunca executará o CLEANUP.
WRITE: / 'Executou o Cleanup do método CLEANUP_DEAD.'.
ENDTRY.
ENDMETHOD. "cleanup_dead
METHOD propagating.
result = 1 / 0.
ENDMETHOD. "propagating
REPORT zabap101_exception_dump.
INCLUDE zabap101_exception_classes.
START-OF-SELECTION.
TRY .
r_demo->dump_factory( ).
CATCH cx_sy_zerodivide.
WRITE: / 'Executou o CATCH do programa principal.'.
ENDTRY.
*&---------------------------------------------------------------------*
*& Report ZABAP101_EXCEPTION_BASIC
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zabap101_exception_basic.
INCLUDE zabap101_exception_classes.
START-OF-SELECTION.
TRY .
r_demo->simple_catch( ).
CATCH cx_sy_zerodivide.
WRITE: / 'Executou o CATCH do programa principal.'.
ENDTRY.
abaixo:
Propagação de Exceção
Conheço muitas equipes onde esse conceito é muito bem difundido,
ou seja, uma pessoa decide não ser responsável pelo erro que
cometeu e decide passar o erro para outra pessoa corrigir. Pois é, no
ABAP temos algo parecido. Veja esse programa:
*&---------------------------------------------------------------------*
*& Report ZABAP101_EXCEPTION_PROP
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZABAP101_EXCEPTION_PROP.
INCLUDE zabap101_exception_classes.
START-OF-SELECTION.
TRY .
r_demo->propagating( ).
CATCH cx_sy_zerodivide.
WRITE: / 'Executou o CATCH do programa principal.'.
ENDTRY.
*&---------------------------------------------------------------------*
*& Report ZABAP101_EXCEPTION_CLEAN
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZABAP101_EXCEPTION_CLEAN.
INCLUDE zabap101_exception_classes.
START-OF-SELECTION.
TRY .
r_demo->cleanup_live( ).
CATCH cx_sy_zerodivide.
WRITE: / 'Executou o CATCH do programa principal.'.
ENDTRY.
Pela saída do
programa, você consegue entender a sequência de execução do
programa. Ocorre a exceção, o CLEANUP é executado e então o
CATCH no programa principal.
CLEANUP Morto
O CLEANUP somente é usado para “limpar a bagunça” quando a
exceção está sendo propagada. No programa abaixo, o CLEANUP
nunca será chamado.
*&---------------------------------------------------------------------*
*& Report ZABAP101_EXCEPTION_FAKE_CLEAN
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZABAP101_EXCEPTION_FAKE_CLEAN.
INCLUDE zabap101_exception_classes.
START-OF-SELECTION.
TRY .
r_demo->cleanup_dead( ).
CATCH cx_sy_zerodivide.
WRITE: / 'Executou o CATCH do programa principal.'.
ENDTRY.