разуется значениями, записаными в элемент хранения. Любое свой
во в ЭВМ с ограниченной разрядной сеткой (а она всегда ог
на) может представляться конечным множеством значений. Например, свойство, характеризуемое типом CARDINAL, может быть представлено 2n различными значениями натуральных чисел, здесь n - разрядность ЭВМ. Для 16-разрядного слова этот спектр значений включает на
ральные числа от 0 до 216 - 1 = 65 535. Свойство, хаpак
мое типом CHAR (литера), может быть представлено 28 = 256 раз
ми символами (из набора ASCII и гpафических символов), поскольку элемент хранения такого свой
ва имеет размер в один байт: TSIZE (CHAR) = 1.
Любое значение, которое может представлять свойство, харак
емое тем или иным типом, называется константой этого типа. Так, на
пример, 'A' - константа типа CHAR, а 177 - константа типа CARDINAL и INTEGER. Поскольку множество констант любого типа ко
но, оно всегда может быть задано прямым перечислением. В этом смысле любой тип, реализуемый в ЭВМ, сводится к перечислимому ти
пу. Однако, поскольку вряд ли удобно каждый раз перечислять, на
мер, 216 различных значений кардинального типа, разумно за
нить такое перечисление ссылкой в описании программы на кон
ний в языках программирования используются так называемые отрезки типа - упорядоченные подмножества полного мно
ного конкретного типа.
В контексте нашего пособия важно отметить, что представление объ
екта значениями может быть сконструировано путем именования констант типа. Для реализации этой возможности используется пе
ление, например:
TYPE Нота=(До, Ре, Ми, Фа, Соль, Ля, Си); .
Здесь представление любого объекта Нота ограничивается ис
ванием семи констант. Поскольку имена таких констант наз
гирования типа.
На базе класса с ограниченным спектром значений можно скон
ровать новый класс объектов с более широким спектром. Такое кон
ирование базируется на центральном постулате теории мно
жеств, в соответствии с которым объектом множества может быть любое из его подмножеств. Так, например, используя определенный вы
ше тип "Нота", можно сконструировать класс "Аккорд", эле
ми которого будут являться различные комбинации нот. Для этого в языках про
ве базового перечислимого типа:
TYPE Аккорд = SET OF Нота; .
Класс "Аккорд" включает в себя уже не 7, а 27 объектов, пред
вление которых определяется множественными константами. Среди них:
{ До } -"чистая" нота "До";
{ До, Ми } -аккорд, составленный из двух нот;
{ До..Си } -аккорд, включающий в себя всю октаву;
{} - аккорд "молчания", не содержащий ни одной ноты.
Элемент хранения объекта "Аккорд" должен допускать размещение в нем 27 различных значений, следовательно, минимальным адре
ментом, пригодным для хранения аккордов, является байт:
TSIZE(Аккорд) =1.
Объект базового класса (Нота) в этом примере также будет раз
щаться в одном байте, несмотря на то, что использоваться для пред
ставления будут лишь 3 бита. Множественный тип, пос
ный на основе отрезка типа [0..15], образует стандартный тип
BITSET = SET OF [0..15].
Нетрудно заметить, что TSIZE(BITSET)=2 (байта). Размер эле
нения любого множественного типа в байтах определяется вы
ем
N DIV 8 +(N MOD 8) DIV (N MOD 8).
Здесь N - число констант базового типа, MOD и DIV - операции со
ветственно деления по модулю и нацело (предполагается, что 0 DIV 0 = 0).
Фактически размер элемента хранения множественного типа оп
ется тем, что в качестве представления объекта такого типа ис
зуется характеристическая функция множества. Например, пред
вление аккоpда {До,Ми,Си} в байте будет выглядеть сле
зом:
Си Ля Соль Фа Ми Pе До
7 6 5 4 3 2 1 0
Над объектами множественного типа определены функции, свя
ные с элементарными операциями над множествами (объединение, пе
чение, разность, симметрическая разность); проверкой сос
лючением базовых объектов в множество и т.п. Подробнее об этом можно про
тать в руководстве по языку программирования.
Использование характеристической функции для представления объ
тов множественного типа позволяет организовать эффективную ра
ту с такими объектами на уровне элементов хранения.
III. ИДЕНТИФИКАЦИЯ ОБЪЕКТОВ
Идентификация именованием.- Квалидент.- Дистанция доступа.- Опеpатоp пpисоединения.- Индексиpование.- Идентификация ука
ем.- Свободный и огpаниченный указатели.- Тип ADDRESS.- Квалидент с постфиксом "^".
Идентификация объекта заключается в определении (нахождении) его элемента хранения и получении доступа к представлению объ
та - значениям его свойств.
Существует два основных способа идентификации объекта: име
ние и указание. Именование заключается в назначении объекту оп
ленного имени. Такое назначение производится на фазе тран
ляции, и в процессе выполнения программы объект не может быть пе
ван. Например, декларация
VAR A,B: Объект
определяет наличие в про
грамме двух объектов с именами А и B соответственно, каждый из которых имеет индивидуальный элемент хра
ту А по имени В в надежде, что "он Вас услышит" невозможно, не
ект А новым именем ВОВА". Имя - это атрибут программы, обес
ющий во всех ситуациях доступ к одному и тому же объекту. По
цесс программирования и выполнения программы является процессом из
ции.
Именоваться могут и отдельные свойства объектов-агрегатов. В этом случае такие имена называют квалифицированными иден
ми - квалидентами, они реализуют дистанционный доступ к свой
вам объекта. Например,
TYPE Объект = RECORD
B : Дата_рождения; П : Bес
END;
VAR A,B : Oбъект; .
Квалидент A.B откроет доступ к дате рождения объекта A, B.B - к дате рождения объекта B и т.д. Длина дистанци доступа опре
ся количеством уровней агрегирования свойств объектов клас
са. В этом примере Длина=1. Если уточнить свойство Дата_Рож
ния:
TYPE Дата_рождения = RECORD
Г: Год; М: Месяц; Д: День
END;
то квалидент, открывающий доступ к году рождения объекта А, име
ет длину дистанции, равную 2: А.В.Г. Простой идентификатор мож
но рассматривать как частный случай квалидента с нулевой дис
ей доступа.
Дистанционный доступ может существенно увеличить время иден
кации атpибутов объекта, в котоpых хpанятся значения его свойств. Сократить это время можно используя оператор при
ния
WITH < Квалидент > DO < Присоединяемый фрагмент > END.
Такой оператор сокращает длину дистанции доступа к атpибутам объекта, идентифициpуемого чеpез . Если чис
ло таких атpибутов в пpисоединяемом фpагменте велико, то ис
pатоpа пpисоединения может существенно сокpатить вpемя вы
ния этого фpагмента пpогpаммы.
Вложение операторов присоединения обеспечивает дополнительное со
ращение дистанции доступа. Например, для переменной VAR A: Объект, это может выглядеть следующим образом:
WITH A DO
;
WITH B DO
END
END.
Имена объектов и их свойств могут дублировать друг друга. Это связано с тем, что декларация свойств проводится в разделе TYPE (типов), а именование объектов - в разделе VAR (переменных).
Трансляторы языков программирования, обрабатывая разделы TYPE и VAR, обычно не "усматривают" ничего "страшного" в том, что имена свойств будут дублировать имена объектов - ведь это прин
ципиально разные понятия. Но вместе с тем оператор WITH фор
шивание таких понятий (см. приведенный выше пример: первый WITH присоединяет к объекту, а второй к его свой
ву). Такое смешивание в общем случае требует повышенного вни
соединяемых фрагментов. Например,
VAR A,B: Объект; C: Год;
BEGIN . . .
WITH B DO C:=Г END; B.B.Г:=C
WITH B DO C:=Г; B.Г:=C END
END.
Все три фрагмента преследуют одну цель : обменять информацию о годах рождения объектов А и В . Первый фрагмент достигает этой це
ли, второй - нет. Почему ? В третьем фрагменте три тек
зовать полные квалиденты (и жертвовать эффективностью прог
нее.
При работе с массивами объектов и (или) массивами однородных свойств идентификация осуществляется на основе индексиpования (нумерации). Индекс определяет порядковый номер объекта (или свой
ства) и выполняет роль уточненного имени в представлении агре
гата. Имена, уточненные индексом, по-прежнему остаются име
ми (в этом смысле индекс можно формально рассматривать как "осо
вольной строке, образующей имя). Замечания, сделанные вы
сительно дублирования имен объектов и свойств, приобретают еще боль
нию с индексированием.
Доступ к объекту, идентифициpуемому именем, котоpое уточнено ин
та хpанения. Аpифметическое выpажение, pеализующее та
ление, использует индекс как натуpальное число.
Указание - второй основной способ идентификации - связано с ис
зованием особых объектов, в представлении которых хранится как бы "стрелка", указывающая на идентифицируемый объект. Такой особый объ
ля может указывать на любой объект, в том числе и на объ
затель, и на "самого себя", и "в никуда" (не указывать ни на ка
кой объект). Указатель, который может указывать на объекты раз
бодным указателем. Указатель, который может указывать только на объекты определенного класса, называется ограниченным указателем.
Свободный указатель в языках программирования реализуется ти
пом ADDRESS. Константами этого типа являются адреса рабочего про
ва памяти ЭВМ. Особой константой является константа, обоз
мая обычно словом NIL и определяющая указатель, который никуда не указывает.
Ограниченный указатель обычно определяется фразой "POINTER TO", на
мер:
TYPE Стрелка = POINTER TO Объект;.
Такая декларация определит класс указателей, которые могут ука
вать только на объекты класса Объект. В этом смысле сво
затель можно определить формально следующим образом:
TYPE ADDRESS = POINTER TO WORD.
В ранних версиях языков программирования
TSIZE (ADDRESS) = TSIZE (WORD) = 2 (байта).
Пpи этом размер рабочего пространства адресов, определяемый мощ