2.5.5.3. Структурная обработка исключительных ситуаций
В любом созданном приложении возможны ошибки. Кроме субъективных ошибок по вине программиста, существуют объективные ошибки, которые иногда нельзя избежать во время проектирования приложения, но они могут быть обнаружены во время его работы.
Исключительная ситуация (exception) – это состояние, возникающее в процессе выполнения программы из-за любых ошибок или ошибочных условий.
Хорошая программа должна работать безошибочно, без зацикливания и зависания.
Среда Delphi поможет произвести структурную обработку исключительных ситуаций.
Когда в программе обнаруживается ошибка, происходит генерация исключительной ситуации. Нормальное выполнение программы прерывается, и управление передается специальной части кода, которая выполняет обработку исключительной ситуации (рисунок 7). После обработки исключительной ситуации возврат в точку ее возникновения не происходит, а выполняются действия, следующие за телом обработчика. В итоге удается отделить смысловую часть алгоритма от обработчиков ошибок, в результате чего программа становится более простой, понятной и отказоустойчивой.
Рисунок 7 ‑ возникновение исключительной ситуации
Структурная обработка исключительных ситуаций ‑ это совокупность операторов, позволяющих программисту, когда возникает ошибка (исключительная ситуация), связаться с кодом программы, подготовленным для обработки такой ошибки. Такая совокупность операторов как бы «охраняет» фрагмент кода программы и определяет обработчика ошибки, который вызывается, если что-то происходит не так в «охраняемом» участке кода.
Синтаксис обработки исключительных ситуаций. Всего существует два типа защищенных участков:
try..except и
try..finally
Первый тип используется для обработки исключительных ситуаций. Его синтаксис:
try
Statement 1;{защищенные от ошибок операторы}
Statement 2;
...
except
on Exception 1 do Statement; {операторы обработки исключительной ситуации}
on Exception 2 do Statement;
...
else
StatementN; {обработка всех остальных ошибок (обработчик по умолчанию)}
end;
Для уверенности в том, что ресурсы, занятые приложением, освободятся в любом случае, можно использовать конструкцию второго типа. Код, расположенный в части finally, выполняется в любом случае, даже если возникает исключительная ситуация. Соответствующий синтаксис представлен ниже:
try
Statement1; {защищенные от ошибок операторы}
Statement2;
...
finally
StatementN; {эти операторы всегда выполняются}
end;
Исключительные ситуации в Delphi описываются классами. Каждый класс соответствует определенному типу исключительных ситуаций. В то время, когда в программе возникает исключительная ситуация, создается объект соответствующего класса, который переносит информацию об этой ситуации из места возникновения в место обработки.
Классы исключительных ситуаций Delphi образуют иерархию, корнем которой является класс Exeption. Все имена классов исключительных ситуаций начинаются с буквы E (от слова Exception). В приложении приведена таблица с подробным описанием операторов, позволяющих реагировать на возникающие ошибки, их необходимо использовать в приложениях для защиты от зависания.
Пример использования в программе
//Необходимо ввести массу машины
try {Начало блока обработки исключительной ситуации}
Massa:=StrToFloat(Edit1.Text); {считываются данные из компонента Edit1}
except
on EConvertError Do {ошибка преобразования строки}
begin
MessageDlg('Некорректно введены данные', mtWarning,[mbOK],0);
{сообщение о неверном вводе данных}
Edit1.SetFocus; {передача фокуса компоненту в котором были введены неверные данные}
Exit;
end;
end; {Конец блока обработки исключительной ситуации}
Однако необходимо учитывать, что, например, введенные данные не приводят к возникновению исключительной ситуации, но тем не менее препятствуют нормальной работе приложения.
Рассматривая приведенный выше пример, можно ввести массу машины равной -5. В результате исключение EConvertError не наступит, но программа правильно работать не будет, поскольку масса машины должна быть положительным числом. В подобных ситуациях необходимо вводить дополнительную обработку, корректности введенных данных. Пример такой обработки приведен ниже.
If (Massa<=1000) or (Massa>10000) Then
begin
MessageDlg('Значение массы машины должно находиться '
+'в пределах от 1000 до 10000 кг',
mtWarning,[mbOK],0);
Edit1.SetFocus; {передача фокуса компоненту в котором были введены неверные данные}
Exit;
end;
В приложении 11 представлены классы исключительных ситуаций и их описание.
- Информатика
- Информатика
- 1. Структура пояснительной записки
- 2. Оформление основных разделов
- 2.1. Титульный лист
- 2.2. Бланк заданий
- 2.3. Содержание
- 2.4. Введение
- 2.5. Основные разделы курсовой работы
- 2.5.1. Математическое решение задачи
- 2.5.2. Алгоритмизация вычислительных процессов
- 2.5.3. Таблица идентификаторов
- 2.5.4. Разработка интерфейса пользователя
- 2.5.5. Структура программного приложения
- 2.5.5.1. Падающее и контекстное меню
- 2.5.5.2. Статусная строка
- 2.5.5.3. Структурная обработка исключительных ситуаций
- 2.5.5.4. Динамически подключаемые библиотеки
- 2.5.5.5. Создание анимации
- 2.5.5.6. Вызов внешнего приложения
- 2.5.5.7. Импорт данных в Microsoft Excel и Microsoft Word
- 2.5.5.8. Построение графических зависимостей
- 2.5.5.9. Использование системных диалогов.
- 2.5.5.10. Ввод-вывод данных через внешний файл
- 2.5.5.11. Дополнительные элементы программы
- 2.6. Разработка справочной системы
- 2.6.1. Создание rtf-файла
- 2.6.1.1. Оформление разделов
- 2.6.1.2. Организация поиска по разделам
- 2.6.1.3. Оформление списка ключевых слов
- 2.6.2. Создание файла справочной системы
- 2.6.3. Создание содержания
- 2.6.4. Использование справочной системы в программе
- 2.7. Расчет контрольного примера
- 2.8. Заключение
- 2.9. Список использованных источников информации
- 3. Защита курсовой работы
- 4. Задания для выполнения курсовой работы
- 4.1. Специальность I-37 01 03 – «Тракторостроение»
- 4.2. Специальность I-37 01 04 – «Многоцелевые гусеничные и колесные машины»
- 4.3. Специальность I-37 01 05 – «Городской электрический транспорт»
- Курсовая работа
- «Информатика»
- Реферат
- 25 Стр., 7 рис., 6 табл., 8 источн., 1 прил.