treefast 0.2.0
Библиотека для работы с гарфами
Requires Python: >=3.6

# TreeFast: Библиотека для работы с деревьями

## Введение

TreeFast — это библиотека, созданная для работы с деревьями и графами, реализующая основные структуры данных, такие как узлы (Node), ребра (Edge), графы (Graph) и деревья (Tree). Данный проект предназначен для демонстрации принципов объектно-ориентированного анализа и дизайна (ООАД) в рамках учебного курса. TreeFast предоставляет удобные интерфейсы для создания, манипулирования и управления деревьями и графами, а также включает набор тестов для проверки корректности работы структур данных.

## Цели и задачи

Цель разработки TreeFast заключается в создании качественной и гибкой библиотеки для работы с деревьями, которая будет полезна как для образовательных целей, так и для практического применения. Основные задачи включают:

1. Проектирование и реализация классов для основных структур данных (узлы, ребра, графы, деревья).
2. Обеспечение удобных интерфейсов для работы с данными структурами.
3. Разработка тестов для обеспечения корректности и надежности библиотеки.
4. Демонстрация принципов ООП и дизайна программных систем.

## Установка и настройка

Установка для пользователя через pip:
    ```bash
    pip install treefast
    ```


Для начала работы с библиотекой TreeFast через git выполните следующие шаги:

1. Клонируйте репозиторий:
    ```bash
    git clone https://github.com/ritatay635/treefast.git
    cd treefast
    ```

2. Создайте виртуальное окружение и активируйте его:
    ```bash
    python -m venv venv
    source venv/bin/activate  # для Windows используйте `venv\Scripts\activate`
    ```

3. Установите необходимые зависимости:
    ```bash
    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`. Тесты покрывают основные функции и методы каждого класса, обеспечивая корректность и надежность кода.

Для запуска тестов выполните команду:
```bash
pytest
```

### Структура тестов

Директория `tests` содержит тестовые файлы для каждого компонента библиотеки:

```
tests/
├── __init__.py
├── test_nodes.py       # Тесты для класса Node
├── test_edges.py       # Тесты для класса Edge
├── test_graphs.py      # Тесты для класса Graph
└── test_trees.py       # Тесты для класса Tree
```

## Принципы объектно-ориентированного анализа и дизайна (ООАД)

TreeFast разработана с использованием принципов объектно-ориентированного программирования и дизайна, таких как инкапсуляция, наследование и полиморфизм. Дизайн библиотеки демонстрирует следующие концепции:

1. **Инкапсуляция**: данные и методы каждого класса скрыты и защищены от внешней модификации, доступ предоставляется через публичные интерфейсы.
2. **Наследование**: классы узлов и деревьев наследуются от базовых классов, что обеспечивает повторное использование кода и поддержание порядка.
3. **Полиморфизм**: методы могут быть переопределены в наследниках, что позволяет использовать объекты различных классов через общий интерфейс.

## Заключение

TreeFast является мощной и гибкой библиотекой для работы с деревьями и графами, предназначенной для демонстрации принципов объектно-ориентированного анализа и дизайна. Она обеспечивает высокую степень модульности и расширяемости, что делает её отличным инструментом как для образовательных целей, так и для практического применения в различных задачах, связанных с обработкой и управлением деревьями и графами.

## Авторы

Этот проект был разработан Тышко Станиславом в 2024 году.

## Лицензия

TreeFast лицензирован под лицензией MIT. Для подробностей ознакомьтесь с файлом LICENSE в корневом каталоге проекта.
```