
- •1 ПОСТАНОВКА ЗАДАЧИ
- •1.1 Описание входных данных
- •1.2 Описание выходных данных
- •2 МЕТОД РЕШЕНИЯ
- •3 ОПИСАНИЕ АЛГОРИТМОВ
- •3.1 Алгоритм функции main
- •3.2 Алгоритм метода set_parent класса cl_base
- •3.3 Алгоритм метода remove_child_by_name класса cl_base
- •3.4 Алгоритм метода get_object_by_path класса cl_base
- •3.5 Алгоритм метода build_tree_objects класса application
- •3.6 Алгоритм метода exec_app класса cl_base
- •4 БЛОК-СХЕМЫ АЛГОРИТМОВ
- •5 КОД ПРОГРАММЫ
- •5.1 Файл application.cpp
- •5.2 Файл application.h
- •5.3 Файл cl_2.cpp
- •5.4 Файл cl_2.h
- •5.5 Файл cl_3.cpp
- •5.6 Файл cl_3.h
- •5.7 Файл cl_4.cpp
- •5.8 Файл cl_4.h
- •5.9 Файл cl_5.cpp
- •5.10 Файл cl_5.h
- •5.11 Файл cl_6.cpp
- •5.12 Файл cl_6.h
- •5.13 Файл cl_base.cpp
- •5.14 Файл cl_base.h
- •5.15 Файл main.cpp
- •6 ТЕСТИРОВАНИЕ
- •СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
3 ОПИСАНИЕ АЛГОРИТМОВ
Согласно этапам разработки, после определения необходимого инструментария в разделе «Метод», составляются подробные описания алгоритмов для методов классов и функций.
3.1 Алгоритм функции main
Функционал: Основной алгоритм программы. Параметры: нет.
Возвращаемое значение: Целое индикатор корректности выполенения программы.
Алгоритм функции представлен в таблице 2.
Таблица 2 – Алгоритм функции main |
|
|
|||
|
|
|
|
|
|
|
№ |
Предикат |
Действия |
|
№ |
|
|
|
|
|
перехода |
|
1 |
|
Создание объекта ob_application класса application с использованием |
2 |
|
|
|
|
параметрезированного конструктор и передачей в него качестве |
|
|
|
|
|
параметра пустого указателя |
|
|
|
|
|
|
|
|
2 |
|
Вызов метода build_tree_objects объекта ob_application |
|
3 |
|
|
|
|
|
|
|
3 |
|
Возвращение результата работы метода exec_app() |
для объекта |
|
|
|
|
|
ob_application |
|
|
|
|
|
|
|
|
3.2 Алгоритм метода set_parent класса cl_base
Функционал: Переопределения головного объекта для текущего в дереве иерархии.
Параметры: cl_base* new_parent. Возвращаемое значение: bool.
13
Алгоритм метода представлен в таблице 3.
Таблица 3 – Алгоритм метода set_parent класса cl_base |
|
||||||
|
|
|
|
|
|
|
|
|
№ |
Предикат |
|
|
Действия |
№ |
|
|
|
|
|
|
|
|
перехода |
|
1 |
Головной объект совпадает с |
Возвратить true |
|
|||
|
|
новым головным |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|||
2 |
Объект является корнем или |
Возвратить false |
|
||||
|
|
new_parent |
- |
нулевой |
|
|
|
|
|
указатель |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|||
3 |
У нового головного объекта |
Возвратить false |
|
||||
|
|
уже есть |
подчиненный |
с |
|
|
|
|
|
именем текущего объекта |
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
|
|
|
|
|
|
|
|
4 |
|
|
|
|
Объявление стека st указателей на объект класса |
5 |
|
|
|
|
|
|
|
cl_base |
|
|
|
|
|
|
|
|
|
5 |
|
|
|
|
Добавление в стек текущего объекта |
6 |
|
|
|
|
|
|
|
||
6 |
Стек содержит элемент |
|
|
7 |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
|
|
|
|
|
|
|
|
7 |
|
|
|
|
Инициализация указателя current_node_ptr на |
8 |
|
|
|
|
|
|
|
объект класса cl_base значением верхнего |
|
|
|
|
|
|
|
элемента стека st |
|
|
|
|
|
|
|
|
|
8 |
|
|
|
|
Удаление верхнего элемента стека st |
9 |
|
|
|
|
|
|
|
|
|
9 |
current_node_ptr |
|
== |
Возвратить false |
|
||
|
|
new_parent |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
|
|
|
|
|
|
|
|
10 |
|
|
|
|
Инициализация целочисленной переменной i |
11 |
|
|
|
|
|
|
|
значением 0 |
|
|
|
|
|
|
|||
11 |
i < размер вектора children |
Добавление в стек элемента children[i] объекта |
12 |
||||
|
|
объекта current_node_ptr |
|
current_node_ptr |
|
||
|
|
|
|
|
|
|
|
14
№ |
Предикат |
|
Действия |
№ |
|
|
|
|
перехода |
|
|
|
|
6 |
|
|
|
|
|
12 |
|
|
Инкремент i |
11 |
|
|
|
|
|
13 |
|
|
Инициализация ссылки на вектор v, содержащего |
14 |
|
|
|
указатели на объект класса cl_base значением |
|
|
|
|
свойства children головного объекта |
|
|
|
|
|
|
14 |
|
|
Инициализация целочисленной переменной i |
15 |
|
|
|
значением 0 |
|
|
|
|
|
|
15 |
i < размера вектора v |
|
|
16 |
|
|
|
|
|
|
|
|
Возвратить false |
|
16 |
Имя i-го объекта |
равно |
Удаление i-го элемента вектора v |
18 |
|
имени текущего объекта |
|
|
|
|
|
|
|
|
|
|
|
|
17 |
|
|
|
|
|
17 |
|
|
Инкремент i |
15 |
|
|
|
|
|
18 |
|
|
Добавить текущий объект в вектор подчинённых |
19 |
|
|
|
объектов нового родительского объекта |
|
|
|
|
|
|
19 |
|
|
Возвратить true |
|
3.3 Алгоритм метода remove_child_by_name класса cl_base
Функционал: Удаления подчиненного объекта по наименованию. Параметры: string child_name.
Возвращаемое значение: Отсутствует. Алгоритм метода представлен в таблице 4.
Таблица 4 – Алгоритм метода remove_child_by_name класса cl_base |
|
|||
|
|
|
|
|
|
№ |
Предикат |
Действия |
№ |
|
|
|
|
перехода |
|
1 |
|
Инициализация ссылки на вектор v, содержащий |
2 |
|
|
|
указатели на объекты класса cl_node значением |
|
|
|
|
свойства children |
|
|
|
|
|
|
15
№ |
Предикат |
Действия |
|
№ |
|
|
|
|
перехода |
2 |
|
Инициализация целочисленной переменной |
i |
3 |
|
|
значением 0 |
|
|
|
|
|
|
|
3 |
i меньше размер вектор v |
|
|
4 |
|
|
|
|
|
|
|
|
|
|
4 |
Имя i-го объекта равно |
Вызов деструктора для объекта по i-му указателю |
6 |
|
|
имени текущего объекта |
вектор v |
|
|
|
|
|
|
|
|
|
|
|
5 |
|
|
|
|
|
5 |
|
Инкремент i |
|
6 |
|
|
|
|
|
6 |
|
Удаление i-го элемента вектора v |
|
|
3.4 Алгоритм метода get_object_by_path класса cl_base
Функционал: Получения указателя на любой объект в составе дерева иерархии объектов согласно пути (координаты).
Параметры: string path. Возвращаемое значение: cl_base*.
Алгоритм метода представлен в таблице 5.
Таблица 5 – Алгоритм метода get_object_by_path класса cl_base |
|
||||
|
|
|
|
|
|
|
№ |
Предикат |
|
Действия |
№ |
|
|
|
|
|
перехода |
|
1 |
path - пустая строка |
|
Возврат nullptr |
|
|
|
|
|
|
2 |
|
|
|
|
|
|
2 |
path == '.' |
|
Вернуть текущий объект |
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
3 |
Первый символ path равен '.' |
Вернуть результат вызов метода findObjOnBranch |
|
||
|
|
|
|
с параметром path, начиная со второго символа |
|
|
|
|
|
|
|
|
|
|
|
|
4 |
|
|
|
|
|
|
4 |
Первые два символа |
path |
Вернуть результат вызова метод findObjOnTree с |
|
|
|
|
равны "//" |
|
параметром path, начиная с третьего символа |
|
|
|
|
|
|
|
16
№ |
Предикат |
|
|
|
|
Действия |
|
|
№ |
|
|
|
|
|
|
|
|
|
|
|
перехода |
|
|
|
|
|
|
|
|
|
|
5 |
|
|
|
|
|
|
|
|
|||
5 |
Первые символа path |
|
не |
Инициализация |
знаковой |
целочисленной |
6 |
|||
|
равны '/' |
|
|
|
переменной slash_index позицией первого символа |
|
||||
|
|
|
|
|
'/' в строке path |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
|
|
|
|
|
|
|
|
|||
6 |
|
|
|
|
Инициализация указателя child_ptr на |
объект |
7 |
|||
|
|
|
|
|
класса |
cl_base |
результатом вызов |
метода |
|
|
|
|
|
|
|
get_child_by_name с параметром path, до первого |
|
||||
|
|
|
|
|
символа '/' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
7 |
child_ptr == nullptr или |
в |
Возврат child_ptr |
|
|
|
|
|||
|
строке path нет символа '/' |
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Вернуть |
результат |
вызова |
метода |
8 |
|
|
|
|
|
|
get_object_by_path объекта child_ptr с параметром |
|
||||
|
|
|
|
|
path, начиная после символа '/' |
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
8 |
|
|
|
|
Вернуть |
результат |
вызова |
метода |
|
|
|
|
|
|
|
get_object_by_path объекта child_ptr с параметром |
|
||||
|
|
|
|
|
path, начиная после символа '/' |
|
|
|
||
|
|
|
|
|
|
|
|
|||
9 |
|
|
|
|
Инициализация указателя root_ptr |
адресом |
10 |
|||
|
|
|
|
|
текущего объекта |
|
|
|
|
|
|
|
|
|
|
|
|
||||
10 |
Существует |
объект |
|
по |
Присваивание root_ptr значение головного объекта |
10 |
||||
|
указателю |
root_ptr |
есть |
по указателю root_ptr |
|
|
|
|||
|
родитель |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
|
|
|
|
|
|
|
|
|
|
|
11 |
path == "/" |
|
|
|
Возврат root_ptr |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
|
|
|
|
|
|
|
|
|
|
|
12 |
|
|
|
|
Вернуть |
результат |
вызова |
метода |
|
|
|
|
|
|
|
get_object_by_path объекта по указателю root_ptr с |
|
||||
|
|
|
|
|
параметром path,начиная со второго символа |
|
||||
|
|
|
|
|
|
|
|
|
|
|
17