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