1.2.3. ОБЪЕКТЫ И ЗНАЧЕНИЯ

В самом широком смысле под объектами обычно понимают некоторые сущности, которые существуют во времени, развиваются, но при этом остаются сами собой.

Хорошим примером объекта может служить человек, который рождается, растет, развивается и умирает, все же оставаясь, в каком-то смысле, тем же самым человеком.

Другой знаменитый пример принадлежит Гераклиту (расцвет творческих сил которого приходится приблизительно на 504-501 гг. до н.э.). Гераклит учил, что нельзя дважды войти в одну и ту же реку, ибо "на входящих в ту же самую реку набегают все новые и новые воды" [Гер 500]. Таким образом, река тоже может служить хорошим примером объекта.

Под значениями в широком смысле обычно понимают некоторые сущности, которые не меняются, не развиваются и, в этом смысле, находятся вне времени. Неизвестно, существуют ли значения в реальной жизни, но они являются излюбленным предметом изучения в математике. Примером значения, например, может служить число 25.

Конечно, значение можно считать частным, вырожденным случаем объекта (а именно, застывшим объектом, не способным к развитию), но мы все же обычно будем называть "объектами" только такие объекты, которые не являются значениями.

Иметь дело с объектами труднее, чем со значениями, ибо они могут изменяться. Поэтому объекты очень часто снабжают именами. Основным свойством имени является то, что оно однозначно связано с объектом (однозначно идентифицирует этот объект). В отличие от самих объектов, имена являются типичными значениями, поскольку они не меняются из-за того, что изменяется сам объект. Например, несмотря на то, что состояние реки Волга непрерывно изменяется, это никак не сказывается на слове "Волга".

Другим примером (полного) имени могут служить паспортные данные человека: фамилия, имя, отчество, дата и место рождения и т.д.

В рамках языка Рефал термины "объект" и "значение" имеют более специальный смысл. Любое значение в языке Рефал представляет собой некоторое объектное выражение.

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

Объекты создаются во время компиляции или в процессе работы Рефал-программы. При создании объекта одновременно с ним создается символ-ссылка, который мы будем называть именем объекта или ссылкой на этот объект. Основное свойство имени объекта заключается в том, что оно должно отличаться от всех других символов-ссылок, существующих в момент создания объекта. Благодаря этому, между символами-ссылками и объектами существует однозначное соответствие: каждому символу-ссылке соответствует ровно один объект, а равным символам-ссылкам соответствует один и тот же объект.

Наглядно взаимосвязь между именем объекта, объектом и содержимым объекта можно изобразить следующим образом:

R --> [ ... ]

Рефал Плюс имеет дело с объектами следующих типов.

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

Объекты-ящики предназначены для хранения объектных выражений. Каждый ящик содержит ровно одно объектное выражение.

Объекты-таблицы предназначены для хранения конечных множеств упорядоченных пар. Каждая пара содержит два объектных выражения, первое из которых является ключом, а второе - значением, связанным с этим ключом. Все ключи в таблице должны быть попарно различны. Таким образом, каждому ключу в таблице однозначно соответствует связанное с ним значение.

Объекты-каналы дают возможность выполнять операции ввода-вывода.

Объекты-векторы предназначены для хранения конечных последовательностей объектных выражений.

Объекты-строки предназначены для хранения конечных последовательностей литер.