Движения произвольных фигур
Движения произвольных фигур
Чтобы понять необходимость в отложенных процедурах и классах, снова рассмотрим иерархию фигур 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) имеют интуитивно хорошо понятную семантику и "ничего не делать" не является их разумной реализацией.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Нумерация на произвольных уровнях
Нумерация на произвольных уровнях Иногда может потребоваться просто подсчитать узлы определенного типа независимо от их уровня в документе. Например, в различных местах иерархии документа не исключено наличие нескольких элементов <NAME>, и вам может быть нужно просто
23.1. Универсализация произвольных строк
23.1. Универсализация произвольных строк В главе 14 мы говорили о том, как с помощью функции glob() производится универсализация имен файлов, однако пользователи, знакомые с возможностями универсализации, нередко пытаются применить их и к другим разновидностям строк. Функция
Рисование простейших фигур
Рисование простейших фигур Начнем мы с самых простых операций — рисования различных прямоугольников, с заливкой и без нее.Для рисования прямоугольника без заливки (т. е. одного лишь контура прямоугольника) предназначен метод strokeRect объекта CanvasRenderingContext2D:<контекст
Сбор произвольных данных через ds_raw
Сбор произвольных данных через 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 — значения в байтах,
Рисование сложных фигур
Рисование сложных фигур Канва также поддерживает рисование более сложных, чем прямоугольники, фигур с контурами из множества прямых и кривых линий. Сейчас мы выясним, как это делается, и рассмотрим соответствующие методы объекта CanvasRenderingContext2D. Как рисуются сложные
Создание фигур
Создание фигур Чтобы создать такой рисунок, сделайте следующее.1. Перейдите на вкладку Вставка ленты, в группе Иллюстрации нажмите кнопку Фигуры. Откроется список доступных фигур (рис. 6.12). Рис. 6.12. Список кнопки Фигуры2. Щелкните в документе и, не отпуская кнопку мыши,
Оформление фигур
Оформление фигур Для оформления объектов векторной графики можно использовать стили. Их список находится в группе Стили фигур на вкладке Средства рисования ? Формат ленты (рис. 6.13). Рис. 6.13. Выбор стиля для фигурыВ Word 2007 содержится около 80 стилей для фигур. Если вы не
Построение произвольных поверхностей
Построение произвольных поверхностей ArchiCAD, являясь программой архитектурного проектирования, не ограничивается только инструментарием для построения зданий и сооружений. Проекты создаются не на пустом месте, и для выполнения архитектурного ансамбля требуется еще как
5.7. Съемка движения
5.7. Съемка движения Движение, остановленное на фотокадре, может выглядеть интересно и эффектно. Основное правило съемки быстро движущихся объектов – короткая выдержка (1/125 или даже 1/250 секунды).• Чтобы установить минимальную выдержку из возможных в данной ситуации, можно
19.6. Эффект движения
19.6. Эффект движения Если фотографировать объекты в движении, то на снимках они обычно получаются размытыми. По этой размытости, как правило, и можно с первого взгляда определить, что объект, изображенный на фотографии, двигался в момент съемки. Но эффект движения можно
У15.4 Итераторы фигур
У15.4 Итераторы фигур При обсуждении COMPOSITE_FIGURE мы говорили о применении итераторов для выполнения операций над составными фигурами. Разработайте соответтсвующие классы итераторов. (Подсказка: в [M 1994a] приведены классы библиотеки итераторов, которые послужат основой вашей
Создание простейшего движения
Создание простейшего движения Откроем документ, содержащий созданный нами фильм "Деление клетки". И разобьем его на две сцены — так нам будет проще (о сценах см. главу 11).Первая сцена будет содержать титры с названием фильма и носить "говорящее" название название. Для
Параметры движения
Параметры движения Настала пора рассмотреть поближе панель Properties и все ее элементы управления, доступные в том случае, если выделен любой из кадров анимации (рис. 12.4). В верхнем левом углу панели Properties находится поле ввода Frame. С его помощью мы можем задать уникальное имя
Суд по делам дорожного движения
Суд по делам дорожного движения Наверное каждый, кто получал квитанцию штрафа за превышение скорости, наиву мечтал о каком-нибудь способе это преодолеть. Но не хождением в школу дорожного движения, или просто расплачиваясь по указанной сумме, или получить шанс убедить
Рисование линий и фигур
Рисование линий и фигур Для создания рисунков в программе Word используются автофигуры, которые можно вставить в нужное место документа, а затем отформатировать по своему усмотрению. Чтобы вставить автофигуру в текст, действуйте следующим образом.1. На вкладке Вставка