Использование правильного варианта

Использование правильного варианта

Операции, определенные для всех вариантов многоугольников, могут реализовываться по-разному. Например, perimeter (периметр) имеет разные версии для общих многоугольников и для прямоугольников, назовем эти версии perimeterPOL и perimeterRECT. У класса SQUARE также будет свой вариант (умноженная на 4 длина стороны). При этом естественно возникает важный вопрос: что случится, если программа, имеющая разные версии, будет применена к полиморфной сущности?

Во фрагменте

create p.make (...); x := p.perimeter

ясно, что будет использована версия perimeterPOL. Точно так же во фрагменте

create r.make (...); x := r.perimeter

будет использована версия perimeterRECT. Но что, если полиморфная сущность p статически объявлена как многоугольник, а динамически ссылается на прямоугольник? Предположим, что нужно выполнить фрагмент:

create r.make (...)

p := r

x := p.perimeter

Правило динамического связывания утверждает, что версию применяемой операции определяет динамическая форма объекта. В данном случае это будет perimeterRECT.

Конечно, более интересный случай возникает, когда из текста программы нельзя заключить, какой динамический тип будет иметь p во время выполнения. Например, что будет во фрагменте

-- Вычислить периметр фигуры выбранной пользователем

p: POLYGON

...

if chosen_icon = rectangle_icon then

create {RECTANGLE} p.make (...)

elseif chosen_icon = triangle_icon then

create {TRIANGLE} p.make (...)

elseif

...

end

...

x := p.perimeter

или после условного полиморфного присваивания if ... then p := r elseif ... then p := t ..., ; или если p является элементом полиморфного массива многоугольников, или если p является формальным аргументом с объявленным типом POLYGON некоторой процедуры, которой вызвавшая ее процедура передала фактический аргумент согласованного типа?

Тогда в зависимости от хода вычисления динамическим типом p будет RECTANGLE, или TRIANGLE, или т.п. У нас нет никакого способа узнать, какой из этих случаев будет иметь место. Но, благодаря динамическому связыванию, этого и не нужно знать: что бы ни случилось с p, при вызове будет выполнен правильный вариант компонента perimeter.

Эта способность операций автоматически приспосабливаться к тем объектам, к которым они применяются, является одной из главных особенностей ОО-систем, непосредственно относящейся к обсуждаемым в начале книги вопросам качества ПО. Ее последствия будут подробней рассмотрены далее в этой лекции.

Динамическое связывание позволяет завершить начатое выше обсуждение аспектов, связанных с потерей информации при полиморфизме. Сейчас стало понятно, почему не страшно потерять информацию об объекте: после присваивания p := q или вызова some_routine (q), в котором p являлся формальным аргументом, теряется специфическая информация о типе q, но если применяется операция p.polygon_feature, для которой polygon_feature имеет специальную версию, применимую к q, то будет выполняться именно эта версия.

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

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

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

18.8.1 Четыре варианта организации сетевых служб в системе VMware

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

18.8.1 Четыре варианта организации сетевых служб в системе VMware Каждая виртуальная машина, которую вы создаете, может иметь свою независимую конфигурацию сетевых служб. Существует 4 возможных варианта конфигурации: • Без подключения к сети (No networking). • Host-only networking. • Bridged


8.17.4 Проблема выбора варианта

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

8.17.4 Проблема выбора варианта Рис. 8.24 показывает различия между Multi-exit Discriminator и Local Preference. Системы в АС 117 хотят достичь сети N автономной системы (АС) 433. АС 654 имеет два маршрута к точке назначения, и она объявила, что лучший из них — через маршрутизатор E. Однако АС 117 имеет


Эффективный показ товара зависит от правильного оформления страницы

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

Эффективный показ товара зависит от правильного оформления страницы Если посетитель не увидит ваше рекламное сообщение, значит вы напрасно трудились. Поэтому оформите свой значимый и убедительный текст таким образом, чтобы люди смогли его заметить и захотели


Принципы составления правильного УТП

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

Принципы составления правильного УТП Мы выделяем четыре основных правила, которым должна удовлетворять реклама, соответствующая принципу УТП.Во-первых, каждая рекламная кампания должна говорить о специфической выгоде для клиента от приобретения конкретного товара, а


2.1.3. Оператор варианта (переключатель)

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

2.1.3. Оператор варианта (переключатель) ПереключательПример 1.3.1Выбрать N из 1: писать (‘N равно единице’); 2: писать (‘N равно двум’); 3, 4: писать (‘N равно трём или четырём’) Конец;CASE N OF 1: WRITE (‘N равно единице’); 2: WRITE (‘N равно двум’); 3, 4: WRITE (‘N равно трём или четырём’) END;CASE –


2.1.3. Оператор варианта (переключатель)

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

2.1.3. Оператор варианта (переключатель) Переключатель в C существенно отличается от подобного в Pascal. Например, в нём нельзя в одном варианте выбора предлагать через запятую несколько констант. Зато у переключателя в C есть вариант по умолчанию. Поэтому, я привожу для


Выбор правильного объекта

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

Выбор правильного объекта Перед написанием кода обязательно нужно решить, какой объект должен отвечать на событие. В Excel способны распознавать события четыре объекта: диаграммы, отдельные рабочие листы, рабочие книги и приложение Excel в целом. Если требуется написание


1.23. Указание варианта библиотеки времени выполнения

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

1.23. Указание варианта библиотеки времени выполнения ПроблемаВаш инструментарий поставляется с несколькими вариантами базовых библиотек времени выполнения, и вы хотите указать компилятору и компоновщику тот вариант, который должен использоваться.РешениеБиблиотеки


Использование

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

Использование По сути дела, Xalan Java и Xalan C++ — это библиотеки, позволяющие использовать XSLT-преобразования в собственных проектах. Xalan Java поддерживает набор интерфейсов TrAX (от англ. transformation API for XML — программный интерфейс преобразований для XML), определяющий стандартные


29.4.3. Использование SSI

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

29.4.3. Использование SSI Использование сценариев cgi, открывающих Web–страницы с целью отображения небольшого количества сведений, не всегда является оправданным. Например, была отображена дата, но также был создан сценарий cgi, который тоже отображает дату. Не лучше ли было бы


ПИСЬМОНОСЕЦ: О пользе правильного питания

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

ПИСЬМОНОСЕЦ: О пользе правильного питания Приз в виде книги Сергея Голубицкого «Великие аферы XX века» достаются Azat’у в качестве компенсации за мучения.С утра все было как-то не так, но компьютер еще работал… А началось с того, что от нехватки питания умер винчестер. После


Как найти «правильного» софаундера? Александр Наследников, основатель проекта gbooking.ru

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

Как найти «правильного» софаундера? Александр Наследников, основатель проекта gbooking.ru Опубликовано 19 марта 2013 Проблема приглашения в команду «правильного» софаундера на стадии запуска стартапа была всегда и существует во всех странах, где


2.1. ВЫБОР ОПТИМАЛЬНОГО ВАРИАНТА ПРОЕКТНОГО РЕШЕНИЯ

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

2.1. ВЫБОР ОПТИМАЛЬНОГО ВАРИАНТА ПРОЕКТНОГО РЕШЕНИЯ На разных этапах проектирования (особенно часто на начальных этапах) перед разработчиком встает задача выбора наилучшего варианта из множества допустимых проектных решений, которые удовлетворяют предъявленным


2.2. ПРИМЕР ВЫБОРА ОПТИМАЛЬНОГО ВАРИАНТА ПРОГРАММНОГО РЕШЕНИЯ

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

2.2. ПРИМЕР ВЫБОРА ОПТИМАЛЬНОГО ВАРИАНТА ПРОГРАММНОГО РЕШЕНИЯ Чтобы произвести выбор оптимального варианта, надо иметь несколько вариантов реализации изделия. А для того чтобы их сравнивать, надо сформулировать ряд характеристик или ненормированных критериев. После


Три варианта скоростного Wi-Fi: надежды и опасения Андрей Васильков

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

Три варианта скоростного Wi-Fi: надежды и опасения Андрей Васильков Опубликовано 28 февраля 2013Реализация Wi-Fi 802.11n в современных телефонах и планшетах оставляет желать много лучшего. Новые стандарты 802.11ac и 802.11ad обещают в перспективе гигабитные скорости и обсуждаются не