Только у сущности имеются и статический, и динамический типы. Ее статический тип - это тип, с которым она была объявлена: если объявление имеет вид
В развернутом случае нет ссылки, значением |
Обоснованы ли ограничения?
Приведенные выше правила типизации могут иногда показаться слишком строгими. Например, второй оператор в обоих случаях статически отвергается:
1
p:= r; r := p
2
p := r; x := p.diagonal
В (1) запрещается присваивать многоугольник сущности-прямоугольнику, хотя во время выполнения так получилось, что этот многоугольник является прямоугольником (аналогично тому, как можно отказаться принять собаку из-за того, что на клетке написано "животное"). В (2) компонент
Но более аккуратный анализ показывает, что наши правила вполне обоснованы. Если ссылка присоединяется к объекту, то лучше избежать будущих проблем, убедившись в том, что их типы согласованы. А если хочется применить некоторую операцию прямоугольника, то почему бы сразу не объявить цель прямоугольником?
На практике, случаи вида (1) и (2) маловероятны. Присваивания типа
create r.make (...); ...
screen.display_icons -- Вывод значков для разных многоугольников
screen.wait_for_mouse_click -- Ожидание щелчка кнопкой мыши
x := screen.mouse_position -- Определение места нажатия кнопки
chosen_icon := screen.icon_where_is (x) -- Определение значка,
-- на котором находится указатель мыши
if chosen_icon = rectangle_icon then
p := r
elseif ...
p := "Многоугольник другого типа" ...
end
... Использование p, например, p.display, p.rotate, ...
В последней строке
В другом типичном случае
some_routine (p: POLYGON) is ...
и можно выполнять вызов
Таким образом, в случае, когда невозможно предсказать точный тип присоединяемого объекта, полиморфные сущности (такие как
Может ли быть польза от неведения?
Поскольку введенные только что понятия играют важную роль в последующем, стоит еще раз повторить несколько последних положений. (На самом деле, в этом коротком пункте не будет ничего нового, но он поможет лучше понять основные концепции и подготовит к введению новых понятий).
Если вы все еще испытываете неудобство от невозможности написать
Рис. 14.7. После полиморфного присваивания
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии