Объектно-ориентированное проектирование с примерами


Архитектура информационной доски - часть 10


class DirectSubstitutionKnowledgeSource : public LetterKnowledgeSource ...


class VowelKnowledgeSource : public LetterKnowledgeSource ...


class ConsonantKnowledgeSource : public LetterKnowledgeSource ...


class LetterFrequencyKnowledgeSource : public LetterKnowledgeSource ...

Общее в источниках знаний. Анализ показал, что только две операции определены для всех упомянутых специализированных классов:

  • Reset - Перезапуск источника знаний.

  • evaluate - Определение состояния информационной доски.

Причина упрощения интерфейса - в относительной автономности знаний: мы указываем на интересующий объект информационной доски и даем источнику команду применить его правила, учитывая глобальное состояние доски. При выполнении правил каждый из источников знаний может осуществлять следующие действия:

  • Высказать предположение о подстановке.

  • Найти противоречие в ранее предложенных подстановках и откатить их.

  • Высказать утверждение о подстановке.

  • Сообщить контроллеру о своем желании записать на доску что-то интересное.

Все эти действия являются общими для всех источников знаний. Перечисленные операции образуют механизм вывода заключений. Определим механизм вывода (InferenceEngine) как объект, который выполняет известные правила для того, чтобы либо найти новые правила (прямая последовательность рассуждений), либо доказать некоторую гипотезу (обратная последовательность рассуждений). На основании сказанного введем следующий класс:

class InferenceEngine {


public:

InferenceEngine(<DynamicSet<Rules*>);

...


};

Конструктор класса создает экземпляр объекта и населяет его правилами. Лишь одна операция сделана в этом классе видимой для источников знании:

  • evaluate - Выполнить правило механизма вывода.

Теперь о том, как сотрудничают источники знаний: каждый специализированный источник определяет свои собственные правила и возлагает ответственность за их выполнение на класс InferenceEngine. Точнее, операция KnowledgeSource::evaluate вызывает метод InferenceEngine::evaluate, что приводит к выполнению одной из четырех упомянутых выше операций.


Начало  Назад  Вперед



Книжный магазин