Рис. 8.23. Разделение как результат присоединения
В результате
Присоединение
| Статические псевдонимы закрепляют два имени за одним и тем же программным элементом в исходном тексте, и они всегда обозначают одно и то же значение вне зависимости от событий, происходящих во время выполнения. Этот прием включен в некоторые языки программирования. В Fortran директива |
Наличие динамических псевдонимов оказывает более серьезное влияние на операции присваивания с участием сущностей ссылочного типа, нежели с участием сущностей развернутого типа. В случае
Семантика использования псевдонимов
Неприятным последствием применения псевдонимов (и статических, и динамических) является воздействие операций на сущности, даже не упоминаемые в операциях.
Модель вычислений без псевдонимов обладает приятным свойством: приведенный ниже фрагмент всегда справедлив
[БЕЗ СЮРПРИЗОВ]
-- Предположим, что свойство P(y) выполняется
x := y
C (x)
-- P(y) останется выполнимым.
Этот пример подразумевает, что
Для сущностей развернутых типов это действительно так. Приведем типичный пример с
-- Предположим, что здесь y = 0
x := y
x := -1
-- По-прежнему y '= 0.
В этом случае нет никакого способа изменить
class C feature
boolattr: BOOLEAN
-- Булев атрибут для описания некоторого свойства объекта.
set_true is
-- Установка boolattr в true.
do
boolattr := True
end
... Другие компоненты ...
end
Теперь предположим, что тип
[СЮРПРИЗ, СЮРПРИЗ!]
-- Предполагаем, что y.boolattr равно false.
x := y
-- Значение y.boolattr по-прежнему false.
x.set_true
-- Но теперь y.boolattr равно true!
Последняя инструкция данного фрагмента никоим образом не содержит
Выработка соглашений для динамических псевдонимов
Отмеченные тревожные последствия операций присваивания с участием ссылок порождают законный вопрос о целесообразности сохранения динамических псевдонимов в нашей модели вычислений.
Ответ - частично теоретический и частично практический:
[x]. Операции присваивания необходимы для использования всех преимуществ мощи ОО-метода, в частности для описания сложных структур данных. Необходимо постоянно помнить, что
