Borland Pascal. Руководство пользователя

6cac1dc9

Методы


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

TEmployee = object Name: string[25]; Title: string[25]; Rate: Real; end;

Большинство программистов использовали бы оператор with для присвоения полям Name, Title и Rate начальных значений:

var MyEmployee: Employee; with MyEmployee do begin Name := 'Sanderson, Arthur'; Title := 'Word processor'; Rate := 9.45; end;

Это тоже неплохо, но здесь мы жестко ограничены одной специ- фическим экземпляром записи - MyEmployee. Если потребуется иници- ализировать более одной записи типа Employee, то вам придется ис- пользовать большее число операторов with, которые выполняют в точности те же действия. Следующим естественным шагом является создание инициализирующей процедуры, которая обобщает оператор with применительно к любому экземпляру типа TEmployee, пересылае- мой в качестве параметра:

procedure InitTEmployee(var Worker: TEmployee; AName, ATitle: String; ARate: Real); begin with Worker do begin Name := NewName ; Title := NewTitle; Rate := NewRate; end; end;

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

Это чувство значит, что, ну, скажем, вы разрабатываете про- цедуру InitTEmployee специально для обслуживания типа TEmployee. Тогда почему вы должны помнить, какой тип записи и какой его эк- земпляр обрабатывает InitTEmployee? Должен существовать некоторый путь объединения типа записи и обслуживающего кода в одно единое целое.

Такой путь имеется и называется методом. Метод - это проце- дура или функция, объединенная с данным типом столь тесно, что метод является как бы окруженным невидимым оператором with, что делает экземпляр данного типа доступными изнутри для метода. Оп- ределение типа включает заголовок метода. Полное определение ме- тода квалифицируется в имени типа. Тип объекта и метод объекта являются двумя лицами этой новой разновидности структуры, именуе- мой методом.


type TEmployee = object Name, Title: string[25]; Rate: Real; procedure Init (NewName, NewTitle: string[25]; NewRate: Real); end;

procedure TEmployee.Init (NewName, NewTitle: string[25]; NewRate: Real); begin Name := NewName ; { Поле Name объекта TEmployee } Title := NewTitle; { Поле Tutle объекта TEmployee } Rate := NewRate; { Поле Rate объекта TEmployee } end;

Теперь для инициализации экземпляра типа TEmployee вы просто вызываете его метод, словно метод является полем записи, что име- ет вполне реальный смысл:

var AnEmployee: TEmployee; AnEmployee.Init('Sara Adams, Account manager, 15000'); {пpосто, не так ли?}


Содержание раздела