Понятие исключительной ситуации
Исключительная ситуация – нештатное событие в процессе выполнение программы, способное повлиять на дальнейшее выполнение программы. Компилятор 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)
Таблица 2. Исключительные ситуации математики с плавающей точкой (порождены от EMathError)
|