
- •Проверил ______________________ Беляков с.Л.
- •Тема №1 «Тождество, качество программ»
- •Тема №2 «Основные этапы технологии разработки программ»
- •Тема №3 «Исполнение программ вычислительными устройствами»
- •Лекция №5 «Поразрядные операции над числами»
- •Лекция №6 «Передача параметров функциям по значению или по указателю»
- •Лекция №7 «Классы»
- •Лекция №8 «Ввод-вывод информации в файлы».
- •Лекция №9 «Перемещение указателя файла».
- •Лекция №10 «Технология поиска информации»
- •Лекция №11 «Технология поиска»
- •Лекциия №12 «Сортировка»
- •Лекция №13 «Обработка ошибок в работе программ»
- •Лекция №14 «Управление памятью»
- •Лекция №15 «Кодирование и отображение информации»
- •Лекция №16 «Глобальные переменные и пространства имен»
- •Лекция №18 «Тестирование программного кода»
Лекция №13 «Обработка ошибок в работе программ»
Исполнение любой программы может сопровождаться появлением сочетаний данных, которые считаются ошибочными. Не учитывать подобные ситуации – значит строить ненадежную программу. Обработка ошибок в программах на многих языках может строиться по двум основным направлениям:
- пассивное реагирование на ошибочную ситуацию
- активное реагирование на ошибочную ситуацию
Оба пути не исключают друг друга, а могут комбинироваться.
Пассивный режим основан на возврате (return) из функции признака ошибки. В некоторых случаях в качестве признака ошибки используется одно из значений данных, такой стиль программирования применять не рекомендуется из-за высокой вероятности “спутать” полезное и ошибочное значение. Чтобы разделить ошибочные и полезные значения, выходные переменные переносят в список параметров функций. В качестве возвращаемого оставляют булево значения, таким образом, оно позволяет однозначно определить была ошибка или не было. В обоих случаях остается открытым вопрос о том, будет ли проверено возвращаемое значение. Если это не сделано, ошибочные данные будут распространяться через последующий процесс обработки.
В основе активного режима обработки ошибок лежит использование исключений. Исключение в программе это специфическая ситуация, которая возникает после использования ключевого слова “throw”. Оператора “throw” выбрасывает исключения. Смысл этого действия в том, что дальнейшее исполнение программного кода функции прекращается, управление передается в вызвавшую функцию и далее возможно две ситуации:
- вызвавшая функция обрабатывает исключения.
- вызвавшая функция не обрабатывает исключения. Здесь объект исключения “пробрасывается” в вызвавшую функцию верхнего уровня и так далее до тех пор, пока
исключение либо не будет обработано, либо будет выброшено ОС, в этом случае программа аварийно завершается.
Обработка исключений строится на использовании операторов try и catch.
Обработка исключений при использовании try и catch осуществляется по следующему сценарию:
- Последовательно выполняются строки кода в блоке try. Если исключений не возникло, после блока try исполняется код, размещенный после ловушек.
- Если возникло исключение в блоке try дальнейшее исполнение кода прерывается и система исполнения программ стремится найти ловушку, соответствующую типу исключения. Если не одна ловушка не сработала, исключение “пробрасывается” в вызвавшую функцию.
- Выполняется программный код первой подходящей ловушки. Все ловушки просматриваются сверху вниз. После выполнения кода ловушки, делается переход на программный код за пределами ловушки. Исключение считается обработанным, программа продолжается в обычном режиме.
В блок try обычно помещают программный код минимального размера, поскольку обработка исключений приводит к увеличению общего объема программы. Это связано с тем, что компилятор дополняет ненадежный код специальным кодом, для восстановления после прерывания.
Catch(…) это вариант ловушки, которая ловит любые типы исключений.
Стандартная библиотека С++ выбрасывает ряд исключений, определенных классов, описанных в самой библиотеке.