Образовательный портал Claw.ru
Всё для учебы, работы и отдыха
» Шпаргалки, рефераты, курсовые
» Сочинения и изложения
» Конспекты и лекции
» Энциклопедии

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

SFiniteStateMachine(

                     const SState &   StartState,

                     SStatesListProxy( <список состояний> ),

                     STransitionsProxy( <список переходов для события 1> ),

                     STransitionsProxy( <список переходов для события 2> ),

                     . . .

                   );

Рассмотрим список состояний. Здесь остается та же проблема – неопределенное количество состояний. Помочь в ее решении может перегрузка операторов и конструктор по умолчанию. Перечислить аргументы через запятую все равно не удалось бы, но вместо запятой подошел бы и другой разделитель. Таким разделителем может быть <<, то есть обработку списка состояний можно записать так:

SStatesListProxy() << “empty” << “number” << “identifier” << “unknown”

Перегруженный operator<< для SStatesListProxy проверит, что среди состояний нет повторяющихся, а кроме того обеспечит типобезопасность для состояний. Переменное количество состояний при такой записи тоже не проблема. Конструктор для SFiniteStateMachine теперь можно записать так:

SFiniteStateMachine( const SState &   StartState,

       (SStatesListProxy() << “empty” << “number” << “identifier” << “unknown”),

        STransitionsProxy( <список переходов для события 1> )

        STransitionsProxy( <список переходов для события 2> ),

                     . . .

                   );

Аналогичным образом поступим со списком переходов для одного события. Отличие будет лишь в том, что каждый список переходов имеет еще один атрибут – событие, для которого описываются переходы. Конструктор STransitionsProxy будет принимать один аргумент: событие, а перегруженный operator<< будет принимать состояния.

STransitionsProxy( letter ) << “identifier” << “unknown” << “identifier” << “unknown”

Вернемся к конструктору автомата. У него тоже есть список переменной длины – строки таблицы описания переходов или STransitionsProxy. Решим эту задачу уже известным способом: создание временного объекта и перегрузка operator<< для SStatesListProxy и STransitionsProxy.


Рекомендуем скачать другие рефераты по теме: налоги и налогообложение, конспект по русскому.


Категории:




Предыдущая страница реферата | 1  2  3  4  5  6  7  8  9  10  11 |


Поделитесь этой записью или добавьте в закладки

   



Рефераты от А до Я


Полезные заметки

  •