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



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


class KnowledgeSources : public DynamicCollection<KnowledgeSource*>

...

Одно из свойств этого класса состоит в том, что при создании его экземпляра создаются также 13 специализированных источников знаний. Для объектов этого класса определяются три операции:

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

    StartKnowledgeSource - Задать начальные условия для источника знаний.

    connect - Связать источник знаний с доской или контроллером.

     

    Рис. 11-5. Диаграмма классов источников знаний.

    На рис. 11-5 показана структура созданных в процессе проектирования классов источников знаний.

    Проектирование контроллера

    Рассмотрим более подробно взаимодействие контроллера с отдельными источниками знаний. В процессе поэтапной расшифровки криптограммы отдельные источники знаний выявляют полезную информацию и сообщают ее контроллеру. С другой стороны, может быть обнаружено, что ранее переданная информация оказалась ложной и ее надо устранить. Поскольку все источники знаний имеют равные права, контроллер должен опросить их все, выбрать тот, информация которого кажется наиболее полезной, и разрешить ему внести изменения вызовом его операции evaluate.

    Каким образом контроллер определяет, какой из источников знаний следует активизировать? Можно предложить несколько разумных правил:

      Утверждение более приоритетно чем предположение.

      Если кто-то говорит, что решил всю фразу, надо дать ему возможность высказаться.

      Проверка по шаблону более приоритетна, чем источник, анализирующий структуру предложения.

      Контроллер действует в качестве агента, ответственного за взаимодействие источников знаний.

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

      После изолированного анализа класса мы предлагаем ввести для класса controller следующие операции: