Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Область действия полей объекта и параметр SELF
Принципы ООП требуют, чтобы прямые обращения к полям объекта в тексте основной программы производились как можно реже, обращение к полям предпочтительно только из доступных им методов. Таким образом, в основной программе должны быть только вызовы методов, изменяющих поля. Так как данные и методы инкапсулированы в одном объекте, все данные (поля) объекта глобальны по отношению к любым его методам и могут в них использоваться в виде простого имени (не составного).Каждая переменная объектного типа имеет свои поля и использует методы, общие для всех переменных этого типа. При обращении к методу ему передается особый системный идентификатор SELF (свой, внутренний), представляющий собой обобщенное имя конкретного экземпляра объекта. Внутри методов объекта действует неявный оператор WITH экземпляра (SELF). Это обеспечивает обработку данных именно этого конкретного экземпляра объектного типа. Для объектов допустим и явный With. Так как область действия (domain) полей данных объекта распространяется на тела подпрограмм, реализующих методы данного объекта, имена формальных параметров методов (если они есть) не должны совпадать ни с одним из имен полей данных этого объекта. Компилятор автоматически обрабатывает параметр SELF, поэтому не стоит использовать его явно. Исключением является случай, когда возникает "конфликт" между идентификаторами в пределах методов. Пример такой "развязки" приведен в листинге 2. В программе листинга 2 одинаковы имена элементов записи и полей объекта. Листинг 2.Развязка конфликта имен. Uses Crt; Type PosRec = Record { - объявление записи } Line, Col : Word; { - имена ее элементов } end; { - конец объявления записи } ObjPos = OBJECT { - объявление объекта } Line, Col : Word; { - совпали имена полей объекта и записи } Procedure Init ( Роs : PosRec ); end; { - конец объявления объекта } { ----- Метод объекта ObjPos ------- } Procedure ObjPos.Init ( Pos : PosRec ); Begin With Pos do begin { - присоединение к формальному параметру } { поля > } Self.Line := Line;{ <- поля записи с With для} { объекта : } Self.Col := Col; { формального параметра } end { - With } End; { Переменные типа: } Var VObj: ObjPos; { - объект } VPosRec: PosRec; { - запись } { -------- Основная программа----------- } Begin ClrScr; VPosRec.Line := 2; { - инициализация полей записи } VPosRec.Col := 5; Writeln('Поля записи: ', #10#13, 'VPosRec.Line =', VPosRec.Line, { - вывод полей записи } ' VPosRec.Col = ', VPosRec.Col ); Writeln('Неинициализированные поля объекта:', #10#13, 'VObj.Line =', VObj.Line, { - вывод полей объекта } ' VObj.Col = ', VObj.Col ); VObj.Init(VPosRec); { - инициализация полей объекта данными записи } Writeln('Инициализированные поля объекта:', #10#13, 'VObj.Line = ', VObj.Line, ' VObj.Col = ',VObj.Col ); End. Скрытые поля и методы Часть полей и методов объектных типов можно объявить как скрытые. Это ограничивает область их видимости. Для этого используется ключевое слово private. Схема объявления: Туре ObjectType = object Обычные поля и методы private Скрытые поля и методы end; Идентификаторы полей и методов, объявленных как скрытые, известны (доступны, видимы) только в пределах программы или модуля, в которых они объявлены. Вне модуля с их описанием скрытые поля и методы неизвестны (недоступны). Сам объектный тип и его остальные компоненты видимы по обычным правилам. Скрытые компоненты объектных типов аналогичны переменным раздела реализации (implementation) модуля. Это позволяет изолировать (скрыть) технические подробности реализации объектов от программ-потребителей, способствует большей независимости программных единиц и служит дополнительным средством контроля за использованием объектов.
|
||
Последнее изменение этой страницы: 2018-05-10; просмотров: 300. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |