Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на языке Delphi_2.doc
Скачиваний:
31
Добавлен:
28.03.2015
Размер:
494.59 Кб
Скачать

3.5.4. Свойство-массив как основное свойство объекта

Свойство-массив можно сделать основным свойством объектов данного класса. Для этого в описание свойства добавляется слово default.

Такое объявление свойства позволяет рассматривать сам объект класса как массив и опускать имя свойства-массива при обращении к нему из программы, например:

for I := 0 to Polygon.PointsCount - 1 do

Polygon.[I].x:=100*I;

Следует помнить, что только свойства-массивы могут быть основными свойствами объектов; для обычных свойств это недопустимо.

3.5.5. Методы, обслуживающие несколько свойств

Один и тот же метод может использоваться для получения (установки) значений нескольких свойств одного типа. В этом случае каждому свойству назначается целочисленный индекс, который передается в метод чтения (записи) первым параметром.

Пример:

type

TRectangle = class(TFigure)

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;

Обращения к свойствам Left, Top, Right, Bottom и Coordinates заменяются компилятором на вызовы одного и того же метода GetCoordinate, но с разными значениями параметра Index:

Var

Rectangle: TRectangle;

...

ShowMessage(inttostr(Rectangle.Left));

//Эквивалентно:ShowMessage(inttostr(Rectangle.GetCoordinate(0)));

ShowMessage(inttostr(Rectangle.Top));

//Эквивалентно:ShowMessage(inttostr(Rectangle.GetCoordinate(1)));

ShowMessage(inttostr(Rectangle.Right));

//Эквивалентно:ShowMessage(inttostr(Rectangle.GetCoordinate(2)));

...

3.6. Наследование

3.6.1. Понятие наследования

Классы инкапсулируют (т.е. включают в себя) поля, методы и свойства; это их первая черта. Следующая не менее важная черта классов — способность наследовать поля, методы и свойства других классов.

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

Чтобы пояснить сущность наследования обратимся к примеру. Раньше мы описывали классы Tfigure (с добавлением свойства Visible), Tpolygon, Tellipse.

TYPE

TCoordinates=record

X,Y:Integer;

end;

Tfigure = class

private

Fcolor:TColor;

Coords:TCoordinates;

Protected

Procedure setColor(c:TColor); virtual;

Procedure Draw; virtual; abstract;

Procedure Hide; virtual; abstract;

Procedure Move(NewX,NewY:Integer);

Property Color: TColor

read Fcolor

write setcolor;

End;

Рисунок дерева классов.

Очень важно, что в отношениях наследования любой класс может иметь только одного непосредственного предка и сколь угодно много потомков. Поэтому все связанные отношением наследования классы образуют иерархию. Примером иерархии классов является библиотека VCL; с ее помощью в среде Delphi обеспечивается разработка GUI-приложений.