Книга: Основы объектно-ориентированного программирования
Семантика использования псевдонимов
Семантика использования псевдонимов
Неприятным последствием применения псевдонимов (и статических, и динамических) является воздействие операций на сущности, даже не упоминаемые в операциях.
Модель вычислений без псевдонимов обладает приятным свойством: приведенный ниже фрагмент всегда справедлив
[БЕЗ СЮРПРИЗОВ]
-- Предположим, что свойство 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.
- 1.2. Базовый синтаксис и семантика Ruby
- Пример использования шаблона «Выводы – рекомендации»
- Наносится ли какой-нибудь вред USB-брелоку, когда его извлекают из разъема без использования функции безопасного отключе...
- 6.4. Использования Samba
- Листинг 5.1. (shm.c) Пример совместного использования памяти
- Пример использования фонового потока для выполнения отдельной задачи
- Инварианты класса и семантика ссылок
- Преимущества использования триггеров
- Вводящие в заблуждение заявления и прочие стратегии использования посланий
- 16.3. Примеры использования termios
- Часть II Основы использования Ubuntu
- 13.3.4. Упрощение использования gettext()