Перспективные технологии объектно-ориентированного программирования (ПТООП)
- @Drapegnik/oop-paint
- @vanashimko/shapes-drawer
- @vanashimko/employees-list-editor
- @MinchukSergei/PTOOP
- @pavel-ulasavets/magistracy-ptoop
- @zzhukanton/PTOOP
- @demidov91/university-oop-geometry
- Построить иерархию классов для вывода графических фигур:
отрезок
,прямоугольник
,эллипс
и т.д - не менее 6 фигур. - Распределить классы по модулям.
- Создать список фигур в виде отдельного класса.
- В главном модуле программы добавить в список различные фигуры (статическая инициализация), после чего запустить рисование списка фигур.
- Выполнить задание на языке C++, C# или Java.
- Для рисования использовать любую подходящую графическую библиотеку.
- Если изучение графической библиотеки вызывает затруднение, допускается вывод фигур в файл или на экран в виде текстовых строк вида
Rectangle(10, 20, 30, 40)
.
- Расширить пример с графическими фигурами (
#1
) так, чтобы фигуры можно было создавать на уровне пользовательского интерфейса. - Существуют несколько способов (выбрать любой способ ввода):
- ввод координат с помощью мыши;
- диалоговый ввод значений;
- ввод на скриптовом языке.
- Создание объекта должно выполняться так, чтобы добавление нового класса в систему не требовало изменения существующего кода (выбор типа с помощью оператора
case
/switch
и множественногоif
делать нельзя). - Получившаяся программа должна представлять собой примитивный графический редактор.
- Классы фигур не должны содержать метод рисования.
- Выбрать предметную область и построить иерархию классов.
- Иерархия должна включать не менее 6 классов.
- Реализовать сериализацию/десереализацию объектов из полученной иерархии классов в файл/из файла, формат сериализации определяется индивидуальным вариантом.
- В пользовательском интерфейсе необходимо реализовать следующие функции:
- возможность изменять свойства объектов (редактирование);
- добавлять/удалять объекты из списка;
- сериализация/десериализация списка объектов.
- Добавление новых классов в иерархию не должно приводить к необходимости переписать существующий код, и не использовать
if
-else
/switch
-case
, рефлексию. - Опционально: реализация графического интерфейса.
# | format |
---|---|
1 | XML |
2 | Binary |
3 | Text |
4 | JSON |
5 | BSON |
- На основе лабораторной работы
#2
или#3
расширить имеющуюся иерархию новыми классами с помощью динамической загрузки модуля (плагина). - Новые модули должны добавлять или расширять функциональность базовой программы:
- новый класс в иерархии
- функции по работе с ним
- новые элементы в пользовательском интерфейсе для работы с новым классом
- Загружать модули можно из папки либо посредством строки-параметра в главном модуле с именем нового модуля и возможной перекомпиляцией.
- В идеале добавление нового модуля должно выполняться его динамической загрузкой, т.е. вообще не должно требовать изменения кода программы.
- Сделать подпись плагина с последующей проверкой базовой программой данной подписи на достоверность (время активации и целостность).
- Разработать механизм подписывания плагинов.
- На базе предыдущей лабораторной работы (
#4
) на основе плагинов (2-3 плагина) реализовать возможность обработки структур перед сохранением в файл и после загрузки из файла. - Тип обработки задается вариантом.
- Дополнительная функциональность должна находиться в меню настроек и зависит от загруженных плагинов.
- Загрузка плагинов производится автоматически из папки, либо выбором файла с плагином через пользовательский интерфейс.
- Предусмотреть дополнительную настройку функциональности плагина в меню настройки плагинов.
- Например, заданием параметров шифрования/архивации, выбор алгоритма шифрования, дополнительные правила трансформации, кодировки и т.д.
# | Тип обработки |
---|---|
1 | Трансформация XML данных в JSON |
2 | Архивация |
3 | Шифрования/дешифрование |
4 | Трансформация XML (можно XSLT ) |
5 | Сохранение контрольной суммы |
- На базе предыдущей лабораторной работы (
#5
) обменяться с товарищем функциональными плагинами (минимум одним) и адаптировать их в этой же работе помощью паттернаАдаптер
(т.е. появятся новые функции от плагина товарища, загруженные через плагин с адаптером). - Также необходимо реализовать 2 паттерна (любых) в программе, пояснив уместность их использования.
Номер варианта определяется по формуле:
(<порядковый номер в группе> mod <количество вариантов>) + 1
Проект должен разрабатываться с использование системы контроля версий
git
/svn
. Все функции/процедуры, большие блоки кода должны содержать комментарии. Язык комментариев - английский.