- •Практические задания
- •5. После полного описания всех методов сохранить модуль и подключить его к основному модулю.
- •8. Сохранить проект и проверить его работу.
- •10. Сохранить проект и проверить его работу.
- •Практическое задание 4. Разработка классов для графических объектов на основе композиционного взаимодействия
- •Практическое задание 5. Создание и использование контейнера для графических объектов на основе динамического списка
- •Сохранить проект и проверить его работу. Практическое задание 6. Создание и использование библиотеки классов для графических примитивов на основе принципа наследования.
- •Практическое задание 7. Реализация библиотеки классов для графических примитивов с использованием виртуальных методов.
- •Практическое задание 8. Создание и использование универсального контейнера-массива для графических объектов
- •Сохранить проект и проверить его работу. Практическое задание 9. Создание и использование универсального контейнера для графических объектов на основе динамического списка
- •8. Сохранить проект и проверить его работу.
Практическое задание 7. Реализация библиотеки классов для графических примитивов с использованием виртуальных методов.
Постановка задачи:
Выполнить модификацию созданной ранее библиотеки классов для графических примитивов на основе использования механизма виртуальных методов. Цель – устранение ситуации повторения в каждом классе одинаковых методов перемещения и тем самым реализация универсального метода для перемещения любых графических объектов.
Порядок выполнения работы:
Открыть созданный в предыдущей работе проект с библиотекой классов для графических объектов и сохранить его в новом каталоге
Внести в базовый класс фигур следующие изменения:
метод перемещения объявить неабстрактным и невиртуальным (убрать соответствующие директивы из заголовка метода)
объявление метода прорисовки оставить без изменений (использовать директивы virtual и abstract)
добавить программную реализацию метода перемещения с вызовом виртуального абстрактного метода прорисовки
В каждый дочерний класс внести следующие изменения:
убрать объявление метода перемещения
убрать программную реализацию метода перемещения
объявить метод прорисовки переопределяемым с помощью директивы override
С помощью демонстрационного модуля проверить работу механизма переопределения методов, выполнив создание и перемещение всех реализованных графических объектов (окружностей, прямоугольников, эллипсов и др.).
Практическое задание 8. Создание и использование универсального контейнера-массива для графических объектов
Постановка задачи.
Спроектировать и реализовать объект-контейнер для хранения и обработки любых графических объектов, объединенных общей иерархией. Основа контейнера – массив полиморфных объектных переменных-указателей на графические объекты. Объект-контейнер должен выполнять стандартный набор операций: добавление и удаление объектов, поиск и циклическую обработку всех объектов в контейнере. Дополнительно необходимо реализовать операции выборочной обработки объектов в контейнере, такие как перемещение только криволинейных объектов, перемещение только прямоугольных объектов и т.д. Для проверки реализованных методов создать тестирующую программу с простым графическим интерфейсом.
Исходные данные:
реализованная в предыдущем задании библиотека графических объектов с виртуальными методами
реализованный в предыдущих заданиях простой контейнер-массив для однотипных объектов (окружностей)
Порядок выполнения работы:
1. Открыть проект, в котором был реализован простейший контейнер-массив для однотипных объектов и сохранить его в новом каталоге
2. Удалить из проекта модуль, в котором реализован класс окружностей и добавить модуль (модули), содержащий библиотеку классов для графических объектов (минимальный набор классов должен включать следующие классы: корневой класс Фигура, дочерние классы Окружность и Прямоугольник, дочерний класс Эллипс).
3. В разделе интерфейса модуля-контейнера подключить модуль (модули) с библиотекой классов для графических объектов
4. В описании контейнерного класса заменить конкретный классовый тип (например TCircle) на общий корневой классовый тип TFigure
5. Добавить в контейнерный класс второй конструктор, который заполняет весь массив случайным набором графических объектов. Для этого организуется цикл, в котором генерируется случайное число со значениями 0, 1 или 2, по которому с помощью оператора выбора выполняется вызов конструктора для создания одного из трех возможных графических объекта (окружность, прямоугольник, эллипс).
6. Для демонстрации возможностей контейнера предусмотреть следующие команды: