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

Замещенные методы

Замещение методов предполагает передачу и изменение методов от класса-предка классу-наследнику. Как мы уже отметили, только виртуальные или динамические методы могут быть замещенными. Рассмотрим пример:

type

TComponentParent = class

procedure MyProcVirtual; virtual;

procedure MyProcDynamic; dynamic;

end;

TComponentChild = class(TComponentParent)

procedure MyProcVirtual; override;

procedure MyProcDynamic; override;

end;

Применение служебного слова override после названия метода позволяет заместить оригинал метода класса-предка методом класса-наследника. При этом замещение происходит непосредственно в таблице виртуальных методов (или таблице динамических методов). При использовании служебных слов virtual или dynamic вместо override произойдет создание нового метода вместо замещения старого.

Замещение методов не работает со статическими методами — при замещении статического метода новым произойдет простая замена метода родителя в потомке.

Абстрактные методы

Абстрактными методами называются такие методы, которые описаны внутри определения класса или компонента, но не содержат никаких действий и никогда не вызываются и соответственно не имеют реализации. Абстрактными могут быть виртуальные или динамические методы. Абстрактные методы используются только в классах-предках. Описание абстрактного метода выглядит следующим образом:

procedure MyProcedure; virtual; abstract;

Примечание

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

Свойства

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

Свойства позволяют изменять атрибуты объекта, в том числе, и вычисляемыми значениями. Объявление свойства объекта должно содержать его имя и тип, а также, как минимум, одно объявление способа доступа к данному свойству (описания).

Синтаксис объявления свойства объекта имеет вид:

property <Имя свойства>:<тип> <описания>;

<имя свойства> должно быть уникальным;

<тип> — определяет, значения какого типа могут быть записаны в данном свойстве;

<описания> — объявления способов доступа к данному свойству.

Каждое свойство объекта должно иметь, как минимум, одно обязательное объявление способа доступа к свойству. Имеется два обязательных описания доступа к свойству объекта: чтение (read) значения свойства и запись (write) значения свойства.

Синтаксис обязательных описаний read и write имеет следующий вид:

read <имя поля> |<имя метода> write <имя поля>|<имя метода>

где <имя поля> — поле, из которого берется или в которое помещается значение свойства,

<имя метода> — метод, который берет или помещает значение свойства компонента.

Объявление read (читать) описывает поле или метод, предназначенные для чтения значения свойства, а объявление write (писать) описывает поле или метод, предназначенные для записи значения свойства компонента.

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

type

TMyObject = class // Объявление нового класса

private FInt: integer; // Объявление целочисленного поля

FReal: real; // Объявление вещественного поля

FChar: char; // Объявление поля символьного типа

published property Prop1:integer read FInt write FInt;

// Объявление свойства Prop1, с помощью

// которого можно читать значение поля

// FInt и записывать данные в это же поле property Prop2:real read FRea1;

// Свойство Ргор2 предназначено

// только для чтения значения поля FReal property РrорЗ:char write FChar;

// Свойство Рrор3 предназначено

// только для записи данных в поле FChar

end;

После такого объявления программист получает доступ к полям объекта через три свойства Prop1, Prop2 и Рrор3.