Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы ООП - 2014.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
82 Кб
Скачать
☆

Лабораторная работа 6. «Визуальный редактор»

Тип приложения: GUI; язык: без ограничений.

На основе Л.Р.4 реализовать простейший визуальный редактор векторных объектов (круг, квадрат, треугольник, отрезок, и т.д.) со следующей функциональностью:

  • Создание графических объектов на экране:

    • меню, панель инструментов с доступными классами объектов

    • добавление нового объекта в рабочую область

  • Манипуляции объектами в рабочей области:

    • выбор объекта для манипулирования (выделяется цветом или рамкой)

    • изменение цвета, размера, положения

    • удаление объекта из рабочей области

    • контроль выхода за рабочую область (при передвижении объект не должен выходить за границы ни одной своей частью)

  • Программные требования:

    • манипуляции объектами выполняются с помощью клавиатуры, при этом выбор клавиш управления должен быть как можно ближе к используемым обычно для таких задач в среде Windows

    • «хорошая» иерархия классов

    • использование своего хранилища объектов из Л.Р.3

    • отделение взаимодействия с пользователем от логики работы классов

Лабораторная работа 7. «Группировка и сохранение»

Тип приложения: GUI; язык: без ограничений.

Развитие приложения из Л.Р.6:

  • Группировка, разгруппировка объектов и групп объектов (сгруппированные объекты изменяются только совместно). Реализация группировки объектов должна быть выполнена с помощью паттерна Composite:

    • выделение нескольких объектов в рабочей области и их группировка (с изъятием из хранилища и помещением в специальный объект класса Group, который затем обратно помещается в хранилище);

    • группа ведет себя как единый объект: перемещается, сохраняет относительное положение входящих в нее объектов, не выходит за границы;

    • в группу могут входить другие группы, и т.д.

  • Реализация сохранения и восстановления хранилища из Л.Р.3 с помощью паттерна Abstract Factory или Factory Method:

    • сохранение всех объектов хранилища в (человеко-читаемый) текстовый файл

    • восстановление всех объектов хранилища из текстового файла

  • Факультативно:

    • манипуляции объектами выполняются не только с помощью клавиатуры, но и с помощью мыши

    • реализация команд пользовательского интерфейса с помощью паттерна Command (с возможностью функциональности «undo» - отмены последовательности операций)

    • команды пользовательского интерфейса и типы объектов создаются с помощью подключаемых динамических библиотек (DLL)

Функция хранилища, которая занимается сохранением объектов в некоторый файл, не должна знать о деталях организации сохраняемых объектов. Она должна вызывать виртуальную функцию save() у базового объекта, тем самым, предоставляя объекту самому возможность записать в файл то, что ему нужно для восстановления.

Примерный алгоритм сохранения хранилища в текстовый файл должен выглядеть так:

  • Открой файл для записи

  • Сохрани в файл информацию о количестве объектов

  • Для каждого объекта хранилища:

    • Вызови функцию save()

  • Закрой файл

Самой сложной для реализации хранилища является функция восстановления объектов из хранилища. Понятно, что наряду с виртуальной функцией save() у базового объекта, у него должна быть и виртуальная функция load(). Однако проблема состоит в следующем. Пусть требуется загрузить очередной объект из хранилища. Надо вызвать метод load() у объекта, но объект ведь еще не создан! А объект какого класса необходимо создать, чтобы вызвать у него метод load()?

Примерный алгоритм загрузки содержимого хранилища из текстового файла должен выглядеть так:

  • Открой файл для чтения

  • Прочитай информацию о количестве объектов

  • Столько раз, сколько объектов нужно создать:

    • Узнай из файла, объект какого класса нужно создать

    • Создай объект этого класса

    • Вызови у объекта функцию load()

  • Закрой файл