Пусть имеются следующие описания ссылочных переменных:
‘REF’ (А1) Е1; ‘REF’ (А2) Е2; ‘REF’ (А3) Е3;
переменная Е1 может ссылаться на объекты классов А1, А2, А3; Е2 – на объекты классов А2, А3; Е3 – только на А3.
2.3. СРЕДСТВА ДОСТУПА Е АТРИБУТАМ ОБЪЕКТОВ
При описании классов все переменные, которые объявлены в данном классе, непосредственно доступны по их именам. Если декларация класса имеет префикс, то в ее операторах непосредственно доступны переменные всех надклассов.
Доступ к атрибутам объектов вне определения класса выполняется с помощью дистанционных идентификаторов, которые содержат обозначение объекта и имя атрибута, к которому производится обращение.
Дистанционный идентификатор имеет вид:
Е.Х, где Е – обозначение объекта, а Х – идентификатор атрибута. Если значением Е является ‘NONE’, то использование Е.Х приведет к ошибке.
В примере 2.3 ссылочная переменная А1 указывает на объект типа автомобиль с параметрами Т=”КАМАЗ“, GR=5.3, LP=2000, LT=100. В этом случае к атрибутам данного объекта А1 можно обращаться следующим образом.
ПРИМЕР 2.5
А1.LP:=А1.LP+1000:
А1.LT:=А1.LT+1000:
В данном примере значение переменной общего пробега и пробега после ремонта увеличивается на 1000.
Автомобиль в этом случае называется квалификацией объектного выражения А1, если объектное выражение имеет вид переменной (простой или с индексами) или указателя функции, то его квалификацией считается квалификация, указанная в описании этой переменной (массива, процедуры-функции). Квалификация генератора объектов или локального объекта – идентификатор класса, записанный после ‘NEW’ или ‘THIS’.
Пусть С – квалификация объектного выражения. В этом случае с помощью конструкции Е.Х можно обращаться только к тем атрибутам объекта, которые заданы в декларации класса о или его надклассов, т.е. класс о необходимо рассматривать как заданный эквивалентной декларацией.
Рассмотрим пример. Пусть задан следующий фрагмент СИМУЛА - программы:
ПРИМЕР 2.6
‘REF’ (А) А1; ‘REF’ (З) В1; ‘REF’ (С) С1;
‘CLASS’ А(Х); ‘REAL’ Х; ‘BEGIN’ … ‘END’;
А ‘CLASS’ B(Y); ‘REAL’ (A) Y; ‘BEGIN’ … ‘END’;
В ‘CLASS’ C; ‘BEGIN’ … ‘END’;
А1:- ‘NEW’ А(6); В1:- ‘NEW’ (12, А1);
С1:- ‘NEW’ С(7, А1);
Обращаться к атрибутам созданных объектов можно с помощью дистанционных идентификаторов через переменные А1, В1, С1 из левой точки программы, на которую распространяется действие их описания, т.е. в том блоке, где описаны переменные А1, В1, С1.
Например, значение А1.Х равно 6, а В1.Х – 12, С1.Х – 7. значение В1.Y равно ссылочной переменной А1, а значение В1.Y.Х – 6, значение С1.Y.Х – 10, после выполнения оператора В1.Х:=С1.Х+В1.Y.Х; Атрибут Х объекта В1 будет иметь значение 13.
Дистанционные идентификаторы, использующие локальный объект, позволяют в теле декларации подкласса обращаться к тем атрибутам, которые непосредственно недоступны из-за конфликтов наименования. Например, если в теле декларации класса С необходимо увеличить атрибут Х на атрибут Х класса А, то необходимо выполнить оператор
Х:=Х+’THIS’ А.Х;
Допустим, в описании действий некоторого класса необходимо сослаться на объект, принадлежащий подклассу, чтобы обратиться к атрибутам этого объекта подкласса. Необходимо применить оперативную квалификацию, которая имеет вид:
‘QUA’ C, где С – идентификатор класса. Оперативная квалификация пишется после имени ссылочной переменной.
В примере 2.6 классы В и С являются подклассами класса А. Поэтому ссылочная переменная А1 может ссылаться на объект классов В и С. например, оператор А1:-В1 заставит А1 указывать на тот же объект, что и В1. однако ссылаться к атрибуту Y с помощью дистанционного идентификатора А1.Y нельзя. Это можно сделать с помощью оперативной квалификации следующим образом:
А1 ‘QUS’ C.Y
С помощью дистанционных идентификаторов можно обращаться к атрибутам – массивам и к атрибутам – процедурам.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.