Движения произвольных фигур

Движения произвольных фигур

Чтобы понять необходимость в отложенных процедурах и классах, снова рассмотрим иерархию фигур FIGURE.

Рис. 14.8.  Снова иерархия FIGURE

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

transform (f: FIGURE) is

-- Применить специфическое преобразование к f.

do

f.rotate (...)

f.translate (...)

end

с соответствующими значениями опущенных аргументов. Тогда все следующие вызовы корректны:

transform (r) -- для r: RECTANGLE

transform (c) -- для c: CIRCLE

transform (figarray.item (i)) -- для массива фигур: ARRAY [POLYGON]

Иными словами, требуется применить преобразования rotate и translate к фигуре f и предоставить механизму динамического связывания выбор подходящей версии (различной для классов RECTANGLE и CIRCLE), зависящей от текущего вида фигуры f, который выяснится во время выполнения.

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

Но переопределять-то нечего! Класс FIGURE - это очень общее понятие, покрывающее все виды двумерных фигур. Ясно, что невозможно написать версию процедур rotate и translate, подходящую для всех фигур "вообще", не уточнив информацию об их виде.

Таким образом, мы имеем ситуацию, в которой процедура transform будет выполняться корректно, благодаря динамическому связыванию, но статически она незаконна, поскольку rotate и translate не являются компонентами класса FIGURE. Проверка типов выявит в вызовах f.rotate и f.translate ошибки.

Можно, конечно, ввести на уровне класса FIGURE процедуру rotate, которая ничего не будет делать. Но это опасный путь, компоненты rotate (center, angle) имеют интуитивно хорошо понятную семантику и "ничего не делать" не является их разумной реализацией.

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

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

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

Суд по делам дорожного движения

Из книги Искусство обмана автора Митник Кевин

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


Сбор произвольных данных через ds_raw

Из книги Документация NetAMS автора Автор неизвестен

Сбор произвольных данных через ds_raw Начиная с версии NeTAMS 3.4.0 (build 3018) появилась возможность учета произвольных данных с использованием сервисаservice data–source 3type rawКоманда:rawdata unit name XXX policy YYY in AAA out BBB {as–is|incremental} [time]Где XXX и YYY — имена юнита и политикиAAA и BBB — значения в байтах,


Рисование линий и фигур

Из книги Компьютер на 100. Начинаем с Windows Vista автора Зозуля Юрий

Рисование линий и фигур Для создания рисунков в программе Word используются автофигуры, которые можно вставить в нужное место документа, а затем отформатировать по своему усмотрению. Чтобы вставить автофигуру в текст, действуйте следующим образом.1. На вкладке Вставка


Построение произвольных поверхностей

Из книги ArchiCAD 11 автора Днепров Александр Г

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


Создание фигур

Из книги Word 2007.Популярный самоучитель автора Краинский И

Создание фигур Чтобы создать такой рисунок, сделайте следующее.1. Перейдите на вкладку Вставка ленты, в группе Иллюстрации нажмите кнопку Фигуры. Откроется список доступных фигур (рис. 6.12). Рис. 6.12. Список кнопки Фигуры2. Щелкните в документе и, не отпуская кнопку мыши,


Оформление фигур

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран

Оформление фигур Для оформления объектов векторной графики можно использовать стили. Их список находится в группе Стили фигур на вкладке Средства рисования ? Формат ленты (рис. 6.13). Рис. 6.13. Выбор стиля для фигурыВ Word 2007 содержится около 80 стилей для фигур. Если вы не


У15.4 Итераторы фигур

Из книги HTML 5, CSS 3 и Web 2.0. Разработка современных Web-сайтов. автора Дронов Владимир

У15.4 Итераторы фигур При обсуждении COMPOSITE_FIGURE мы говорили о применении итераторов для выполнения операций над составными фигурами. Разработайте соответтсвующие классы итераторов. (Подсказка: в [M 1994a] приведены классы библиотеки итераторов, которые послужат основой вашей


Рисование сложных фигур

Из книги HTML 5, CSS 3 и Web 2.0. Разработка современных Web-сайтов автора Дронов Владимир

Рисование сложных фигур Канва также поддерживает рисование более сложных, чем прямоугольники, фигур с контурами из множества прямых и кривых линий. Сейчас мы выясним, как это делается, и рассмотрим соответствующие методы объекта CanvasRenderingContext2D. Как рисуются сложные


Рисование простейших фигур

Из книги XSLT автора Хольцнер Стивен

Рисование простейших фигур Начнем мы с самых простых операций — рисования различных прямоугольников, с заливкой и без нее.Для рисования прямоугольника без заливки (т. е. одного лишь контура прямоугольника) предназначен метод strokeRect объекта CanvasRenderingContext2D:<контекст


Нумерация на произвольных уровнях

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

Нумерация на произвольных уровнях Иногда может потребоваться просто подсчитать узлы определенного типа независимо от их уровня в документе. Например, в различных местах иерархии документа не исключено наличие нескольких элементов <NAME>, и вам может быть нужно просто


23.1. Универсализация произвольных строк

Из книги Macromedia Flash Professional 8. Графика и анимация автора Дронов В. А.

23.1. Универсализация произвольных строк В главе 14 мы говорили о том, как с помощью функции glob() производится универсализация имен файлов, однако пользователи, знакомые с возможностями универсализации, нередко пытаются применить их и к другим разновидностям строк. Функция


Создание простейшего движения

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

Создание простейшего движения Откроем документ, содержащий созданный нами фильм "Деление клетки". И разобьем его на две сцены — так нам будет проще (о сценах см. главу 11).Первая сцена будет содержать титры с названием фильма и носить "говорящее" название название. Для


Параметры движения

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

Параметры движения Настала пора рассмотреть поближе панель Properties и все ее элементы управления, доступные в том случае, если выделен любой из кадров анимации (рис. 12.4). В верхнем левом углу панели Properties находится поле ввода Frame. С его помощью мы можем задать уникальное имя


5.7. Съемка движения

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

5.7. Съемка движения Движение, остановленное на фотокадре, может выглядеть интересно и эффектно. Основное правило съемки быстро движущихся объектов – короткая выдержка (1/125 или даже 1/250 секунды).• Чтобы установить минимальную выдержку из возможных в данной ситуации, можно


19.6. Эффект движения

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

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