Текущее время: Чт, мар 28 2024, 14:17

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Обработка исключений, основанная на классах
СообщениеДобавлено: Чт, май 07 2020, 11:07 
Начинающий
Начинающий

Зарегистрирован:
Вт, фев 17 2015, 23:06
Сообщения: 18
Всем доброго дня!
Начинаю изучать обработку исключений, основанную на классах. И возник вопрос:
Все классы особых ситуаций являются наследниками класса cx_root, таким образом любая исключительная ситуация может быть обработана с помощью класса cx_root. Соответственно зачем нужно создавать свои классы особых ситуаций, если есть универсальный класс cx_root. И обработать всё можно как в примере ниже.
Code:
TRY .
data(lv_int4) = 2 / 0.
CATCH cx_root INTO DATA(lo_error).
  DATA(lv_error) = lo_error->get_text( ).
  MESSAGE lv_error TYPE 'I'.
ENDTRY.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Обработка исключений, основанная на классах
СообщениеДобавлено: Чт, май 07 2020, 12:40 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 347
Исключения применяются для простой и гибкой обработки каких-то особых ситуаций (обычно ошибок). При этом:
1. Иногда поведение программы зависит от того, какой конкретно тип исключения произошёл:
Code:
TRY .
  вызов_метода
CATCH zcx_error_cancel_action.
  Делаем одно
CATCH zcx_error_no_data.
  Делаем другое
CATCH zcx_error_calculation.
  Делаем третье
ENDTRY.
2. Часто при бросании/получении исключения нужно выполнять какие-то специфические для задачи или библиотеки действия (обработка данных, формирование сообщений, логирование и т.д.). Удобно эти действия запихнуть в класс исключения, чтобы не выполнять их в каждом try/catch-е.
3. В z-исключени можно добавлять доп-функциональность. Тогда при написании кода совершенно не нужно задумываться, что и как делать: всё уже находится внутри класса исключения.
Code:
TRY .
  вызов_метода
CATCH zcx_error INTO DATA(ref_error).
  DATA(bukrs) = ref_error->get_bukrs( ).
  или
  ref_error->display( ).
ENDTRY.
4. Z-исключения позволяют лучше контролировать программу. Например, Вы рассчитываете, что методе могут возникать только конкретные специфические для Вашей программы (или библиотеки) исключения-наследники CX_STATIC_CHECK. Если при определении метода Вы укажете конкретное исключение, то при написании/сопровождении кода компилятор Вас подстрахует: будет выдавать предупреждения, если вдруг при вызове метода может возникнуть «не то» исключение.
5. Объекты (экземпляры) классов исключений можно передавать в качестве параметров в другие методы. При этом удобно уже на этапе комиляции отсечь всё лишнее, а не получать не пойми что (cx_root) и потом пытаться разобрать, а что это вообще такое.
6. Создание z-исключений упрощает поиск: где используется именно Ваша функциональность.
7. На возможности построения иерархий классов исключений акцентироваться не буду: имхо, ООП-возможности и так очевидны.
8. Может, что-то запамятовал.
9. Преимущества при создании z-исключений не означают, что их обязательно нужно создавать на каждый чих. В простых случаях можно смело юзать стандартные классы, (возможно даже, cx_root).


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Обработка исключений, основанная на классах
СообщениеДобавлено: Чт, май 07 2020, 15:57 
Начинающий
Начинающий

Зарегистрирован:
Вт, фев 17 2015, 23:06
Сообщения: 18
Спасибо за помощь!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB