Лабораторная работа №6 Обработка исключительных ситуаций
Задание:
На языке Delphi разработать приложение. Требования к приложению:
Часть «Калькулятор»:
Выполнение 4-х арифметических действий над действительными числами.
Вычисление 3-х математических функций.
Структурная обработка исключительных ситуаций с выводом информации об исключении.
Предусмотреть возможность ввода данных с клавиатуры (обработка нажатий цифровых клавиш и клавиш операций).
Часть «Вычисления выражений»:
Вычисление выражений. Константы и формулы задаются с помощью команды вида имя=выражение. Для вывода значения выражения используется команда PRINT «Подсказка», имя
Для реализации вычисления выражений использовать возможности Microsoft Excel. (С помощью функции CreateOleObject(“Excel.Application”) создать экземпляр приложения Excel. Перенести константы и формулы на рабочий лист, заменив символические имена адресами ячеек.)
var
WB,EX:OleVariant;
begin
try
EX := CreateOleObject('Excel.Application');
WB:=EX.Workbooks.Add($FFFFEFB9);
except
LogError('Проблемы с Excel.');
Exit;
end;
Структурная обработка исключительных ситуаций с выводом информации об исключении. Реализовать собственный класс исключения.
Содержание:
Лабораторная работа №6 1
Обработка исключительных ситуаций 1
Понятие исключительной ситуации 2
Класс Exception 2
Инициализация исключений 4
Защитные конструкции языка Object Pascal 5
Блок try..except 5
Блок try...finally 6
Использование исключительных ситуаций 7
Протоколирование исключительных ситуаций 7
Понятие исключительной ситуации
Исключительная ситуация - нештатное событие в процессе выполнение программы, способное повлиять на дальнейшее выполнение программы.
Компилятор Delphi генерирует код, который перехватывает любое такое нештатное событие, сохраняет необходимые данные о состоянии программы, и выдает разработчику. Что можно выдать в объектно-ориентированном языке программирования? Конечно же, объект. С точки зрения Object Pascal исключительная ситуация — это объект.
Вы можете получить и обработать этот объект, предусмотрев в программе специальную языковую конструкцию (try…except). Если такая конструкция не предусмотрена, все равно исключение будет обработано — в недрах библиотеки VCL есть соответствующие обработчики, окружающие все потенциально опасные места.
Класс Exception
Исключительные ситуации отличаются классом. В системном модуле Delphi SYSUTILS.PAS описан объектный тип Exception. Он является предком для всех других объектов — исключительных ситуаций. Программный код класса представлен ниже.
Exception = class(TObject)
private
FMessage: string;
FHelpContext: Integer;
public
constructor Create(const Msg: string);
constructor CreateFmt(const Msg: string; const Args: array of const);
constructor CreateRes(Ident: Integer); overload;
constructor CreateRes(ResStringRec: PResStringRec); overload;
constructor CreateResFmt(Ident: Integer; const Args: array of const); overload;
constructor CreateResFmt(ResStringRec: PResStringRec; const Args: array of const); overload;
constructor CreateHelp(const Msg: string; AHelpContext: Integer);
constructor CreateFmtHelp(const Msg: string; const Args: array of const;
AHelpContext: Integer);
constructor CreateResHelp(Ident: Integer; AHelpContext: Integer); overload;
constructor CreateResHelp(ResStringRec: PResStringRec; AHelpContext: Integer); overload;
constructor CreateResFmtHelp(ResStringRec: PResStringRec; const Args: array of const; AHelpContext: Integer); overload;
constructor CreateResFmtHelp(Ident: Integer; const Args: array of const;
AHelpContext: Integer); overload;
property HelpContext: Integer read FHelpContext write FHelpContext;
property Message: string read FMessage write FMessage;
end;
ExceptClass = class of Exception;
Как видно из приведенного описания класса Exception, у него имеется двенадцать конструкторов, позволяющих задействовать при создании объекта текстовые строки из ресурсов приложения (имя включает строку Res), форматирование текста (включает Fmt), связь с контекстом справочной системы (включает Help).
Конструкторы, в названии которых встречается подстрока Fmt, могут вставлять в формируемый текст сообщения об ошибке значения параметров, как это делает стандартная функция Format:
If MemSize > Limit then
raise EOutOfMemory.CreateFmt('Cannot allocate more than %d bytes',[Limit]);
Тип Exception порождает многочисленные дочерние типы, соответствующие часто встречающимся случаям ошибок ввода/вывода, распределения памяти и т. п.
Заметим, что тип Exception и его потомки представляют собой исключение из правила, предписывающего все объектные типы именовать с буквы Т. Потомки Exception начинаются с Е, например EZeroDivide.
Таблица 1. Исключительные ситуации целочисленной математики (порождены от EIntError)
Тип |
Условие возникновения |
EDivByZero |
Попытка деления на ноль (целое число) |
ERangeError |
Число или выражение выходит за допустимый диапазон |
EIntOverflow |
Целочисленное переполнение |
Таблица 2. Исключительные ситуации математики с плавающей точкой (порождены от EMathError)
Тип |
Условие возникновения |
EInvalidOp |
Неверная операция |
EZeroDivide |
Попытка деления на ноль |
EOverflow |
Переполнение с плавающей точкой |
EUnderflow |
Исчезновение порядка |
EInvalidArgument |
Неверный аргумент математических функций |
