Схема иерархии наследования классов.



 

Класс приложения cl_application
cl_application
cl_base
public

 

Класс объекта второго уровня cl_2
cl_2
cl_base
public

 

Класс третьего уровня cl_3
cl_3
cl_base
public

 

Класс простого объекта третьего уровня cl_p3
cl_p3
cl_base
public

 

Класс объекта четвертого уровня cl_4
cl_4
cl_base
public

 

Схема архитектуры программы.

 

ob_application (Приложение)
ob_1
ob_6
Ob_2
ob_4
ob_5
ob_7
ob_3
ob_8
ob_4
Вывод
Ввод
Внешняя среда

 

Схема взаимодействия объектов.

 

Схема алгоритма решения задачи

 

 

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

Код описания классов

Класс cl_base

 

 

#ifndef CL_BASE_H

#define CL_BASE_H

 

#include <iostream>

#include <string>

#include <vector>

 

using namespace std;

 

class cl_base

{

public:

cl_base ( cl_base * p_parent = 0 );

 

void set_object_name ( string object_name );

string get_object_name ( );

void set_parent ( cl_base * p_parent );

void add_child  ( cl_base * p_child );

void delete_child ( string object_name );

cl_base * get_child  ( string object_name );

cl_base * get_object ( string object_path );

void set_state  ( char c_state    );

char get_state  ( );

// cl_base * take_child ( char * object_name );

 

vector < cl_base * > children;  // ссылкинапотомков

vector < cl_base * > :: iterator it_child;

 

private:

string  object_name;       // наименованиеобъекта

cl_base * p_parent;          // ссылка на головной объект

char    c_state;           // состояние объекта

};

 

#endif // CL_BASE_H

 

#include "cl_base.h" cl_base :: cl_base ( cl_base * p_parent ){ //------------------------------------------------------------------------- // Конструктор //------------------------------------------------------------------------- set_object_name ( "cl_base" ); if ( p_parent ) {   this -> p_parent = p_parent;   p_parent -> add_child ( this ); }else { this ->p_parent = 0; }} void cl_base :: set_object_name ( string object_name ){ //------------------------------------------------------------------------- // Присвоитьимяобъекту //------------------------------------------------------------------------- this -> object_name = object_name;} string cl_base :: get_object_name ( ){ //------------------------------------------------------------------------- // Получитьимяобъекта; //------------------------------------------------------------------------- return object_name;} void cl_base :: set_parent ( cl_base * p_parent ){ //------------------------------------------------------------------------- // Определение ссылки на головной объект;//------------------------------------------------------------------------- if ( p_parent ) {   this -> p_parent = p_parent;   p_parent -> add_child ( this ); }} void cl_base :: add_child ( cl_base * p_child ){ //------------------------------------------------------------------------- // Добавление нового объекта в перечне объектов-потомков//------------------------------------------------------------------------- children.push_back ( p_child );} void cl_base :: delete_child ( string object_name ){ //------------------------------------------------------------------------- // Удаление объекта из перечня объектов-потомков//------------------------------------------------------------------------- if ( children.size ( ) == 0 ) return; it_child = children.begin ( ); while ( it_child != children.end ( ) ) {    if ( ( * it_child ) -> get_object_name ( ) == object_name ) {        children.erase ( it_child );       return;}   it_child ++; }} cl_base * cl_base :: get_child ( string object_name ){ //------------------------------------------------------------------------- // Получить ссылку на объект потомок по имени объекта//------------------------------------------------------------------------- if ( children.size ( ) == 0 ) return 0; it_child = children.begin ( ); while ( it_child != children.end ( ) ) {    if ( ( * it_child ) -> get_object_name ( ) == object_name ) {        return ( * it_child );   }   it_child ++; } return 0;} cl_base * cl_base :: get_object ( string object_path ){ } void cl_base :: set_state ( char c_state ){ //------------------------------------------------------------------------- // Определить состояние объекта //------------------------------------------------------------------------- this -> c_state = c_state;} char cl_base :: get_state ( ){ //------------------------------------------------------------------------- // Получить состояние объекта //------------------------------------------------------------------------- return c_state;}

 

Класс cl_application

 

#ifndef CL_APPLICATION_H

#define CL_APPLICATION_H

 

#include "cl_2.h"

#include "cl_3.h"

#include "cl_p3.h"

 

class cl_application : public cl_base

{

public:

cl_application ( );

 

void bild_tree_objects ( );

int exec_app     ( );

 

void show_object_state ( );

 

private:

void show_state_next ( cl_base * ob_parent );

 

cl_2 ob_1;

cl_2 ob_3;

cl_2 * p_ob_6;

cl_2 ob_7;

 

cl_3 ob_2;

cl_p3 ob_5;

cl_3 ob_8;

};

 

#endif // CL_APPLICATION_H

 

#include "cl_application.h" cl_application :: cl_application ( ){ set_object_name ( "root" ); set_state ( 1 );} void cl_application :: bild_tree_objects ( ){                                  // ----------- уровень 2 ob_1.set_object_name ( "ob_1" ); ob_1.set_parent ( this ); ob_3.set_object_name ( "ob_3" ); ob_3.set_parent ( this ); p_ob_6 = new cl_2 ( ( cl_base * ) this ); p_ob_6 -> set_object_name ( "ob_6" ); ob_7.set_object_name ( "ob_7" ); ob_7.set_parent ( this );                                   // ----------- уровень 3 ob_2.set_object_name ( "ob_2" ); ob_2.set_parent ( & ob_1 ); ob_5.set_object_name ( "ob_5" ); ob_5.set_parent ( & ob_3 ); ob_8.set_object_name ( "ob_8" ); ob_8.set_parent ( & ob_7 );} int cl_application :: exec_app ( ){ show_object_state ( ); return 0;} void cl_application :: show_object_state ( ){ show_state_next ( this );} void cl_application :: show_state_next ( cl_base * ob_parent ){ if ( ob_parent -> get_state ( ) == 1 ) {    cout << "The object " << ob_parent -> get_object_name ( ) << " is ready" << endl; } else {    cout << "The object " << ob_parent -> get_object_name ( ) << " is not ready" << endl; } if ( ob_parent -> children.size ( ) == 0 ) return; ob_parent -> it_child = ob_parent -> children.begin ( ); while ( ob_parent -> it_child != ob_parent -> children.end ( ) ) {    show_state_next ( ( * ( ob_parent -> it_child ) ) ); ob_parent -> it_child ++; }}

 

Класс cl_2

 

#ifndef CL_2_H

#define CL_2_H

 

#include "cl_3.h"

#include "cl_p3.h"

 

class cl_2 : public cl_base

{

public:

cl_2 ( cl_base * p_parent = 0 );

};

 

#endif // CL_2_H

 

#include "cl_2.h"

 

cl_2 :: cl_2 ( cl_base * p_parent )

: cl_base (      p_parent )

{

set_state ( 1 );

}

 

 

Класс cl_3

 

#ifndef CL_3_H

#define CL_3_H

 

#include "cl_4.h"

 

class cl_3 : public cl_base

{

public:

cl_3 ( );

 

private:

cl_4 ob_4;

};

 

#endif // CL_3_H

 

#include "cl_3.h"

 

cl_3 :: cl_3 ( )

{

ob_4.set_object_name ( "ob_4" );

ob_4.set_parent ( this );

 

set_state ( 1 );

}

 

Класс cl_p3

 

#ifndef CL_P3_H#define CL_P3_H #include "cl_base.h" class cl_p3 : public cl_base{public: cl_p3 ( );}; #endif // CL_P3_H

 

#include "cl_p3.h"

 

cl_p3 :: cl_p3 ( )

{

set_state ( 1 );

}

 

Класс cl_4

 

#ifndef CL_4_H#define CL_4_H #include "cl_base.h" class cl_4 : public cl_base{public: cl_4 ( );}; #endif // CL_4_H

 

 

#include "cl_4.h"

 

cl_4 :: cl_4 ( )

{

set_state ( 1 );

}

 

 

Код конструирования системы

 

Реализованвметоде bild_tree_objects ( ) классаcl_application.

 

Код взаимодействия объектов

 

Используется стандартный интерфейс вывода в консоль.

 

Код алгоритма решения задачи

 

Решение задачи опроса готовности объектов иерархии реализовановметодеshow_object_state ( ) классаcl_application.

Запуск системы осуществляется посредством основной функции

 

#include <iostream>

using namespace std;

 

#include "cl_application.h"

 

int main()

{

cl_application ob_application;

 

ob_application.bild_tree_objects ( );

 

return ob_application.exec_app ( );

}

 

 

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

Входные данные Выходные данные Результат и пояснение
1. Во всех конструкторах объектов задать set_state ( 1 ); Объект root готов к работе Объект ob_1 готов к работе Объект ob_2 готов к работе Объект ob_4 готов к работе Объект ob_3 готов к работе Объект ob_5 готов к работе Объект ob_6 готов к работе Объект ob_7 готов к работе Объект ob_8 готов к работе Объект ob_4 готов к работе Объект root готов к работе Объект ob_1 готов к работе Объект ob_2 готов к работе Объект ob_4 готов к работе Объект ob_3 готов к работе Объект ob_5 готов к работе Объект ob_6 готов к работе Объект ob_7 готов к работе Объект ob_8 готов к работе Объект ob_4 готов к работе
2. Вклассе cl_4 в конструкторе объекте задать set_state ( 0 ); Объект root готов к работе Объект ob_1 готов к работе Объект ob_2 готов к работе Объект ob_4не готов к работе Объект ob_3 готов к работе Объект ob_5 готов к работе Объект ob_6 готов к работе Объект ob_7 готов к работе Объект ob_8 готов к работе Объект ob_4не готов к работе Объект root готов к работе Объект ob_1 готов к работе Объект ob_2 готов к работе Объект ob_4не готов к работе Объект ob_3 готов к работе Объект ob_5 готов к работе Объект ob_6 готов к работе Объект ob_7 готов к работе Объект ob_8 готов к работе Объект ob_4не готов к работе
3.      
4.      

 

Инструкция для пользователя

 

Запустить программу стандартным способом согласно QtCreator.

 

 


Дата добавления: 2018-05-02; просмотров: 1031; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!