Текущее время: Пт, апр 19 2024, 12:37

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Ahrefs [Bot]


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

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