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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Графическая интерпретация http://www.cyberforum.ru/cpp-beginners/thread164686.html
Помогите дать графическую интерпретацию списковой структуры: (a,(b),(c,(),d),e,(f))
C++ Вопрос по файлах в С++ Возник вопрос по файлах. Эсть масив float B={0}; заполнений елементами, необходимо значения перенести в файл, которий потом открить с помощю блокнота или екселя или графера и тд. создаю и... http://www.cyberforum.ru/cpp-beginners/thread164682.html
странность массива C++
вот программа для замены символов все работает правильно, но только если я ввожу одно число, а если я ввожу два числа через пробел то под замену символов попадает только первое число... пиплс...
C++ Сколько может быть конструкторов в классе?
Только один или можно больше?
C++ Перегрузка операторов http://www.cyberforum.ru/cpp-beginners/thread164659.html
Привет всем.Вот и начался новый учебный год,и значит началось програмирование, и значит начались мои проблемы. Первой задачей было составить программу с класами которая находила бы сумму разность и...
C++ Метод Гаусса Добрый вечер, можете написать программу для решения СЛАУ методом гаусса на Си, чтобы был прямой и обратный ход. подробнее

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

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

09.09.2010, 21:09. Просмотров 695. Ответов 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()) {
    // Проверка не пройдена
}


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