Вторая операция устанавливает зависимость между
Вторая операция устанавливает зависимость между доской и источником знании. На рис. 11-3 приведена итоговая диаграмма классов, связанных с
Blackboard. Она в первую очередь отражает отношения наследования. Отношения использования (например, между
Assumption и информационной доской) для простоты опушены.
Рис. 11-3. Диаграмма классов информационной доски.
Обратите внимание на то, что класс
Blackboard одновременно и инстанцирует от шаблона Dynamic
Collection, и наследует от него. Кроме того, становится понятным использование класса
Dependent в качестве примеси. Не привязывая этот класс жестко к иерархии
Blackboard, мы повышаем шансы на его последующее повторное использование.
Проектирование источников знаний
В предыдущем разделе мы выделили тринадцать источников знаний, относящихся к решаемой задаче. Теперь можно приступить к проектированию структур классов для них (как это было сделано для информационной доски) и обобщению их в более абстрактные классы.
Проектирование специализированных источников знаний. Предположим, что существует абстрактный класс
KnowledgeSource (по аналогии с классом
BlackboardObject). Прежде чем определять все тринадцать источников в качестве подклассов одного общего суперкласса, нужно посмотреть, не группируются ли они каким-нибудь образом. Действительно, такие группы находятся: некоторые источники знаний оперируют целым предложением, другие - словами, фрагментами слов или отдельными буквами. Отразим этот факт в следующих определениях:
class SentenceKnowledgeSource : public KnowledgeSource ...class WordKnowledgeSource : public KnowledgeSource ...class LetterKnowledgeSource : public KnowledgeSource ...
Для каждого из этих абстрактных классов в дальнейшем мы определим специализированные подклассы. Для класса
SentenceKnowledgeSource они будут выглядеть следующим образом:
class SentenceStructureKnowledgeSource : public SentenceKnowledgeSource ...class SolvedKnowledgeSource : public SentenceKnowledgeSource ...
Аналогично, подклассы класса
WordKnowledgeSource определяются так:
Содержание Назад Вперед