описан следующим образом:
class WINDOW
creation
make
feature
make (...) is
-- Создать окно; аргументы задают размер и положение.
do ... end
text: STRING
-- Отображаемый в окне текст
put_text (s: STRING) is
-- Сделать s отобржаемым в окне текстом.
do
text := s
end
... Прочие компоненты ...
end -- класс WINDOW
Ясно, что объект
Message_window: WINDOW is
-- Окно для вывода сообщений об ошибках
once
create Result.make ('... Аргументы размера и положения ...')
end
В данном случае окно сообщений должно находиться в совместном пользовании всех сторон, но не являться константным объектом. Каждый вызов
Создав разделяемый объект, играющий роль константы, (например, |
Однократные функции с результатами базовых типов
Еще одним применением однократных функций является моделирование глобальных значений - 'системных параметров', которые обычно нужны сразу нескольким классам, но не меняются в ходе программной сессии. Их начальная установка требует информации от пользователя или операционной среды. Например:
[x]. компонентам низкоуровневой системы может понадобиться объем доступной им памяти, выделенный средой при инициализации;
[x]. система эмуляции терминала может начать работу с отправки среде запроса о числе терминальных портов. Затем эти данные будут использоваться в ряде модулей приложения.
Такие глобальные данные аналогичны совместно используемым объектам, хотя обычно они являются значениями базовых типов. Схема их реализации однократными функциями такова:
Const_value: T is
-- Однократно вычисляемый системный параметр
local
envir_param: T ' -- Любой тип (T и не только)
once
'Получить envir_param из операционной среды'
Result := 'Значение, рассчитанное на основе envir_param'
end
Такие однократные функции описывают динамически вычисляемые константы.
Предположим, данное объявление находится в классе
Как уже говорилось, ни один модуль не имеет больше прав на разделяемые данные, чем остальные. Это особенно справедливо для только что рассмотренных случаев. Если расчет значения способен инициировать любой модуль, нет смысла и говорить о том, будто один из них выступает в роли владельца. Такое положение дел и отражает модульная структура системы.
Однократные процедуры
Функция
Из руководства к коммерческой библиотеке функций языка C
Механизм однократных функций интересен и при работе с процедурами. Однократные процедуры могут применяться для инициализации общесистемного свойства, когда заранее неизвестно, какому