Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава 6. Симула - универсальный процессо-ориент...doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
386.56 Кб
Скачать

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

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

  2. ‘NEW’ А3 (Р1, Р2, Р3);

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

  4. ‘REF’ (<КВАЛИФИКАЦИЯ>)

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

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

  7. ‘REF’ (А1) Е1; ‘REF’ (А2) Е2; ‘REF’ (А3) Е3;

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

  9. 2.3. Средства доступа е атрибутам объектов

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

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

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

  13. Е.Х,

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

  15. В примере 2.3 ссылочная переменная А1 указывает на объект типа автомобиль с параметрами Т=”КАМАЗ“, GR=5.3, LP=2000, LT=100. В этом случае к атрибутам данного объекта А1 можно обращаться следующим образом.

  16. ПРИМЕР 2.5

  17. А1.LP:=А1.LP+1000:

  18. А1.LT:=А1.LT+1000:

  19. В данном примере значение переменной общего пробега и пробега после ремонта увеличивается на 1000.

  20. Автомобиль в этом случае называется квалификацией объектного выражения А1, если объектное выражение имеет вид переменной (простой или с индексами) или указателя функции, то его квалификацией считается квалификация, указанная в описании этой переменной (массива, процедуры-функции). Квалификация генератора объектов или локального объекта – идентификатор класса, записанный после ‘NEW’ или ‘THIS’.

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

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

  23. ПРИМЕР 2.6

  24. ‘REF’ (А) А1; ‘REF’ (З) В1; ‘REF’ (С) С1;

  25. ‘CLASS’ А(Х); ‘REAL’ Х; ‘BEGIN’ … ‘END’;

  26. А ‘CLASS’ B(Y); ‘REAL’ (A) Y; ‘BEGIN’ … ‘END’;

  27. В ‘CLASS’ C; ‘BEGIN’ … ‘END’;

  28. А1:- ‘NEW’ А(6); В1:- ‘NEW’ (12, А1);

  29. С1:- ‘NEW’ С(7, А1);

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

  31. Например, значение А1.Х равно 6, а В1.Х – 12, С1.Х – 7. значение В1.Y равно ссылочной переменной А1, а значение В1.Y.Х – 6, значение С1.Y.Х – 10, после выполнения оператора В1.Х:=С1.Х+В1.Y.Х; Атрибут Х объекта В1 будет иметь значение 13.

  32. Дистанционные идентификаторы, использующие локальный объект, позволяют в теле декларации подкласса обращаться к тем атрибутам, которые непосредственно недоступны из-за конфликтов наименования. Например, если в теле декларации класса С необходимо увеличить атрибут Х на атрибут Х класса А, то необходимо выполнить оператор

  33. Х:=Х+’THIS’ А.Х;

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

  35. ‘QUA’ C,

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

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

  38. А1 ‘QUS’ C.Y

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

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

  41. ПРИМЕР 2.7

  42. ‘CLASS’ ТОЧКА (X,Y): ‘REAL’ X,Y;

  43. ‘BEGIN’

  44. ‘PROCEDURE’ ВПРАВО (S); ‘REAL’ S; X:=X+S;

  45. ‘PROCEDURE’ ВВЕРХ (H) ‘REAL’ H; Y:=Y+H;

  46. ‘END’;

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

  48. ‘REF’ (ТОЧКА) А, В;

  49. А:-‘NEW’ точка (1,2);

  50. В:-‘NEW’ точка (3,4);

  51. Сдвинуть точку А вправо на 7 единиц можно с помощью оператора А.ВПРАВО (7). А влево на 4 единицы – с помощью оператора А.ВПРАВО (-4). Если нужно поднять точку А на столько единиц, каково значение суммы координат точки В, то необходимо выполнить оператор А.ВВЕРХ (В,Х+В,У).

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

  53. ПРИМЕР 2.8

  54. ТОЧКА ‘CLASS’ ВЕКТОР;

  55. ‘BEGIN’

  56. ‘REF’ (ВЕКТОР) ‘PROCEDURE’ ПЛЮС (Р); ‘REF’ (ВЕКТОР) Р;

  57. ПЛЮС:-‘NEW’ ВЕКТОР ( X+P, X ,Y+P, Y);

  58. ‘END’;

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

  60. ‘INSPECT’ E ‘DO’ S;

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

  62. С использованием данного оператора Пример 2.5 будет иметь вид:

  63. ‘INSPECT’ A1 ‘DO’

  64. ‘BEGIN’ LP:= LP+1000; LT:= LT+1000;

  65. ‘END’;

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

  67. ‘INSPECT’ E ‘WHEN’ A1 ‘DO’ S1

  68. ‘WHEN’ A2 ‘DO’ S2

  69. ……………………..

  70. ‘WHEN’ A2 ‘DO’ S2

  71. где А1, А2, …, АК – идентификаторы классов, а S1, S2, …, SК - операторы, причем в Si (i=1,2,…,K) возможно непосредственное использование атрибутов объекта Е, заданных в декларации класса Аi, если У принадлежит классу (или одному из его подклассов), то исполняется оператор Si. После чего управление передается на оператор, следующий за всем присоединяющим оператором.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]