ВУЗ:
Составители:
Рубрика:
20
том, что константы можно менять в файле конфигурации проекта, не изменяя
код проекта и не требуя его перекомпиляции.
1.3. Обработка исключительных ситуаций
Какой бы надежный код ни был написан, сколь бы тщательной ни была
отладка, в версии, переданной в эксплуатацию и на сопровождение, при запус-
ках будут встречаться нарушения спецификаций. Причиной этого являются
упомянутые во введении законы программотехники. В системе остается по-
следняя ошибка, находятся пользователи, не знающие спецификаций, и если
спецификацию можно нарушить, то это событие когда-нибудь да произойдет.
В таких исключительных ситуациях продолжение выполнения программы либо
становится невозможным (попытка выполнить неразрешенную операцию деле-
ния на ноль, попытки записи в защищенную область памяти, попытка открытия
несуществующего файла, попытка получить несуществующую запись базы
данных), либо в возникшей ситуации применение алгоритма приведет к оши-
бочным результатам.
Что делать при возникновении исключительной ситуации? Конечно, все-
гда есть стандартный способ – сообщить о возникшей ошибке и прервать вы-
полнение программы. Понятно, что это приемлемо лишь для безобидных при-
ложений; даже для компьютерных игр этот способ не годится, что уж говорить
о критически важных приложениях!
В языках программирования для обработки исключительных ситуаций
предлагались самые разные подходы.
1.3.1. Обработка исключений в языках C/C++
Для стиля программирования на языке C характерно описание методов
класса как булевых функций, возвращающих true в случае нормального завер-
шения метода и false – при возникновении исключительной ситуации. Вызов
метода встраивался в If-оператор, обрабатывающий ошибку в случае неуспеха
завершения метода:
bool MyMethod(...){...}
if !MyMethod(){// обработка ошибки}
{//нормальное выполнение}
Недостатки этой схемы понятны. Во-первых, мало информации о причи-
не возникновения ошибки, поэтому либо через поля класса, либо через аргу-
менты метода нужно передавать дополнительную информацию. Во-вторых,
блок обработки встраивается в каждый вызов, что приводит к раздуванию кода.
Поэтому в C/C++ применяется схема try/catch блоков, суть которой в сле-
дующем. Участок программы, в котором может возникнуть исключительная
ситуация, оформляется в виде охраняемого try-блока. Если при его выполнении
возникает исключительная ситуация, то происходит прерывание выполнения
try-блока c классификацией исключения. Это исключение начинает обрабаты-
Страницы
- « первая
- ‹ предыдущая
- …
- 18
- 19
- 20
- 21
- 22
- …
- следующая ›
- последняя »