Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Экземпляры объектных типов






Экземпляры объектных типов описываются в точности так же, как в Паскале описывается любая переменная, либо статическая, либо указатель, ссылающийся на размещенную в динамической памяти переменную:

type PHourly = ^THourly; var StatHourly: THourly; { готово } DynaHourly: PHourly; { перед использованием память должна выделяться с помощью New }

Поля объектов

Вы можете обратиться к полю объекта в точности так же, как к полю обычной записи, либо с помощью оператора with, либо путем уточнения имени с помощью точки. Например:

AnHourly.Rate: = 9.45; with AnHourly do begin Name: = 'Sanderson, Arthur'; Title: = 'Word processor'; end;

Примечание: Не забывайте о том, что наследуемые поля объектов не интерпретируются особым образом только потому, что они являются наследуемыми.

Именно сейчас вы должны запомнить (в конце концов это придет само собой), что наследуемые поля являются столь же доступными, как если бы они были объявлены внутри типа объекта. Например, даже если Name, Title и Rate не являются частью описания типа THourly (они наследованы от типа TEmployee), то вы можете ссылаться на них, словно они описаны в THourly:

AnHourly.Name: = 'Arthur Sanderson';

Хорошая и плохая техника программирования

Даже если вы можете обратиться к полям объекта непосредственно, это будет не совсем хорошей идеей. Принципы объектно-ориентированного программирования требуют, чтобы поля объектов были исключены из исходного кода, насколько это возможно. Это ограничение поначалу может показаться спорным и жестким, но оно является только частью огромной картины объектно-ориентированное программирования, которую мы нарисуем в этой главе. Со временем вы увидите смысл, скрытый в этом новом определении хорошей практики программирования, хотя имеются некоторые основания приоткрыть его перед тем, как все придет само. А пока же примите на веру: избегайте прямого обращения к полям данных.

Примечание: Borland Pascal позволяет вам делать поля объекта и его методы частными. Подробнее об этом рассказы вается ниже.

Итак, как же обращаться к полям объекта? Как читать их и как присваивать им значения?

Примечание: Поля данных объекта - это то, что объект " знает", а методы объекта - это то, что объект " делает".

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

Методы

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

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





© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.