Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BorlandPascal.doc
Скачиваний:
54
Добавлен:
17.03.2015
Размер:
2.83 Mб
Скачать

Описания методов

Описание метода внутри объектного типа соответствует опере-

жающему описанию (forward) этого метода. Таким образом, метод

должен быть реализован где-нибудь после описания объектного типа

и внутри той же самой области действия метода путем определяющего

описания.

Для процедурных и функциональных методов определяющее описа-

ния имеет форму обычного описания процедуры или функции, за тем

исключением, что в этом случае идентификатор процедуры или функ-

ции рассматривается как идентификатор метода.

Для методов конструкторов и деструкторов определяющее описа-

ний принимает форму описания процедурного метода, за тем исключе-

нием, что зарезервированное слово procedure заменяется на заре-

зервированное слово constructor или destructor. Определяющее опи-

сание метода может повторять (но не обязательно) список формаль-

ных параметров заголовка метода в объектном типе. В этом случае

заголовок метода должен в точности повторять заголовок в объект-

ном типе в порядке, типах и именах параметров и в типе возвращае-

мого функцией результата, если метод является функцией.

В определяющем описании метода всегда присутствует неявный

параметр с идентификатором Self, соответствующий формальному па-

раметру-переменной, обладающему объектным типом. Внутри блока ме-

тода Self представляет экземпляр, компонент метода которого был

указан для активизации метода. Таким образом, любые изменения

значений полей Self отражаются на экземпляре.

Область действия идентификатора компонента объектного типа

распространяется на блоки процедур, функций, конструкторов и

деструктора, которые реализуют методы данного объектного типа.

Эффект получается тот же, как если бы в начало блока метода был

вставлен оператор with в следующей форме:

with Self do

begin

...

end;

Исходя из этих соображений, написание идентификаторов компо-

нентов, формальных параметров метода, Self и любого идентификато-

ра, введенного в исполняемую часть метода, должно быть уникаль-

ным.

Ниже приводятся несколько примеров реализаций методов:

procedure Rect.Intersect(var R: Rect);

begin

if A.X < R.A.X then A.X := R.A.X;

if A.X < R.A.Y then A.Y := R.A.Y;

if B.X > R.B.X then B.X := R.B.X;

if B.Y < R.B.Y then B.Y := R.B.Y;

if (A.X >= B.X) or (A.Y >= B.Y) then Init (0, 0, 0, 0);

end;

procedure Field.Display;

begin

GotoXY(X, Y);

Write(Name^, ' ', GetStr);

end;

function NumField.PutStr(S: string): boolean;

var

E: integer;

begin

Val(S, Value, E);

PutStr := (E = 0) and (Value >= Min) and (Value <= Max);

end;

Соседние файлы в предмете Программирование на Pascal