Методы являются одними из наиболее примечательных атрибутов объектно-ориентированное программирования и требуют некоторой практики перед использованием. Вернемся сначала к исходному воп- росу о тщетной попытке структурного программирования, связанной с инициализацией структур данных. Рассмотрим задачу инициализации записи со следующим определением:
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, что делает экземпляр данного типа доступными изнутри для метода. Оп- ределение типа включает заголовок метода. Полное определение ме- тода квалифицируется в имени типа. Тип объекта и метод объекта являются двумя лицами этой новой разновидности структуры, именуе- мой методом.