Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Плещёв ВУМИП 2012-07-06.doc
Скачиваний:
66
Добавлен:
13.05.2015
Размер:
9.35 Mб
Скачать

1.5.7. Конструкторы и деструкторы

Конструкторы‑ специальные методы, создающие объекты. Они объ­­яв­ляются подобно процедурам, но в начале указывается словоConstructor. Обычно именем конструктора является словоCreate. В качест­ве параметра (Owner) может использоваться владелец объекта. В реализа­ции конструктора вначале обычно идет вызов наследуемого конструктора с помощью словаInherited. В результате инициируются все наследуемые поля, а затем инициируются новые поля данного класса.

В базовом классе TObject имеется готовый конструктор Create, который и обычно используется для создания объектов.

Деструкторы‑ методы, уничтожающие объекты. Они объявляются подобно процедурам, но в начале указывается словоDestructor. Обычно именем конструктора является словоDestroy. Реализация деструктора обычно завершается вызовом наследуемого деструктора с помощью словаInherited. В базовом классеTObjectимеется готовый деструкторDesrtoy.

Пример:DestructorDestroy;Override;

1.5.8. События

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

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

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

Published Property MyEvent:TNotifyEvent Read FMyEvent Write FMyEvent;

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

IfAssigned(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. Заменяет ли одноименный статический метод в потомке родитель­ский?

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

1.6.1. Исключения

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

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

Базовым классом для всех исключений является 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‑ ошибка в интерфейсеOLEIdismatch. В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.