Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа ООП 2021.docx
Скачиваний:
4
Добавлен:
30.07.2024
Размер:
513.81 Кб
Скачать

Метод решения

В решении задачи были использованы:

  1. Операторы:

    1. Условный оператор if

    2. Операторы цикла с предусловием while и for

  2. Объекты:

    1. Объект ввода cin

    2. Объект вывода cout

    3. Объект ob_app класса app - объект-приложение

    4. Объекты SampleClass1, SampleClass2 (имена и количество задаются пользователем)

  3. Класс Base

  1. Свойства:

    1. string name - имя объекта, protected

    2. Base* parent - указатель на головной объект, private

    3. vector children - список детей, public

  2. Методы:

    1. Base (Base*, string name) - конструктор класса, определяющий имя и головной объект

    2. void vertical_print (int depth) - вывод иерархии

    3. Base* find (string name) - поиск объекта в иерархии

  1. Класс App

  1. Свойства: -

  2. Методы:

  1. App (Base* parent) - конструктор класса

  2. void Build_tree_objects() - заполнение иерархии

  3. int exec_app() - запуск приложения

5. Класс SampleClass1

  1. Свойства: -

  2. Методы:

1. SampleMetod1(Base* parent, std::string name) - пустой конструктор класса

6. Класс SampleClass2

  1. Свойства: -

  2. Методы:

1. SampleMetod2(Base* parent, std::string name) - пустой конструктор класса

Иерархия наследования отображена в таблице 1.

Таблица 1. «Описание иерархии наследования классов»

Имя класса

Классы-наследники

Модификатор доступа при наследовании

Описание

Номер

Комментарии

1

Base

Базовый класс. Содержит основные поля и методы.

App

public

2

SampleClass1

public

3

SampleClass2

public

4

2

App

Класс приложения (необходим для запуска и работы программы)

3

SampleClass1

Дочерний класс, подчиненный классу Base

Класс с функционалом вывода нформации

4

SampleClass2

Дочерний класс, подчиненный классу Base

Класс с функционалом вывода информации

Описание алгоритма

Согласно этапам разработки, после определения необходимого инструментария в разделе «Метод», составляются подробные описания алгоритмов для методов классов и функций.

Функция: main

Функционал: Точка входа в программу Параметры: нет

Возвращаемое значение: int (ошибка) Алгоритм функции представлен в таблице 2. Таблица 2. Алгоритм функции main

Предикат

Действия

  • перехода

Комментарий

1

Создаём объект ob_app класса app с параметорм nullptr

2

2

Вызываем метод Build_tree_objects для объекта ob_app

3

3

Вызываем метод exec_app для объекта ob_app

Ø

Класс объекта: App Модификатор доступа: public Метод: exec_app Функционал: Вывод иерархии

Параметры: нет

Возвращаемое значение: void

Алгоритм метода представлен в таблице 3. Таблица 3. Алгоритм метода exec_app класса App

Предикат

Действия

  • перехода

Комментарий

1

Создаём переменную i и инициализируем её нулём

2

2

Выводим this name

3

3

Результат выполнения метода horizontal_print с параметрами i, i!=1 равен true

i увеличиваем на единицу

3

Возвращаем ноль

Ø

Класс объекта: App

Модификатор доступа: public

Метод: Build_tree_objects

Функционал: Заполнение иерархии

Параметры: нет

Возвращаемое значение: void

Алгоритм метода представлен в таблице 4.

Таблица 4. Алгоритм метода Build_tree_objects класса App

Предикат

Действия

  • перехода

Комментарий

1

Объявляем строковый rootname

2

2

Ввод значения rootname

3

3

this name присваиваем значение name

4

4

Создаём объект root класса Base с параметрами this и rootname

5

5

Объявляем целочисленную i и инициализируем нулём

6

6

Объявляем строковые parent и child

7

7

Увеличиваем i на единицу

8

8

Вводим parent и child

9

9

parent не равен child и i нечётное

Создаём объект temp класса SampleClass1 с параметрами Find(parent) и child

11

10

10

parent не равен child и i чётное

Создаём объект temp класса SampleClass2 с параметрами Find(parent), child

11

11

11

parent не равен child

7

Ø

Класс объекта: Base

Модификатор доступа: public

Метод: Base

Функционал: Конструктор класса

Параметры: Base* parent (указатель на род. объект), string name (имя объекта) Возвращаемое значение: void

Алгоритм метода представлен в таблице 5. Таблица 5. Алгоритм метода Base класса Base

Предикат

Действия

  • перехода

Комментарий

1

this parent присваиваем значение parent

2

2

this name присваиваем значение name

3

3

this children присваиваем значение vector<Base*>

4

4

this parent не равно nullptr

Вызываем метод push_back для вектора children с параметром this parent

Ø

Ø

Класс объекта: Base

Модификатор доступа: public

Метод: horizontal_print

Функционал: Вывод иерархии

Параметры: int depth (тек. глубина), bool nextline(крит. переноса строки) Возвращаемое значение: bool

Алгоритм метода представлен в таблице 6.

Таблица 6. Алгоритм метода horizontal_print класса Base

Предикат

Действия

  • перехода

Комментарий

1

depth равна нулю и children.size больше нуля

2

7

2

nextline равно нулю

Выводим endl

3

3

3

Выводим name

4

4

Объявляем целочисленную i и инициализируем нулём

5

5

i меньше children.size

Выводим name для children[i]

6

6

Возвращаем true

Ø

i увеличиваем на единицу

5

7

depth равна нулю и children.size равно нулю

Возвращем false

Ø

8

8

Объявляем логическую res и инициализируем её ложью

9

9

Объявляем целочисленную i и инициализируем её нулём

10

10

i меньше children.size

11

13

11

При выполнении метода horizontal_print с параметрами depth- 1, nextline для children[i] получаем истину

res присваиваем значение истины

12

12

12

Увеличиваем i на единицу

10

13

Возвращаем res

Ø

Класс объекта: Base

Модификатор доступа: public

Метод: Find

Функционал: Поиск объекта в иерархии

Параметры: string name (имя искомого объекта) Возвращаемое значение: Base* (указатель на искомый объект) Алгоритм метода представлен в таблице 7.

Таблица 7. Алгоритм метода Find класса Base

Предикат

Действия

  • перехода

Комментарий

1

this name равно name

Возвращаем this

Ø

2

2

Объявляем целочисленную i и инициализируем нулём

3

3

i меньше children.size

Объявляем указатель buff и инициализируем результатом выполнения метода Find с параметром name для children[i]

4

6

4

buff не равно nullptr

Возвращаем buff

Ø

5

5

Увеличиваем i на единицу

3

6

Возвращаем nullptr

Ø