Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
задания ооп.docx
Скачиваний:
4
Добавлен:
16.11.2019
Размер:
33.29 Кб
Скачать

Практическое задание 5. Создание и использование контейнера для графических объектов на основе динамического списка

Постановка задачи.

Спроектировать и реализовать объект-контейнер для хранения и обработки однотипных графических объектов, например – прямоугольников. Основа контейнера – динамический список объектных переменных-указателей на объекты-прямоугольники. Объект-контейнер должен выполнять стандартный набор операций: добавление и удаление объектов-прямоугольников, поиск и циклическую обработку всех объектов в контейнере. Для проверки реализованных методов создать тестирующую программу с простым графическим интерфейсом.

Порядок выполнения работы:

  1. Открыть проект, в котором реализован класс прямоугольников и сохранить его в новом каталоге

  2. Добавить в проект новый программный модуль, предназначенный для реализации спискового контейнера.

  3. В разделе интерфейса этого модуля:

    • подключить модуль, в котором реализован класс прямоугольников;

    • ввести описание вспомогательного класса элементов списка

    • ввести описание основного класса спискового контейнера

  4. В разделе реализации записать код всех необходимых методов обоих классов.

  5. В разделе реализации главного модуля подключить контейнерный модуль и объявить объектную переменную контейнерного типа.

  6. Добавить в основное меню команду Контейнер с пунктами Создать, Добавить, Переместить, Уничтожить.

  7. Написать обработчик команды Создать, в котором с помощью конструктора создается пустой контейнер и выводится информационное сообщение.

  8. Написать обработчик команды Добавить, в котором создается объект-прямоугольник со случайными параметрами, выполняется его добавление в контейнер и отображение методом Show.

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

  10. Написать обработчик команды Уничтожить, который с помощью итератора уничтожает все объекты-прямоугольники, затем уничтожает методом Free сам контейнер и выводит об этом сообщение.

  11. Сохранить проект и проверить его работу. Практическое задание 6. Создание и использование библиотеки классов для графических примитивов на основе принципа наследования.

Постановка задачи.

Требуется создать небольшую иерархию классов, описывающих основные графические примитивы (окружность, треугольник, отрезок, прямоугольник и т.д.). Исходные данные – созданные в заданиях 1 и 2 классы для объектов Окружность и Прямоугольник. Библиотека должна включать следующий минимальный набор классов:

  • базовый (корневой) абстрактный класс фигур

  • дочерний класс окружностей, наследующий классу фигур (первый уровень наследования)

  • дочерний класс прямоугольников, наследующий классу фигур (первый уровень наследования)

  • дочерний класс эллипсов, наследующий классу окружностей (второй уровень наследования)

Корневой класс фигур должен определять общие свойства и поведение всех объектов-примитивов: координаты базовой точки примитива, конструктор, методы доступа, абстрактные методы прорисовки Show и перемещения MoveTo.

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

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

Порядок выполнения работы:

  1. Открыть созданный ранее проект с классами Окружность и Прямоугольник и сохранить его в новом каталоге.

  2. Добавить в проект новый модуль и ввести в него описание класса фигур, используя для задания абстрактных методов пару директив virtual и abstract:

procedure Show; virtual; abstract;

  1. Привести программную реализацию всех неабстрактных методов класса фигур (в конструкторе предусмотреть вывод сообщения об инициализации свойств-координат).

  2. Изменить описание класса окружностей TCircle как потомка класса TFigure с добавлением нового свойства – радиуса окружности, собственным конструктором, методом Show, методом MoveTo и новым методом изменения радиуса.

  3. Дать программную реализацию конструктора дочернего класса окружностей, ОБЯЗАТЕЛЬНО начинающуюся с вызова конструктора родителя:

  • inherited Create(параметры);

  • в конце предусмотреть вывод сообщения о создании объекта

  1. Дать программную реализацию остальных методов класса окружностей

  2. В основном (демонстрационном) модуле предусмотреть создание объектов-окружностей, их перемещение и изменение радиуса.

  3. Проверить работоспособность созданных классов.

  4. На базе класса TCircle создать дочерний класс эллипсов добавлением свойства-полуоси. Реализовать свой конструктор и методы прорисовки и перемещения. Для поворота на 90 градусов ввести новый метод.

  5. Проверить работоспособность созданных классов.

  6. Аналогично изменить класс прямоугольников и проверить его работоспособность.

  7. Для проверки работы механизма ограничения доступа к элементам классов в пределах общей древовидной иерархии выполнить следующее:

  • все закрытые (private) свойства классов объявить защищенными (protected)

  • во всех методах, где использовались методы доступа к закрытым свойствам (типа GetX, GetY, SetXY и т.д.) заменить вызовы этих методов прямым использованием соответствующих свойств

  • убедиться, что в демонстрационной программе все операции с графическими объектами выполняются правильно