用户指南:
第一章: 索引:
让我们从C++模板元编程书籍中的一个例子开始吧:
class player : public state_machine<player>
{
// The list of FSM states enum states { Empty, Open, Stopped, Playing, Paused , initial_state = Empty };
// transition actions void start_playback(play const&) { std::cout << "player::start_playback/n"; }
void open_drawer(open_close const&) { std::cout << "player::open_drawer/n"; }
void close_drawer(open_close const&) { std::cout << "player::close_drawer/n"; }
void store_cd_info(cd_detected const&) { std::cout << "player::store_cd_info/n"; }
void stop_playback(stop const&) { std::cout << "player::stop_playback/n"; }
void pause_playback(pause const&) { std::cout << "player::pause_playback/n"; }
void resume_playback(play const&) { std::cout << "player::resume_playback/n"; }
void stop_and_open(open_close const&) { std::cout << "player::stop_and_open/n"; }
friend class state_machine<player>;
typedef player p; // makes transition table cleaner
// Transition table
struct transition_table : mpl::vector11<
row < Stopped , play , Playing , &p::start_playback >,
row < Stopped , open_close , Open , &p::open_drawer >,
row < Open , open_close , Empty , &p::close_drawer >,
row < Empty , open_close , Open , &p::open_drawer >,
row < Empty , cd_detected , Stopped , &p::store_cd_info >,
row < Playing , stop , Stopped , &p::stop_playback >,
row < Playing , pause , Paused , &p::pause_playback >,
row < Playing , open_close , Open , &p::stop_and_open >,
row < Paused , play , Playing , &p::resume_playback >,
row < Paused , stop , Stopped , &p::stop_playback >,
row < Paused , open_close , Open , &p::stop_and_open >
> {};
// Replaces the default no-transition response.
template <class Event> int no_transition(int state, Event const& e) { std::cout << "no transition from state " << state << " on event " << typeid(e).name() << std::endl; return state; } };
void test() { player p; p.process_event(open_close());
}
找个例子是很好的说明了我们为什么使用MSM,作为一门表述性语言如果采用上述的语法可能会让人诟病。虽然找个例子尽可能多的展示了UML2.0的特性,不过MSM经过取舍提供了很多有用的定义方法。
第二章: UML的基础知识
1 什么是状态机?
状态机是事物生命线的描述,描述了事物生命线不同阶段的行为,使用事件的概念来表述。表述了一个特定阶段一个特定的事件触发将会做什么。状态机是事物动态行为的完整描述。