Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Уст.лекции_ООП.doc
Скачиваний:
16
Добавлен:
22.09.2019
Размер:
359 Кб
Скачать
☆

7.1 Пример использования

type    MyString = string[15]; var    P: ^MyString; begin    New(P);    P^:= '01 января 2000г';    Dispose(P); end;

8 Вопрос

Выделение памяти под экземпляр объекта. Привести пример объявления и реализации конструктора и деструктора.

Особой разновидностью методов являются конструкторы и деструкторы. Напомним, что конструкторы создают, а деструкторы разрушают объекты.

Конструктор (constructor) - особый метод класса, обеспечивающий инициализацию объектов этого класса. Обычно имеет имя Create и вызывается следующим образом:

<имя инициализируемого объекта> := <имя класса>.Create(<список параметров>);

Особенность вызова конструктора - он вызывается с помощью ссылки на класс, а не на экземпляр класса (в отличие от других методов, которые вызываются с помощью ссылки на объект). Иначе просто нельзя - ведь экземпляр объекта в момент вызова конструктора еще не создан. Код конструктора класса статичен и находится в памяти. Он относится к классу, а не к его экземпляру.

Деструктор (destructor) - особый метод класса, обеспечивающий разрушение объектов этого класса (и, в частности, освобождение занимаемой ими области в динамической памяти). Обычно имеет имя Destroy.

В Delphi все классы являются потомками, по крайней мере, класса TObject, поэтому, для корректного освобождения памяти, необходимо перекрывать деструктор, используя директиву override.

В Delphi прямой вызов деструктора используется редко. Вместо него используют метод Free.

MyObject.Free;

Метод Free вначале проверяет существует ли уничтожаемый объект, а затем вызывает деструктор. Этот прием позволяет избегать ошибок, возникающих при обращении к несуществующему объекту.

Нет необходимости всегда объявлять и описывать конструкторы и деструкторы. Все классы языка Delphi неявно наследуют функциональные возможности базового класса TObject, причем независимо, указано ли это наследование явно.

Объявление конструкторов и деструкторов похоже на объявление обычных методов с той лишь разницей, что вместо зарезервированных слов function и procedure используются слова constructor и destructor.

8.2 Пример объявления

type

TPerson=class

Name:string[30];

constructor Create;

destructor Destroy; override;

…

End;

Implementation

constructor TPerson.create;

begin

…

end;

destructor TPerson.Destroy;

begin

Professor.Free; //удаление объекта

…

inherited Destroy;

end;

9 Вопрос

Исключительные ситуации в терминологии ООП. Глобальная и локальная обработка исключений. Привести пример использования операторов контроля исключительных ситуаций.

Исключительные ситуации в Delphi встречаются постоянно. Исключительная ситуация это такая ситуация, в результате которой генерируется ошибка, и выполнение программы прерывается. Именно потому такая ситуация и называется исключительной. Например, деление на ноль - классический пример исключительной ситуации.

9.1 Глобальная обработка исключений

Механизм глобальной обработки исключений реализуется через объект Application, который есть в любом приложении.

Программист может выполнить полную обработку исключений, создав собственный глобальный обработчик события OnException. Для этого удобно использовать компонент ApplicationEvents.

Событие OnException имеет тип TExceptionEvent, который описан следующим образом:

Type TExceptionEvent = procedure (Sender: TObject; E: Exception) of Object

Параметр E представляет собой объект-исключение. С его помощью можно получить доступ к свойствам объекта-исключения, например, к свойству Message, содержащему описание возникшего исключения.