Схема иерархии наследования классов.
Класс приложения 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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!