Форум программистов, компьютерный форум CyberForum.ru

Выполнение неопределенного количества методов - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Графическая интерпретация http://www.cyberforum.ru/cpp-beginners/thread164686.html
Помогите дать графическую интерпретацию списковой структуры: (a,(b),(c,(),d),e,(f))
C++ Вопрос по файлах в С++ Возник вопрос по файлах. Эсть масив float B={0}; заполнений елементами, необходимо значения перенести в файл, которий потом открить с помощю блокнота или екселя или графера и тд. создаю и заполняю масив: const AnsiString FILE_NAME_STR= "c:\\Temp\\1.txt"; int fff; fff= FileCreate(FILE_NAME_STR); http://www.cyberforum.ru/cpp-beginners/thread164682.html
странность массива C++
вот программа для замены символов все работает правильно, но только если я ввожу одно число, а если я ввожу два числа через пробел то под замену символов попадает только первое число... пиплс помогите, а? char a; int main() { system("chcp 1251"); cin>>a; for(int i=0;i<2048;i++) {
C++ Сколько может быть конструкторов в классе?
Только один или можно больше?
C++ Перегрузка операторов http://www.cyberforum.ru/cpp-beginners/thread164659.html
Привет всем.Вот и начался новый учебный год,и значит началось програмирование, и значит начались мои проблемы. Первой задачей было составить программу с класами которая находила бы сумму разность и произведение матриц N на M и M на K.Я это сделал. #include<iostream.h> #include<stdlib.h> const int max_n = 50; const int max_m = 50; const int max_k= 50; const int max_x= 50; const int max_y=...
C++ Метод Гаусса Добрый вечер, можете написать программу для решения СЛАУ методом гаусса на Си, чтобы был прямой и обратный ход. подробнее

Показать сообщение отдельно
fasked
Эксперт C++
 Аватар для fasked
4929 / 2509 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1

Выполнение неопределенного количества методов - C++

09.09.2010, 21:09. Просмотров 677. Ответов 14
Метки (Все метки)

Не знал как точнее сформулировать название темы, так что если слабо соответствует действительности, то прошу прощения

Собственно сама задачка.
Есть некоторая система (программа), которая при запуске должна запустить подсистему предварительного тестирования. Количество предварительных тестов в процессе развития самой системы соответственно увеличивается. Поэтому подсистему тестирования надо сделать как можно более гибкой и расширяемой. Организация работы подсистемы тестирования у меня и вызывает некоторые вопросы. Если для этого есть какое-то решение в виде паттерна, то прошу подкинуть мне название (ну можно и литературку сразу ).

На данный момент системе требуется только один предварительный тест, который осуществляется в проверке целостности компонент (файлов, необходимых для работы программы). Эту задачу я разбил на две подзадачи: проверка существования компоненты, как таковой и подсчет контрольной суммы для каждой компоненты.

Вкратце вот, что вышло (здесь привожу только скелет подсистемы, без конкретной реализации).
Написан
интерфейс для теста

C++
1
2
3
4
5
6
7
8
class Inspection
{
public:
    virtual ~Inspection() {
    }
    
    virtual bool Run() = 0; // перегруженный метод Run должен выполнять проверку и сигнализировать об успешности/неуспешности
};

Класс самой подсистемы
Наследуется от интерфейса проверки (отчасти в надежде на то, что некоторые тесты можно будет собирать в инспекторы и добавлять в инспектор верхнего уровня, а от части, что для системы могут понадобиться тесты по завершению работы)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class Inspector : public Inspection
{
public:
    // Деструктор
    ~Inspector() {
        while(!methods.empty()) {
            delete methods.front();
            methods.pop();
        }
    }
 
    // Добавление нового теста в список инспектора
    void AddMethod(Inspection *method) {
        methods.push(method);
    }
    
    // Опять же запуск всех методов из инспектора и сигнализирование об успешности
    bool Run() {      
        while(!methods.empty()) {
            if(!methods.front()->Run())
                return false;
            
            delete methods.front();
            methods.pop();
        }
 
        return true;
    }
    
private:
    std::queue<Inspection*> methods;
};

Теперь реализовывается
отдельный класс для каждой проверки

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class ExistInspection : public Inspection
{
    bool Run() {
        // Проверка на существование компонент системы
        return true;
    }
};
 
class ChecksumInspection : public Inspection
{
    bool Run() {
        // Проверка контрольных сумм компонент системы
        return true;
    }
};


Осталось только все это использовать
следующим образом

C++
1
2
3
4
5
6
7
Inspector PrestartInspector;
PrestartInspector.AddMethod(new ExistInspection);
PrestartInspector.AddMethod(new ChecksumInspection);
 
if(!PrestartInspector.Run()) {
    // Проверка не пройдена
}


Такое решение мне конечно самому в целом вполне нравится
Но как говорится нет предела совершенству, а перелопачивать абсолютно все паттерны в поиске необходимого боюсь не хватит времени.
Повторюсь с вопросом, может кто-то может подсказать мне или решение или паттерн описывающий решение (... или улучшить/покритиковать чтобы знать, что следует ожидать от того, что я попробовал написать)?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 01:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru