Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Создание и средства доступа к атрибутам объекта



Создание объекта класса А3 должно задаваться генератором вида

new А3 (Р1, Р2, Р3);

Ссылочная переменная лил процедура – функция типа

ref (<КВАЛИФИКАЦИЯ>)

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

Пусть имеются следующие описания ссылочных переменных:

ref (А1) Е1; ref (А2) Е2; ref (А3) Е3;

переменная Е1 может ссылаться на объекты классов А1, А2, А3; Е2 – на объекты классов А2, А3; Е3 – только на А3.

При описании классов все переменные, которые объявлены в данном классе, непосредственно доступны по их именам. Если декларация класса имеет префикс, то в ее операторах непосредственно доступны переменные всех надклассов.

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

Дистанционный идентификатор имеет вид:

Е.Х,

где Е – обозначение объекта, а Х – идентификатор атрибута. Если значением Е является none, то использование Е.Х приведет к ошибке.

Пусть С – квалификация объектного выражения. В этом случае с помощью конструкции Е.Х можно обращаться только к тем атрибутам объекта, которые заданы в декларации класса о или его надклассов, т.е. класс о необходимо рассматривать как заданный эквивалентной декларацией.

Рассмотрим пример. Пусть задан следующий фрагмент СИМУЛА - программы:

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,

где С – идентификатор класса. Оперативная квалификация пишется после имени ссылочной переменной.

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

А1 qua C.Y

С помощью дистанционных идентификаторов можно обращаться к атрибутам – массивам и к атрибутам – процедурам.

С помощью атрибутов – процедур удобно задавать такие операции над объектами, которые могут инициироваться как самим объектом, так и извне его, т.е. другими объектами. Таким образом, можно описывать абстрактные типы данных с системой операций над ними. Рассмотрим в качестве примера описание класса точка, задающего точки, которые располагаются на плоскости. Причем каждая из них характеризуется координатами (x,y) и обладает способностью двигаться в вертикальном и горизонтальном направлениях.

class point (x,y):

real x,y;

Begin

procedure right (s);

real s;

Begin

x:=x+s;

End;

procedure top (h)

real h;

Begin

y:=y+h;

End;

end;

Разместить на плоскости точки a и b с координатами (1,2) и (3,4) можно с помощью следующего фрагмента программы:

ref (point) a, b;

a:- new point (1,2);

b:- new point (3,4);

Сдвинуть точку a вправо на 7 единиц можно с помощью оператора a.right (7), влево на 4 единицы – с помощью оператора a.right (-4). Если нужно поднять точку a на столько единиц, каково значение суммы координат точки b, то необходимо выполнить оператор a.top(b.x+b.y).

Далее приведена декларация класса вектор, построенная на основе декларации класса точка, которая определяет двумерные вектора с началом в точке (0,0) и операцию сложения векторов.

point class vector;

Begin

ref (vector) procedure plus (p);

ref (vector) p;

plus:- new vector (x+ p.x,y+ p.y);

End;

Иногда необходимо для всех атрибутов использовать дистанционные идентификаторы. Это удобно делать с помощью присоединяющего оператора. Наиболее употребительная форма присоединяющего оператора имеет вид:

inspect e do s;

где e – объектное выражение, а s – оператор, в котором можно обращаться к атрибутам объекта e непосредственно по их именам. Объект е принято называть присоединенным объектом, а s – присоединяющим блоком.

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

inspect e when a1 do s1

when a2 do s2

……………………..

when ak do sk

где a1, a2, …, ak – идентификаторы классов, а s1, s2, …, sk - операторы, причем в si (i=1,2,…,k) возможно непосредственное использование атрибутов объекта ei, заданных в декларации класса ai.





Дата публикования: 2015-01-23; Прочитано: 203 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.009 с)...