TURBO PASCAL

Новости

Программы   

Turbo Pascal 

Игры

Документация   

Странности

FAQ

Ссылки

Форум

Гостевая книга

Рассылка

Благодарности

Об авторе

 

 

Методы 

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

             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осто, не так ли?}

Содержание

На первую страницу

Rambler's Top100 Rambler's Top100
PROext: Top 1000

(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Hosted by uCoz