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



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


reset - Перезапуск контроллера.

addHint - Добавить высказывание от источника знаний.

removeHint - Удалить высказывание от источника знаний.

processNextHint - Разрешить выполнение следующего по приоритету высказывания.

isSolved - Селектор. Истина, если задача решена.

UnableToProceed - Селектор. Истина, если источники знаний застряли.

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

Все эти решения можно описать следующим образом:

class Controller {


public:


...

void reset();


void connect(Knowledgesource&);


void addHint(KnowledgeSource&);


void removeHint(KnowledgeSource&);


void processNextHint();


int isSolved() const;


int unableToProceed() const;

};

Контроллер в некотором смысле управляется источниками знаний, поэтому для описания его поведения наилучшим образом подходит схема конечного автомата.

Рассмотрим диаграмму состояний и переходов на рис. 11-6. Из нее видно, что контроллер может находиться в одном из пяти основных состояний: инициализация (Initializing), выбор (Selecting), вычисление (Evaluating), тупик (Stuck) и решение (Solved). Наибольший интерес для нас представляет поведение контроллера при переходе от выбора к вычислению. В состоянии selecting контроллер переходит от создания стратегии (CreatingStrategy) к вычислению высказывания (ProcessingHint) и, в конце концов, выбирает источник знаний (SelectingKS).
 

Рис. 11-6. Контроллер как конечный автомат.

Дав одному из источников возможность высказаться, контроллер переходит в состояние Evaluating, где прежде всего изменяет состояние информационной доски. Это вызывает переход в состояние Connecting при добавлении источника знании или к Backtracking, если предположение не оправдалось и надо откатить его, оповестив при этом все зависимые источники знаний.

Конечной точкой работы нашего механизма является solved (задача решена) или stuck (тупиковая ситуация).

11.3. Эволюция




Содержание  Назад  Вперед