Git Product home page Git Product logo

practice's Introduction

GraphCreator

Редактор графов, который поможет Вам построить граф, а так же применить алгоритм Дейкстры.

Архитектурные решения

Идеи

  • Архитектура данного приложения построена на основе шаблона проектирования MVC (Model View Controller). Суть данного шаблона заключается в том, что любое действие пользователя обрабатывается в контроллере, который имеет доступ к модели (Контроллер изменяет состояние модели). View отображает текущее состояние модели. Таким образом, выделив 3 интерфейса (GraphCreatorСontroller, GraphCreatorView, GraphCreatorModel) разрабатывать данное приложение можно независимо в трех «плоскостях».

  • Для того, чтобы пользователь мог добавлять, перемещать, соединять вершины, а так же удалять элементы графа был применен шаблон проектирования State (Состояние). Пользователь имеет 2 рычага управления – нажать и отпустить кнопку мыши. В разные моменты времени эти два рычага выполняют разные действия: добавить вершину, удалить элемент графа и так далее. Чтобы не писать большие условные конструкции был применен шаблон проектирования State. Были выделены следующие состояния: DeleteState, MoveState, AddVertexState, ConnectionVertexState, AlgorithmShortestWayState. Контекстом для данных состояний стал контроллер, который имеет поле currentState и обрабатывает действия кнопки мыши. Смена состояний происходит путем обработки нажатий на соответствующие кнопки.

  • Следующая задача заключалась в том, чтобы разработать алгоритм таким образом, чтобы он не зависел от его отображения. Первая идея была в том, чтобы вынести реализацию алгоритма в другой модуль и написать его так, будто выполняется консольное приложение. Вторая идея была в том, чтобы применить шаблон проектирование Adapter. Прежде чем запустить алгоритм, данные преобразовываются в необходимый формат, алгоритм выполняется, а затем данные обратно преобразовываются для отображения.

  • Следующая проблема заключалась в реализации пошаговой визуализации работы алгоритма. Решить эту задачу помогла идея шаблона проектирования Снимок. Был создан класс MementoShortestWay, который хранит в себе текущую вершину, обработанные вершины, вершины в очереди, текущие пути до вершин. В определенные моменты алгоритма в контейнер закидываются снимки текущего состояния алгоритма. Затем, когда необходимо сделать шаг вперед просто отображается i+1 снимок.

UML

MVC
Adapter
State

Screenshots

Start
Create Vertex
Moving Vertex
Create Edge
Saving graph
Loading graph
Big graph
Algorithm

practice's People

Contributors

eduard1abdulmanov123 avatar angelinakalyaeva avatar godor1333 avatar

Watchers

James Cloos avatar

practice's Issues

Try2

No description provided.

Try2

No description provided.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.