Правильное использование попытки присваивания
Правильное использование попытки присваивания
Необходимость попытки присваивания обусловлена, как правило, тем, что на статически объявленный тип сущности положиться нельзя, а опознать тип фактически адресуемого объекта необходимо "на лету". Например, при работе с полиморфными структурами данных и получении объектов из третьих рук.
Заметьте, как тщательно был спроектирован механизм, дающий разработчикам шанс забыть об устаревшем стиле разбора вариантов (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 надежное место в собственной системе типов.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Обратная сторона «попытки»
Обратная сторона «попытки» Представьте, что Питеру поручено внести изменения в систему оценок. По его собственной оценке, работа займет пять-шесть дней. Он также полагает, что подготовка документации по изменениям займет несколько часов. В понедельник утром Мардж, его
Инструменты, выявляющие попытки вторжения
Инструменты, выявляющие попытки вторжения Если взломщик проникает в систему, он изменяет ее конфигурацию в соответствии со своими потребностями. В зависимости от характера вторжения изменяется внешний вид Web-страниц, в файлах протоколов появляются новые записи,
7.6.2.2. Правильное расписание для домашнего компьютера
7.6.2.2. Правильное расписание для домашнего компьютера Взгляните на формат файла crontab, а затем на имеющееся расписание. Программа crond довольно "древняя". Первоначально она появилась в UNIX, а UNIX преимущественно устанавливалась на серверах, которые работают круглосуточно и
Использование переменных в операторах присваивания
Использование переменных в операторах присваивания Можно присваивать переменным не только буквальные значения - точно так же можно присваивать и значения, определяемые другими переменными. В операторе curSalePrice = curCost * sngMargin переменной curSalePrice присваивается значение,
Использование функций в операторах присваивания
Использование функций в операторах присваивания Поскольку функции и создаваемые вами процедуры типа Function возвращают значения, их тоже можно использовать в операторах присваивания. Например:ctrFavorite = InputBox(Кто сегодня фаворит?)В данном случае используется функция VBA Input Box,
10 Конфигурация: правильное начало
10 Конфигурация: правильное начало Стоит внимательно посмотреть на наши истоки, и результаты организуются сами собой. —Александр Кларк (Alexander Clark) В операционной системе Unix программы могут обмениваться данными со своим окружением различными способами. Эти способы удобно
10 Конфигурация: правильное начало
10 Конфигурация: правильное начало Стоит внимательно посмотреть на наши истоки, и результаты организуются сами собой. —Александр Кларк (Alexander Clark) В операционной системе Unix программы могут обмениваться данными со своим окружением различными способами. Эти способы удобно
5.6. Правильное использование вспышки
5.6. Правильное использование вспышки Все цифровые камеры имеют встроенную вспышку. Снимая при солнечном свете, фотографы порой отключают это устройство, и совершенно напрасно! Вспышка – замечательный инструмент, если его правильно использовать. Неправильное
7.2. Правильное завершение работы в Интернете
7.2. Правильное завершение работы в Интернете Для правильного завершения работы в Интернете (все равно, какой тип подключения вы используете — модемное, ADSL или GPRS) нужно щелкнуть правой кнопкой мыши по индикатору соединения и выбрать команду Отключиться от. После этого
Правильное отображение на чёрном фоне
Правильное отображение на чёрном фоне
Правильное отображение на фоне сетки
Правильное отображение на фоне сетки
Правильное отображение на насыщенном цветном фоне
Правильное отображение на насыщенном цветном фоне