Библиотека для работы с гарфами
Project description
TreeFast: Библиотека для работы с деревьями
Введение
TreeFast — это библиотека, созданная для работы с деревьями и графами, реализующая основные структуры данных, такие как узлы (Node), ребра (Edge), графы (Graph) и деревья (Tree). Данный проект предназначен для демонстрации принципов объектно-ориентированного анализа и дизайна (ООАД) в рамках учебного курса. TreeFast предоставляет удобные интерфейсы для создания, манипулирования и управления деревьями и графами, а также включает набор тестов для проверки корректности работы структур данных.
Цели и задачи
Цель разработки TreeFast заключается в создании качественной и гибкой библиотеки для работы с деревьями, которая будет полезна как для образовательных целей, так и для практического применения. Основные задачи включают:
- Проектирование и реализация классов для основных структур данных (узлы, ребра, графы, деревья).
- Обеспечение удобных интерфейсов для работы с данными структурами.
- Разработка тестов для обеспечения корректности и надежности библиотеки.
- Демонстрация принципов ООП и дизайна программных систем.
Установка и настройка
Установка для пользователя через pip:
bash pip install treefast
Для начала работы с библиотекой TreeFast через git выполните следующие шаги:
-
Клонируйте репозиторий:
git clone https://github.com/ritatay635/treefast.git cd treefast
-
Создайте виртуальное окружение и активируйте его:
python -m venv venv source venv/bin/activate # для Windows используйте `venv\Scripts\activate`
-
Установите необходимые зависимости:
pip install -r requirements.txt
Краткий обзор компонентов
Node (Узел)
Класс Node
представляет узел дерева или графа. Он содержит идентификатор, данные и список дочерних узлов. Этот класс также включает методы для добавления и удаления дочерних узлов, а также методы для сериализации и десериализации узлов.
Основные методы:
add_child(node)
: добавляет дочерний узел.remove_child(node)
: удаляет дочерний узел.serialize()
: сериализует узел в строку.deserialize(data)
: десериализует узел из строки.
Edge (Ребро)
Класс Edge
представляет ребро в графе, соединяющее два узла. Он включает возможности задания веса ребра и методы для сериализации и десериализации.
Основные методы:
get_weight()
: возвращает вес ребра.serialize()
: сериализует ребро в строку.deserialize(data)
: десериализует ребро из строки.
Graph (Граф)
Класс Graph
представляет граф, состоящий из узлов и ребер. Основные функции включают добавление и удаление узлов и ребер, а также методы для поиска узлов.
Основные методы:
add_node(node)
: добавляет узел в граф.remove_node(node)
: удаляет узел из графа.add_edge(edge)
: добавляет ребро в граф.remove_edge(edge)
: удаляет ребро из графа.
Tree (Дерево)
Класс Tree
является частным случаем графа и представляет собой иерархическую структуру данных. Класс включает методы для добавления и удаления дочерних узлов, обходов в глубину и в ширину, а также методы для сериализации и десериализации деревьев.
Основные методы:
add_child(node)
: добавляет дочерний узел.remove_child(node)
: удаляет дочерний узел.depth_first_search(node)
: выполняет обход в глубину.breadth_first_search(node)
: выполняет обход в ширину.serialize()
: сериализует дерево в строку.deserialize(data)
: десериализует дерево из строки.
Тестирование
TreeFast включает набор тестов, которые написаны с использованием фреймворка pytest
. Тесты покрывают основные функции и методы каждого класса, обеспечивая корректность и надежность кода.
Для запуска тестов выполните команду:
pytest
Структура тестов
Директория tests
содержит тестовые файлы для каждого компонента библиотеки:
tests/
├── __init__.py
├── test_nodes.py # Тесты для класса Node
├── test_edges.py # Тесты для класса Edge
├── test_graphs.py # Тесты для класса Graph
└── test_trees.py # Тесты для класса Tree
Принципы объектно-ориентированного анализа и дизайна (ООАД)
TreeFast разработана с использованием принципов объектно-ориентированного программирования и дизайна, таких как инкапсуляция, наследование и полиморфизм. Дизайн библиотеки демонстрирует следующие концепции:
- Инкапсуляция: данные и методы каждого класса скрыты и защищены от внешней модификации, доступ предоставляется через публичные интерфейсы.
- Наследование: классы узлов и деревьев наследуются от базовых классов, что обеспечивает повторное использование кода и поддержание порядка.
- Полиморфизм: методы могут быть переопределены в наследниках, что позволяет использовать объекты различных классов через общий интерфейс.
Заключение
TreeFast является мощной и гибкой библиотекой для работы с деревьями и графами, предназначенной для демонстрации принципов объектно-ориентированного анализа и дизайна. Она обеспечивает высокую степень модульности и расширяемости, что делает её отличным инструментом как для образовательных целей, так и для практического применения в различных задачах, связанных с обработкой и управлением деревьями и графами.
Авторы
Этот проект был разработан Тышко Станиславом в 2024 году.
Лицензия
TreeFast лицензирован под лицензией MIT. Для подробностей ознакомьтесь с файлом LICENSE в корневом каталоге проекта.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.