Правильное использование попытки присваивания

Правильное использование попытки присваивания

Необходимость попытки присваивания обусловлена, как правило, тем, что на статически объявленный тип сущности положиться нельзя, а опознать тип фактически адресуемого объекта необходимо "на лету". Например, при работе с полиморфными структурами данных и получении объектов из третьих рук.

Заметьте, как тщательно был спроектирован механизм, дающий разработчикам шанс забыть об устаревшем стиле разбора вариантов (case-by-case). Если вы действительно хотите перехитрить динамическое связывание и отдельно проверять каждый вариант типа, вы можете это сделать, хотя вам и придется немало потрудиться. Так, вместо обычного f.display, использующего ОО-механизмы полиморфизма и динамического связывания, можно, - но не рекомендуется, - писать:

display (f: FIGURE) is

-- Отобразить f, используя алгоритм,

-- адаптируемый к истинной природе объекта.

local

r: RECTANGLE; t: TRIANGLE; p: POLYGON; s: SQUARE

sg: SEGMENT; e: ELLIPSE; c: CIRCLE;?

do

r ?= f; if r /= Void then "Использовать алгоритм вывода прямоугольника" end

t ?= f; if t /= Void then "Использовать алгоритм вывода треугольника" end

c ?= f; if c /= Void then "Использовать алгоритм вывода окружности" end

... и т.д. ...

end

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

Из-за трудностей написания таких закрученных конструкций попытки присваивания новичкам вряд ли придет в голову использовать их вместо привычной ОО-схемы. Однако и опытные специалисты должны помнить о возможности неправильного использования конструкции.

Немного похожий на попытку присваивания механизм "сужения" (narrowing) есть в языке Java. В случае несоответствия типов он выдает исключение. Это похоже на самоубийство, неуспех присваивания вовсе не является чем-то ненормальным, это ожидаемый результат. Оператор instanceof в языке Java выполняет проверку типов на совместимость.

Из-за отсутствия в языке универсальности Java активно использует оба механизма. Отчасти это связано с тем, что в отсутствие множественного наследования Java не содержит класса NONE, а потому не может выделить эквиваленту Void надежное место в собственной системе типов.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Присваивания

Из книги Давайте создадим компилятор! автора Креншоу Джек


7.6.2.2. Правильное расписание для домашнего компьютера

Из книги Fedora 8 Руководство пользователя автора Колисниченко Денис Николаевич

7.6.2.2. Правильное расписание для домашнего компьютера Взгляните на формат файла crontab, а затем на имеющееся расписание. Программа crond довольно "древняя". Первоначально она появилась в UNIX, а UNIX преимущественно устанавливалась на серверах, которые работают круглосуточно и


10 Конфигурация: правильное начало

Из книги Искусство программирования для Unix автора Реймонд Эрик Стивен

10 Конфигурация: правильное начало Стоит внимательно посмотреть на наши истоки, и результаты организуются сами собой. —Александр Кларк (Alexander Clark) В операционной системе Unix программы могут обмениваться данными со своим окружением различными способами. Эти способы удобно


10 Конфигурация: правильное начало

Из книги VBA для чайников автора Каммингс Стив

10 Конфигурация: правильное начало Стоит внимательно посмотреть на наши истоки, и результаты организуются сами собой. —Александр Кларк (Alexander Clark) В операционной системе Unix программы могут обмениваться данными со своим окружением различными способами. Эти способы удобно


Инструменты, выявляющие попытки вторжения

Из книги Первые шаги с Windows 7. Руководство для начинающих автора Колисниченко Денис Н.

Инструменты, выявляющие попытки вторжения Если взломщик проникает в систему, он изменяет ее конфигурацию в соответствии со своими потребностями. В зависимости от характера вторжения изменяется внешний вид Web-страниц, в файлах протоколов появляются новые записи,


Использование переменных в операторах присваивания

Из книги Инфобизнес на полную мощность [Удвоение продаж] автора Парабеллум Андрей Алексеевич

Использование переменных в операторах присваивания Можно присваивать переменным не только буквальные значения - точно так же можно присваивать и значения, определяемые другими переменными. В операторе curSalePrice = curCost * sngMargin переменной curSalePrice присваивается значение,


Использование функций в операторах присваивания

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

Использование функций в операторах присваивания Поскольку функции и создаваемые вами процедуры типа Function возвращают значения, их тоже можно использовать в операторах присваивания. Например:ctrFavorite = InputBox(Кто сегодня фаворит?)В данном случае используется функция VBA Input Box,


7.2. Правильное завершение работы в Интернете

Из книги Цифровая фотография. Трюки и эффекты автора Гурский Юрий Анатольевич

7.2. Правильное завершение работы в Интернете Для правильного завершения работы в Интернете (все равно, какой тип подключения вы используете — модемное, ADSL или GPRS) нужно щелкнуть правой кнопкой мыши по индикатору соединения и выбрать команду Отключиться от. После этого


Правильное решение

Из книги Идеальный программист. Как стать профессионалом разработки ПО автора Мартин Роберт С.


5.6. Правильное использование вспышки

Из книги автора

5.6. Правильное использование вспышки Все цифровые камеры имеют встроенную вспышку. Снимая при солнечном свете, фотографы порой отключают это устройство, и совершенно напрасно! Вспышка – замечательный инструмент, если его правильно использовать. Неправильное


Обратная сторона «попытки»

Из книги автора

Обратная сторона «попытки» Представьте, что Питеру поручено внести изменения в систему оценок. По его собственной оценке, работа займет пять-шесть дней. Он также полагает, что подготовка документации по изменениям займет несколько часов. В понедельник утром Мардж, его