Студопедия

КАТЕГОРИИ:

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

Область действия полей объекта и параметр 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; просмотров: 252.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...