Главная страница
Навигация по странице:

  • Предикат Действия № перехода Комментарий

  • Описание выходных данных


    Скачать 183.74 Kb.
    НазваниеОписание выходных данных
    Дата03.06.2022
    Размер183.74 Kb.
    Формат файлаdocx
    Имя файлаKL_3_2.docx
    ТипДокументы
    #567533

    Описание выходных данных




    Вывести иерархию объектов в следующем виде:

    Object tree

    «Наименование корневого объекта»

    «Наименование объекта

    «Наименование объекта

    «Наименование объекта

    . . . . .
    Отступ каждого уровня иерархии 4 позиции.

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



    Изменения в классе Base:


    • Добавлен новый метод print3 с целочисленным параметром space - выводит иерархическое древо


    Изменения в класее Application:


    • Изменение метода build - строит древо иерархии объектов

    • Изменение метода start - запуск приложения с другим методом вывода

    Добавлен класс Object5: Методы:


    • Конструктор с параметрами - указатель на головной объект (parent), объекта (name)

    Добавлен класс Object6 Методы:


    • Конструктор с параметрами - указатель на головной объект (parent), объекта (name)






    Имя класса

    Класс

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

    Описание







    наследника

    наследовании




    1

    Base







    Базовый класс в иерархии классов

    Application

    public




    Object2

    public




    Object3

    public




    Object4

    public




    Object5

    public




    Object6

    public




    2

    Application







    Класс корневого объекта

    3

    Object2







    Класс подчиненный корневому классу Base

    4

    Object3







    Класс подчиненный корневому классу Base

    5

    Object4







    Класс подчиненный корневому классу Base

    6

    Object5







    Класс подчиненный корневому классу Base

    7

    Object6







    Класс подчиненный корневому классу Base



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



    Класс объекта: Base Модификатор доступа: public Метод: print3

    Функционал: выводит иерархическое древо Параметры: int space - количество пробелов Возвращаемое значение: -



    Предикат

    Действия

    перехода

    Комментарий


    1

    parent = 0

    Вывод name Добавить к space 4

    2










    2




    2




    Инициализация i со значением 0

    3





    3

    i меньше кол-ва элементов subses

    Инициализация строковой переменной str со значением ""

    4















    4




    Инициализация i со значением 0

    5





    5

    i меньше space

    Добавление к str знака пробел Увеличение i на 1

    5







    Вывод с новой строки str и имя i-го элемента вектора subses

    Вызов метода print3 с параметром space для i-го элемента вектора subses

    Увеличение i на 1



    3




    Класс объекта: Application Модификатор доступа: public Метод: build

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

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



    Предикат

    Действия

    перехода

    Комментарий


    1




    Объявление переменных строкового типа

    name, children, parent Объвление указателя temp Объявление целочисленных переменных

    status, num

    Вызов метода setName с параметром name


    2





    2




    Ввод переменных parent, children, num,

    status

    temp присвоить findBase(parent)


    3




    3

    num равно 2

    Инициализация переменной tempchildren класса Object2 с параметрами temp и children

    Вызов метода getStatus с параметром

    4










    status









    num равно 3

    Инициализация переменной tempchildren класса Object3 с параметрами temp и children

    Вызов метода getStatus с параметром status



    4






    num равно 4

    Инициализация переменной tempchildren класса Object4 с параметрами temp и children

    Вызов метода getStatus с параметром status



    4






    num равно 5

    Инициализация переменной tempchildren класса Object5 с параметрами temp и children

    Вызов метода getStatus с параметром status



    4






    num равно 6

    Инициализация переменной tempchildren класса Object6 с параметрами temp и children

    Вызов метода getStatus с параметром status



    4










    4





    4

    parent не равно "endtree"




    2















    Класс объекта: Aplication Модификатор доступа: public Метод: start

    Функционал: запуск приложения Параметры: -

    Возвращаемое значение: int - код возврата



    Предикат

    Действия

    перехода

    Комментарий


    1




    Вывод "Object tree" и пропуск строки Вызов метода print3 с параметром 0 Возврат нуля







    Класс объекта: Object5 Модификатор доступа: public Метод: Object5

    Функционал: конструктор
    Параметры: parent - указатель на головной объект класса Base, string name - наименование объекта
    Возвращаемое значение: конструктор




    Предикат

    Действия

    перехода

    Комментарий

    1




    Вызов констркутора класса Base с параметром parent и name






    Класс объекта: Object6 Модификатор доступа: public Метод: Object6

    Функционал: конструктор
    Параметры: parent - указатель на головной объект класса Base, string name - наименование объекта
    Возвращаемое значение: конструктор




    Предикат

    Действия

    перехода

    Комментарий

    1




    Вызов констркутора класса Base с параметром parent и name







    Блок-схема алгоритма






    Код программы

    Файл Application.cpp




    #include "Application.h" #include "Children.h" #include "Object2.h" #include "Object3.h" #include "Object4.h" #include "Object5.h" #include "Object6.h" #include

    Application::Application(Base *parent) : Base (parent, "root") {

    //string needName;

    //cin>>needName;

    //root = new Base(parent, needName, 1);

    }

    void Application::build() {

    string parent, name, children; int status, num;

    Base* temp; cin >> name; setName(name); do {

    cin >> parent >> children >> num >> status; temp = findBase(parent);

    switch(num) {



    tempChildren = new Object2(temp,children);
    >getStatus(status);


    tempChildren = new Object3(temp,children);
    >getStatus(status);


    tempChildren = new Object4(temp,children);
    >getStatus(status);


    tempChildren = new Object5(temp,children);
    >getStatus(status);


    tempChildren = new Object6(temp,children);

    case 2: {

    }

    case 3: {

    }

    case 4: {

    }

    case 5: {

    }

    case 6: {
    Object2* tempChildren- break;
    Object3* tempChildren- break;
    Object4* tempChildren- break;
    Object5* tempChildren- break;
    Object6*


    >getStatus(status);

    }

    tempChildren-
    break;

    }

    } while (parent != "endtree");

    }

    int Application::start() {

    cout<<"Object tree\n"; print3(0);

    return 0;

    }

    Файл Application.h



    #ifndef Application_h #define Application_h #include "Base.h" #include "Children.h"
    class Application : public Base {

    private:

    };

    #endif
    public:

    Base *root;
    Application(Base *parent); void build();

    int start();

    Файл Base.cpp




    #include "Base.h" #include #include

    Base::Base(Base *parent, string name) {

    this->name = name; this->parent = parent; this->status = 1;
    if(parent != nullptr) {

    parent->subses.push_back(this);


    }

    Base::Base() {

    }

    for (int i=0; i< subses.size(); i++) {

    delete subses[i];

    }

    }

    void Base::setName(string name) {

    this->name = name;

    }

    string Base::getName() {

    return name;

    }

    void Base::print2() {

    if(this->status > 0) {

    cout << "\nThe object " << name << " is

    ready";

    ready";
    } else {

    }

    cout << "\nThe object " << name << " is not

    for(int i = 0; i < subses.size(); i++) {

    subses[i]->print2();

    }

    }

    void Base::print3(int space) {

    if (parent == 0) {

    cout << name; space += 4;

    }

    for (int i = 0; i < subses.size(); i++) {

    string str = "";

    for (int i = 0; i < space; i++) {

    str+=" ";

    }

    cout << endl << str << subses[i]->name; subses[i]->print3(space+4);

    }

    }

    void Base::printSubses() {

    if(subses.size() == 0) return; cout<
    for(int i = 0; i < subses.size(); i++) {

    cout<<" "<getName();

    }

    for(int i = 0; i < subses.size(); i++) {

    if(subses[i]->subses.size() > 0) {

    subses[i]->printSubses();

    }

    }

    }

    void Base::setParent(Base *p_parent) {

    for(int i = 0; i < parent->subses.size(); i++) {

    if(this == parent->subses[i]) {

    parent->subses.erase(parent-

    >subses.begin() + 1);
    }

    }
    break;


    this->parent = p_parent;

    p_parent->subses.push_back(this);

    }

    Base *Base::getParent() {

    return parent;

    }

    Base *Base::findBase(string name) {

    if(this->name==name) {

    return this;

    }

    Base *finded = nullptr;

    for(int i = 0; i < subses.size(); i++) {

    finded = subses[i]->findBase(name); if(finded != nullptr) {

    return finded;

    }

    }

    return nullptr;

    }

    void Base::getStatus(int status) {

    this->status = status;

    }

    Файл Base.h



    #ifndef _BASE_H #define _BASE_H #include #include using namespace std; class Base {


    };

    #endif

    public:

    private:
    Base(Base *parent, string name);

    Base();

    void setName(string name); string getName();

    void print2();

    void print3(int space); void printSubses();

    void setParent(Base *parent); Base *getParent();

    Base *findBase(string name); void getStatus(int status);
    string name; Base *parent; int status;

    vector *> subses;

    Файл Children.cpp




    #include "Children.h"

    Children::Children(Base *parent, string name) : Base (parent, name) {}

    Файл Children.h



    #ifndef Children_h #define Children_h #include "Base.h"

    class Children : public Base {

    private:

    public:

    Children(Base *parent, string name);

    };

    #endif

    Файл main.cpp




    #include #include "Application.h" using namespace std;

    int main() {

    Application application(nullptr); application.build();

    return application.start();

    }

    Файл Object2.cpp




    #include "Object2.h"

    Object2::Object2(Base *parent, string name) : Base (parent, name) {}

    Файл Object2.h



    #ifndef Object2_h #define Object2_h #include "Base.h"

    class Object2 : public Base {

    private:

    public:

    Object2(Base *parent, string name);

    };

    #endif

    Файл Object3.cpp




    #include "Object3.h"

    Object3::Object3(Base *parent, string name) : Base (parent, name) {}

    Файл Object3.h



    #ifndef Object3_h #define Object3_h #include "Base.h"

    class Object3 : public Base {

    private:

    public:

    Object3(Base *parent, string name);

    };

    #endif

    Файл Object4.cpp




    #include "Object4.h"

    Object4::Object4(Base *parent, string name) : Base (parent, name) {}

    Файл Object4.h




    #ifndef Object4_h #define Object4_h #include "Base.h"

    class Object4 : public Base { private:

    public:

    Object4(Base *parent, string name);

    };

    #endif

    Файл Object5.cpp




    #include "Object5.h"

    Object5::Object5(Base *parent, string name) : Base (parent, name) {}

    Файл Object5.h



    #ifndef Object5_h #define Object5_h #include "Base.h"

    class Object5 : public Base {

    private:

    public:

    Object5(Base *parent, string name);

    };

    #endif

    Файл Object6.cpp




    #include "Object6.h"

    Object6::Object6(Base *parent, string name) : Base (parent, name) {}

    Файл Object6.h



    #ifndef Object6_h #define Object6_h #include "Base.h"

    class Object6 : public Base { private:

    public:

    Object6(Base *parent, string name);

    };

    #endif

    Тестирование



    Входные данные

    Ожидаемые выходные данные

    Фактические выходные данные


    app_root app_root object_1 3 1 endtree


    Object tree app_root object_1


    Object tree app_root object_1


    app_root app_root object_1 2 1

    app_root object_1 3 1 endtree


    Object tree app_root object_1 object_1


    Object tree app_root object_1 object_1

    Заключение



    Научился:


    • разрабатывать базовый класс для объектов;

    • определять общий функционал для используемых в рамках приложения объектов;

    • разрабатывать операции добавления, удаления, изменения позиции объекта в рамках иерархического дерева;

    • освоил алгоритмы обработки структур данных в виде дерева;

    • построению дерева иерархии объектов;

    • переключению состояния объектов и определению их готовности к работе;

    • выводить на печать иерархию объектов.

    Список используемой литературы (источников)




    1. Васильев А.Н. Объектно-ориентированное программирование на С++. Издательство: Наука и Техника. Санкт-Петербург, 2016г. 543 стр.




    1. Шилдт Г. С++: базовый курс. 3-е изд. Пер. с англ.. — М.: Вильямс, 2017. 624 с.




    1. Методическое пособие для проведения практических заданий, контрольных и курсовых работ по дисциплине «Объектно-ориентированное программирование» [Электронный ресурс] – URL: https://online-edu.mirea.ru/mod/resource/view.php?id=247030 (дата обращения 05.05.2021).




    1. Приложение к методическому пособию студента по выполнению заданий в рамках курса «Объектно-ориентированное программирование» [Электронный ресурс]. АСО

    «Аврора».


    1. Видео лекции по курсу «Объектно-ориентированное программирование» [Электронный ресурс]. АСО «Аврора».




    1. Антик М.И. Дискретная математика [Электронный ресурс]: Учебное пособие /Антик М.И., Казанцева Л.В. М.: МИРЭА Российский технологический университет, 2018 1 электрон. опт. диск (CD-ROM).







    написать администратору сайта