Лабораторная работа №1.
Задание: Разработать программный проект, выполняющий визуализацию и простейшие операции (расчет площади и периметра) для геометрических фигур - треугольника, прямоугольника, окружности. Для визуализации геометрических фигур использовать возможности библиотеки SFML. (https://ps-group.github.io/ps1/). Иерархия разрабатываемых классов должна реализовывать шаблон проектирования декоратор над классами CircleShape, RectangleShape и ConvexShape библиотеки SFML.
Цель лабораторной работы: продемонстрировать знания ООП и С++. Архитектура программного проекта должен демонстрировать механизмы наследования и полиморфизма.
Входные и выходные данные: текстовые файлы.
Пример входных данных: input.txt TRIANGLE: P1=100,100; P2=200,200; P3:150, 150 RECTANGLE: P1=200,200; P2=300,300; CIRCLE: C=100,100; R=50
Пример результата: output.txt TRIANGLE: P=400; S=600 RECTANGLE: P=200; S=800 CIRCLE: P=300; S=500
Среда разработки – Microsoft Visual C++.
Приложение – консольное, должно включать классы, выполняющие расчет, и исполняемый модуль.
Примечание: Целью лабораторной работы не является задача синтаксического разбора текстового файла. Считается, что файл «правильный», т.е. не содержит опечаток в словах TRIANGLE, RECTANGLE, CIRCLE, лишних пробелов и символов. Стороны прямоугольника параллельны осям абсцисс и ординат, прямоугольник задается точками, стоящими по диагонали. Координаты являются целыми числами. Однако количество фигур в файле может быть любым, строки, задающие фигуры, могут стоять в любом порядке.
Соблюдаем конвенцию оформления кода на C++.
10 баллов при сдаче до 12 октября.
- 2 балла за каждую следующую неделю
Лабораторная работа № 2
Добавить функциональность, позволяющую выделить геометрическую фигуру при клике мышки на ее внутреннюю область. При выделении вокруг фигуры должна появляться прямоугольная рамка с маркерами. Реализовать функцию выделения нескольких фигур (Shift + Left Click), группировки(Ctrl+G) в одну фигуру и разгруппировки (Ctrl+U). Для хранения всех фигур на области рисования и сгруппированной фигуры использовать паттерн Composite («Компоновшик»). Реализовать функцию перемещения выделенной фигуры с помощью мыши («drag-and-drop»).
10 баллов при сдаче до 26 октября.
- 2 балла за каждую следующую неделю.
Лабораторная работа № 3
Ввести класс Application (или Handler), который управляет поведением приложения.
Реализовать этот класс как Singleton («Одиночку») и Facade («Фасад»).
Реализовать панель инструментов графического редактора. Инструменты должны позволять добавлять новую фигуру на поле, изменять цвет и толщину ограничительной линии, изменять цвет заливки, переключения в режимов («drag-and-drop», заливка). Ограничиться несколькими вариантами цвета (3-5) и несколькими вариантами толщины линий (2-3).
Для организации панели использовать паттерн State(Состояние) и Command («Команда»).
10 баллов при сдаче до 09 ноября.
- 2 балла за каждую следующую неделю.
Лабораторная работа № 4
Реализовать функцию отмены последней команды (Undo). Для сохранения состояния использовать паттерн Memento (Хранитель). Выполнить рефакторинг приложения – функции изменения цвета фигур и линий, а также толщины линий вынести в паттерн Visitor («Посетитель».)
10 баллов при сдаче до 23 ноября.
- 2 балла за каждую следующую неделю.
Лабораторная работа № 5
Реализовать функции сохранения всех фигур в файлы различных форматов (бинарный, текстовый) и восстановления из этих файлов. При сохранении использовать паттерн Strategy («Стратегия»), при восстановлении – паттерны Template Method («Шаблонный метод») и Builder («Строитель»).
10 баллов при сдаче до 07 декабря.
- 2 балла за каждую следующую неделю.