Книга: Основы объектно-ориентированного программирования

Семантика использования псевдонимов

Семантика использования псевдонимов

Неприятным последствием применения псевдонимов (и статических, и динамических) является воздействие операций на сущности, даже не упоминаемые в операциях.

Модель вычислений без псевдонимов обладает приятным свойством: приведенный ниже фрагмент всегда справедлив

[БЕЗ СЮРПРИЗОВ]
-- Предположим, что свойство P(y) выполняется
x := y
C (x)
-- P(y) останется выполнимым.

Этот пример подразумевает, что P (y) это частное свойство y, а C (x) некая операция с участием x, но не y. В этом случае никакие действия над x не влияют на значение y.

Для сущностей развернутых типов это действительно так. Приведем типичный пример с x и y типа INTEGER:

-- Предположим, что здесь y = 0
x := y
x := -1
-- По-прежнему y "= 0.

В этом случае нет никакого способа изменить y путем присваивания значения x. Обратимся теперь к аналогичной ситуации с участием динамических псевдонимов. Пусть x и y экземпляры следующего класса C:

class C feature
boolattr: BOOLEAN
-- Булев атрибут для описания некоторого свойства объекта.
set_true is
-- Установка boolattr в true.
do
boolattr := True
end
... Другие компоненты ...
end

Теперь предположим, что тип y это C, и что y в определенный момент времени выполнения не является пустой ссылкой. Тогда следующий пример уже не обладает свойством "БЕЗ СЮРПРИЗОВ":

[СЮРПРИЗ, СЮРПРИЗ!]
-- Предполагаем, что y.boolattr равно false.
x := y
-- Значение y.boolattr по-прежнему false.
x.set_true
-- Но теперь y.boolattr равно true!


Последняя инструкция данного фрагмента никоим образом не содержит y, однако одним из ее результатов является изменение свойств y.

Оглавление книги


Генерация: 0.419. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз