- •Практические задания
- •5. После полного описания всех методов сохранить модуль и подключить его к основному модулю.
- •8. Сохранить проект и проверить его работу.
- •10. Сохранить проект и проверить его работу.
- •Практическое задание 4. Разработка классов для графических объектов на основе композиционного взаимодействия
- •Практическое задание 5. Создание и использование контейнера для графических объектов на основе динамического списка
- •Сохранить проект и проверить его работу. Практическое задание 6. Создание и использование библиотеки классов для графических примитивов на основе принципа наследования.
- •Практическое задание 7. Реализация библиотеки классов для графических примитивов с использованием виртуальных методов.
- •Практическое задание 8. Создание и использование универсального контейнера-массива для графических объектов
- •Сохранить проект и проверить его работу. Практическое задание 9. Создание и использование универсального контейнера для графических объектов на основе динамического списка
- •8. Сохранить проект и проверить его работу.
Практическое задание 5. Создание и использование контейнера для графических объектов на основе динамического списка
Постановка задачи.
Спроектировать и реализовать объект-контейнер для хранения и обработки однотипных графических объектов, например – прямоугольников. Основа контейнера – динамический список объектных переменных-указателей на объекты-прямоугольники. Объект-контейнер должен выполнять стандартный набор операций: добавление и удаление объектов-прямоугольников, поиск и циклическую обработку всех объектов в контейнере. Для проверки реализованных методов создать тестирующую программу с простым графическим интерфейсом.
Порядок выполнения работы:
Открыть проект, в котором реализован класс прямоугольников и сохранить его в новом каталоге
Добавить в проект новый программный модуль, предназначенный для реализации спискового контейнера.
В разделе интерфейса этого модуля:
подключить модуль, в котором реализован класс прямоугольников;
ввести описание вспомогательного класса элементов списка
ввести описание основного класса спискового контейнера
В разделе реализации записать код всех необходимых методов обоих классов.
В разделе реализации главного модуля подключить контейнерный модуль и объявить объектную переменную контейнерного типа.
Добавить в основное меню команду Контейнер с пунктами Создать, Добавить, Переместить, Уничтожить.
Написать обработчик команды Создать, в котором с помощью конструктора создается пустой контейнер и выводится информационное сообщение.
Написать обработчик команды Добавить, в котором создается объект-прямоугольник со случайными параметрами, выполняется его добавление в контейнер и отображение методом Show.
Написать обработчик команды Переместить, который лишь вызывает метод-итератор с соответствующими параметрами (смещение относительно текущего положения).
Написать обработчик команды Уничтожить, который с помощью итератора уничтожает все объекты-прямоугольники, затем уничтожает методом Free сам контейнер и выводит об этом сообщение.
Сохранить проект и проверить его работу. Практическое задание 6. Создание и использование библиотеки классов для графических примитивов на основе принципа наследования.
Постановка задачи.
Требуется создать небольшую иерархию классов, описывающих основные графические примитивы (окружность, треугольник, отрезок, прямоугольник и т.д.). Исходные данные – созданные в заданиях 1 и 2 классы для объектов Окружность и Прямоугольник. Библиотека должна включать следующий минимальный набор классов:
базовый (корневой) абстрактный класс фигур
дочерний класс окружностей, наследующий классу фигур (первый уровень наследования)
дочерний класс прямоугольников, наследующий классу фигур (первый уровень наследования)
дочерний класс эллипсов, наследующий классу окружностей (второй уровень наследования)
Корневой класс фигур должен определять общие свойства и поведение всех объектов-примитивов: координаты базовой точки примитива, конструктор, методы доступа, абстрактные методы прорисовки Show и перемещения MoveTo.
В каждом классе необходимо реализовать свой конструктор и методы прорисовки и перемещения. Кроме того, классы могут содержать методы, уникальные только для соответствующего поддерева, например – изменение радиуса окружности, изменение линейных размеров прямоугольника, поворот эллипса и т.д.
Вся библиотека оформляется в виде одного или нескольких модулей, которые подключаются к основной программе для демонстрации возможностей этой библиотеки.
Порядок выполнения работы:
Открыть созданный ранее проект с классами Окружность и Прямоугольник и сохранить его в новом каталоге.
Добавить в проект новый модуль и ввести в него описание класса фигур, используя для задания абстрактных методов пару директив virtual и abstract:
procedure Show; virtual; abstract;
Привести программную реализацию всех неабстрактных методов класса фигур (в конструкторе предусмотреть вывод сообщения об инициализации свойств-координат).
Изменить описание класса окружностей TCircle как потомка класса TFigure с добавлением нового свойства – радиуса окружности, собственным конструктором, методом Show, методом MoveTo и новым методом изменения радиуса.
Дать программную реализацию конструктора дочернего класса окружностей, ОБЯЗАТЕЛЬНО начинающуюся с вызова конструктора родителя:
inherited Create(параметры);
в конце предусмотреть вывод сообщения о создании объекта
Дать программную реализацию остальных методов класса окружностей
В основном (демонстрационном) модуле предусмотреть создание объектов-окружностей, их перемещение и изменение радиуса.
Проверить работоспособность созданных классов.
На базе класса TCircle создать дочерний класс эллипсов добавлением свойства-полуоси. Реализовать свой конструктор и методы прорисовки и перемещения. Для поворота на 90 градусов ввести новый метод.
Проверить работоспособность созданных классов.
Аналогично изменить класс прямоугольников и проверить его работоспособность.
Для проверки работы механизма ограничения доступа к элементам классов в пределах общей древовидной иерархии выполнить следующее:
все закрытые (private) свойства классов объявить защищенными (protected)
во всех методах, где использовались методы доступа к закрытым свойствам (типа GetX, GetY, SetXY и т.д.) заменить вызовы этих методов прямым использованием соответствующих свойств
убедиться, что в демонстрационной программе все операции с графическими объектами выполняются правильно