Учебный проект для практики ООП на примере приложения на WPF: рисование различных геометрических фигур, каждая фигура описана отдельным классом (наследование, агрегация/композиция, инкапсуляция, полиморфизм).
Проект создан для тренировки архитектуры и принципов SOLID, а не как полноценный редактор.
- Базовые геометрические фигуры: Линия, Прямоугольник, Эллипс (и др. по мере развития).
- Общий интерфейс/базовый класс для фигур (полиморфный
Draw/Render). - Параметры фигур: позиция, размеры, толщина контура, цвет заливки/штриха.
- Простая архитектура для добавления новых фигур без изменений существующего кода (Open/Closed).
(Если реализованы выделение/перемещение/удаление/слои/Undo-Redo — перечислите здесь.)
- Базовый класс
ShapeBase(или интерфейсIShape) — общие свойства/методы (позиция, цвета,Draw(DrawingContext)и т.п.). - Наследники:
LineShape,RectangleShape,EllipseShape— переопределяют отрисовку и специфику. - Агрегация/композиция: холст/документ (например,
CanvasModel) агрегирует коллекцию фигурIList<IShape>. - Инкапсуляция: управление внутренним состоянием фигур через методы/свойства (валидация, уведомления).
- MVVM (по желанию): разделение
Model(фигуры),View(XAML),ViewModel(команды, биндинги).
Пример контракта фигуры (идея):
public interface IShape
{
Point Start { get; set; }
Point End { get; set; }
Brush Stroke { get; set; }
double StrokeThickness { get; set; }
Brush Fill { get; set; }
void Draw(DrawingContext dc);
}Paint-Tool/
├─ PaintTool.sln
└─ PaintTool/
├─ Models/ # Фигуры, модель холста/документа
├─ ViewModels/ # Команды, состояние UI (если MVVM)
├─ Views/ # XAML-окна/контролы (MainWindow.xaml)
├─ Services/ # Сохранение/загрузка, диалоги и т.п.
├─ Resources/ # Стили, шаблоны
└─ App.xaml, Program.cs (или App.xaml.cs)
Адаптируйте под фактические файлы репозитория.
- Windows 10/11
- .NET 6+ (или версия, используемая в проекте)
- Visual Studio 2022 с компонентами «.NET Desktop Development»
# Клонировать репозиторий
git clone https://github.com/Yut-ka/Paint-Tool.git
# Открыть решение
# 1) Откройте PaintTool.sln в Visual Studio
# 2) Выберите конфигурацию Debug
# 3) Запустите (F5)- Создайте класс
TriangleShape : ShapeBase(или реализуйтеIShape). - Добавьте свойства (например, третья точка или радиусы).
- Переопределите отрисовку (
Draw) с использованиемDrawingContext/Geometry/Shape. - Зарегистрируйте инструмент в UI (кнопка/команда) и логику создания экземпляров.
- Покройте тестами логику (если используете unit-тесты) и добавьте пример в демо.
- Выделение и трансформации (перемещение, resize, rotate).
- Множественный выбор, группировка (композиция фигур).
- Слои, порядок отрисовки, Z-index.
- Undo/Redo (Command pattern, Memento).
- Сохранение/загрузка в SVG/PNG/JPEG.
- Палитра/пипетка, штрихи, прозрачность, градиенты.
PR/Issues приветствуются — проект учебный, поэтому идеи и ревью только в плюс. Пишите замечания по архитектуре и ООП.
Укажите лицензии (например, MIT) в файле LICENSE, если нужна.
Yut-ka — тренировочный проект по ООП и WPF.
- GitHub: https://github.com/Yut-ka