Private

FCoordinates: array[0..3] of Longint;

function GetCoordinate(Index: Integer): Longint;

procedure SetCoordinate(Index: Integer; Value: Longint);

Public

property Left: Longint index 0 read GetCoordinate write SetCoordinate;

property Top: Longint index 1 read GetCoordinate write SetCoordinate;

property Right: Longint index 2 read GetCoordinate write SetCoordinate;

property Bottom: Longint index 3 read GetCoordinate write SetCoordinate;

property Coordinates[Index: Integer]: Longint read GetCoordinate

write SetCoordinate;

end;

Наследование и полиморфизм

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

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

Type

TFigure = class {Геометрическая фигура. Базовый, абстрактный класс.

Не содержит реализации методов }

procedure Draw; virtual; abstract; {Описывает рисование фигуры}

end;

TRectangle = class(TFigure) {Класс Прямоугольник.

Наследуется от класса TFigure

procedure Draw; override; {Переопределяет процедуру Draw базового класса. Рисует прямоугольник }

end;

TEllipse = class(TFigure) {Класс Эллипс.

Наследуется от класса TFigure }

procedure Draw; override; {Переопределяет процедуру Draw базового класса. Рисует эллипс}

end;

Абстрактный класс TFigure – базовый классописания геометрических фигур. В этом классе не определяется, какая именно геометрическая фигура будет создана и как она будет нарисована. Уточнение и реализация метода отображения геометрической фигуры осуществляется в наследуемых классах (в примере это прямоугольник и эллипс). Используя такую иерархию классов, можно сконструировать обобщенную процедуру DrawFigure, которая рисует геометрическую фигуру:

procedure DrawFigure (Figure: TFigure);

Begin

Figure.Draw; {Рисует фигуру, которая соответствует объекту класса

TFigure}

end;

Таким образом, если передать в процедуру DrawFigure объект класса TFigure или наследуемого от него, то будет вызвана процедура Draw, того класса, к которому принадлежит объект (например,если этообъекткласса TEllipse, то будет нарисован эллипс). В этом и заключается полиморфизм.

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

Type

T1 = class(TObject)

procedure Test(I: Integer); overload; virtual;

end;

T2 = class(T1)

procedure Test(S: string); reintroduce; overload;

end;

Для перегрузки виртуального метода класса-родителя T1 в наследуемом классе T2 добавьте ключевое слово reintroduce в спецификацию метода Test.

Вот что происходит при вызове метода Test для объекта класса T2:

SomeObject:= T2.Create; // создаем объект SomeObject класса T2

SomeObject.Test('Hello!'); // вызывается метод T2.Test


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: