Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Свойства и конструкторы исключений




Иерархия классов исключений

Исключения

Обработка исключительных ситуаций

Вопросы для самопроверки

Вопросы для самопроверки и контроля

События

Событие ‑ это специальное свойство ‑ указатель функции типа TNotifyEvent с одним параметром (обычно Self - данный объект) типа TObject. Подобный тип используется для всех событий с одним параметром Sender:TObject (например, OnClick -щелчок мышки).

Пример ввода события в класс: объявление поля и метода работы:

Private FMyEvent:TNotifyEvent; //объявление поля для свойства

Published Property MyEvent:TNotifyEvent Read FMyEvent Write FMyEvent;

Для вызова обработчика нужно указать в нашем примере:

If Assigned(FmyEvent) Then //проверка наличия обработчика пользователя

OnMyEvent(Self) //вызов обработчика MyEvent

Если в обработчик передаются другие параметры, кроме Self, то объявляется собственный тип:

Type TMyEvent=Procedure(Sender:TObject,Var DEvent: Boolean) Of Object;

T=Class(TObject);

Private FMyEvent:TmyEvent;

Published Property MyEvent:TMyEvent Read FMyEvent Write FMyEvent;

End;

1. Каковы свойства объектно‑ориентированного программирования?

2. Назначение метода‑конструктора объекта.

Контрольные вопросы

1. Каково назначение метода‑деструктора объекта?

2. Допускает ли Delphi традиционное и объектно‑ориентированное програм­мирование?

3. Заменяет ли одноименный статический метод в потомке родитель­ский?

 

При работе программы могут возникать исключительные ситуации, связанные с различными ошибками в программе (деление на нуль, пе­ре­пол­нения,...) или сбоями в работе устройств (ошибки при чтении или записи в файл,...). В таких ситуациях генерируется временный специаль­ный объект - исключение, который определяет и детализирует возникшую исключительную ситуацию. Если исключение в программе не перех­ва­ты­вает­ся, то метод Tapplication.HandleException выдает в окне сообщения крат­кую информацию, и обычно программа заканчивает свою работу ава­рий­но (системный обработчик). Исключения сгруппированы в иерархию клас­­сов различных уровней. Исключение родительского класса пе­рехва­тывает исключения потомков (непосред­ственно ниже­стоящих классов).

Базовым классом для всех исключений является Exception.

Приведем список имен классов исключений, выделяя отступами подчиненность классов.

Eabort- искусственное исключение, вызываемое процедурой Abort.

EabstractError ‑ попытка вызвать абстрактный метод.

EAccessViolation ‑ ошибочный доступ к памяти.

EArrayError ‑ ошибка в индексе элемента массива.

EAssertionFailed ‑ ложное условие, проверяемое процедурой Assert (п.1.7.9)

EBitsError ‑ ошибка доступа к массиву логических величин TBits.

ECacheError ‑ ошибка построения кэша куба решений.

EComponentError ‑ ошибка в регистрации или переименовании компонент.

EControlC ‑ нажатие пользователем клавиш Ctrl+C.

EConvertError ‑ ошибка преобразований строк (StrToInt,...) или объектов.

EDatabaseError ‑ ошибка при работе с базами данных.

EDBClient ‑ ошибка в наборе данных. В ErrorCode ‑ код ошибки.

EReconcileError ‑ ошибка в обновлении данных компонента TClientDataset (п. 4.10.1).

EBDEngineError ‑ ошибка в BDE. Свойство Errors ‑ сообщение об ошибке.

ENoResultError ‑ открытие запроса без оператора Select.

EUpdateError ‑ ошибка при обновлении в TProvider.

EDateTimeError ‑ ошибка ввода даты или времени при использовании компонента TdateTimePicker (п. 2.3.2.7).

EDBEditError ‑ несоответствие данных с маской ввода.

EDimensionMapError ‑ ошибка в формате данных в кубе решений.

EDimIndexError ‑ ошибка в индексе в размерности в кубе решений.

EExternalException ‑ неизвестный код исключения.

EInOutError ‑ ошибка ввода ‑ вывода из файла. В Errorcode ‑ код ошибки.

EIntError ‑ ошибки с целочисленными операциями (п.1.3.5.2).

EDivByZero ‑ целочисленное деление на нуль.

ERangeError ‑ значение или индекс вне допустимого диапазона (п.1.3.5.2)

EIntOverflow ‑ переполнение при операции с целыми числами.

EIntfCastError ‑ ошибочное преобразование типов As к интерфейсу.

EInvalidCast ‑ ошибка преобразования типа объекта операцией As.

EInvalidGraphic ‑ нераспознанный графический файл.

EInvalidGraphicOperation ‑ ошибочная графическая операция.

EInvalidGridOperation ‑ ошибочная операция с таблицей.

EInvalidOperation ‑ ошибочная операция с компонентом.

EInvalidPointer ‑ ошибочная операция с указателем.

EListError ‑ ошибка при работе с объектом типа списка Tlist,TstringList.

ELowCapacityError ‑ нехватка памяти для куба решений.

EMathError ‑ ошибки с операциями над вещественными числами.

EInvalidArgument ‑ запрещенное значение аргумента функции.

EInvalidOp ‑ неопределенная операция с плавающей точкой.

EOverFlow - переполнение при операции с вещественными числами.

EUnderFlow - потеря значащих разрядов при операции с числами.

EMCIDeviceError ‑ ошибка доступа к устройствам мультимедиа через MCI

EMenuError ‑ ошибка в элементах меню.

EOleCtrlError ‑ невозможность связать приложение и компонент ActiveX.

EOleError ‑ низкоуровневая ошибка OLE.

EOleSysError ‑ ошибка в интерфейсе OLE Idismatch. В ErrorCode ‑ код.

EOleException ‑ ошибка OLE, связанная с методом или свойством.

EOutLineError ‑ ошибка при работе с компонентом Outline.

EOutOfMemory ‑ ошибка при динамическом выделении памяти.

EOutOfResources ‑ нет места для размещения обработчика Windows.

EPackageError ‑ исключение времени проектирования при работе пакета.

EParserError ‑ ошибка при переводе описания формы в двоичный вид.

EPrinter ‑ ошибка при печати (нет принтера, ошибка при передаче).

Eprivilege ‑ недоступная по привилегиям команда процессора.

EPropReadOnly ‑ изменить значение только читаемого свойства.

EPropWriteOnly ‑ прочитать значение только записываемого свойства.

EPropertyError ‑ ошибка при задании значения свойства.

ERegisteryException ‑ ошибка при обращении к реестру.

EReportError ‑ ошибка задания сервера для соединения базы и Report.

EResNotFound ‑ ошибка при загрузке файла ресурсов.dfm или.res.

EStackOverFlow ‑ переполнение стека (директива компилятора{$M+}).

EStreamError ‑ ошибки потоков.

EFCreateError ‑ ошибка при создании файла (уже есть файл,...).

EFOpenError ‑ ошибка при открытии файла.

EFilerError ‑ ошибки файловых потоков.

EReadError ‑ невозможно прочитать заданное число байтов.

EWriteError ‑ невозможно записать заданное число байтов.

EClassNotFound ‑ компонент не связан с приложением.

EInvalidImage ‑ невозможно прочесть файл ресурсов.

EMethodNotFound ‑ невозможно найти реализацию метода.

EStringListError ‑ ошибка доступа к окну списка с неверным индексом.

EThread ‑ конфликт в многопоточном приложении.

ETreeViewError ‑ ошибка индекса при работе с компонентом TreeView.

EUnsupportedTypeError ‑ ошибка типа поля - размерности куба решений.

EVariantError ‑ ошибка, связанная с типом данных Variant.

EWin32Error ‑ ошибка Windows.

Message - текст, выводимый обработчиком в окне сообщения.

HelpContext ‑ номер экрана контекстно‑зависимой справки, вызы­ваемой клавишей F1 из окна сообщения об ошибке. Файл справки предварительно нужно создать и связать его с приложением командой Project/Options/Application/Help file (п. 5.1).

Конструкторы (методы) исключений позволяют сформировать свойства Message и Help.

Create (const Msg: string).

CreateFmt (const Msg: string, const Args:array of const).

CreateRes (Ident: integer).

CreateResFmt (Ident:integer, const Args:array of const).

CreateHelp (const Msg: string, HelpContext:integer).

CreateFmtHelp (const Msg: string, const Args:array of const, HelpContext).

CreateResHelp (Ident,HelpContext:integer).

CreateResFmtHelp (Ident:integer, const Args:array of const, HelpContext).

Конструкторы, в имени которых нет Fmt или Res, присваивают свой­ству Message значение аргумента Msg.

Конструкторы, в имени которых есть Fmt, содержат параметр Msg с описанием формата редактирования элементов массива Args (аналогично функции Format). Конструкторы, в имени которых есть Help, присваивают свойству HelpContext значение одноименного аргумента.

Конструкторы, в имени которых есть Res, параметром Ident задают идентификатор строки ресурса (п. 1.3.1.2) сообщения или строки описания формата, если в имя входит Fmt.

Примеры использования конструкторов:

Type Emy=Class(Exception); // создание класса исключений (п. 1.6.9)

Raise Emy.Create(‘Ошибка в параметрах’);//генерация исключения (п.1.6.7)

Raise Emy.CreateFmt(‘Задано %d, а нужно%d’,[4,9]); // формат. сообщение

Raise EZeroDivide.Create(‘Деление на ноль’); // генерация исключения

Raise Emy.CreateRes(9); //свойство Message=строке ресурсов с номером 9

Raise Emy.CreateResFmt(8,[5,7]); // Message=отформатированные 5 и 7.

1.6.4. Блок зачистки Try‑ Finally ‑ End

Try <операторы> Finally <всегда выполняемые операторы> End;

Операторы, которые указаны после Finally, выполняются и при успешном, и при аварийном завершении работы операторов, указанных перед Finally. Это позволяет корректно завершить работу программы в исключительной ситуации, например, освободить динамически выделен­ную память, закрыть файлы, удалить временные файлы.




Поделиться с друзьями:


Дата добавления: 2014-12-08; Просмотров: 357; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.042 сек.