Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Высокоуровневые методы информатики и программир...docx
Скачиваний:
25
Добавлен:
12.11.2019
Размер:
6.53 Mб
Скачать

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

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

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

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

Пример: Destructor Destroy; Override;

1.5.8. События

Событие ‑ это специальное свойство ‑ указатель функции типа 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. Заменяет ли одноименный статический метод в потомке родитель­ский?

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 ‑ ошибка в интерфейсе 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.