UML状态图【代码例子】电梯在楼里…

来源:互联网 发布:我的世界透视矿物js 编辑:程序博客网 时间:2024/05/01 04:24
状态图中的基本元素——状态State:
UML状态图【代码例子】电梯在楼里、发货订单 <wbr>State <wbr>Machine <wbr>Diagram
状态图举例:
UML状态图【代码例子】电梯在楼里、发货订单 <wbr>State <wbr>Machine <wbr>Diagram
  最左边的黑圆圈是起始点。之后分别用箭头表示不同的电梯状态。
  在每个“State Name”状态名字(如: 1stfloor、go up、2nd floor等)下面,都有一条实线将下面的元素(如1st floor中的CurrentFloor=1)划区域区分开来。下面的元素显示的名称一般叫“Action”,在Cameo EnterpriseArchitecture软件里是内部过渡(internaltransitions,或叫“内部转换”)属性里的信号(Signal)。注释中列出了其它属性及其关系。
  下面给个状态图和代码的例子(Java代码,version8已经通过编译):

UML状态图【代码例子】电梯在楼里、发货订单 <wbr>State <wbr>Machine <wbr>Diagram

  当使用代码来表示状态图的时候,我们可以看到样例代码用enum定义了不同的状态(New“新建订单”、Packed“包装”、Dispatched“派遣”或“发送”、Delivered“分发”、Closed“关闭”),然后定义了各种方法来转换不通的状态,以下java(jdk8)代码如下:
————————————————————————————————————————————
public class NewClass {

    private enumStateType{
       ProcessOrder_Delivered,
       ProcessOrder_Packed,
       ProcessOrder_Closed,
       ProcessOrder_Dispatched,
       ProcessOrder_New,
       ST_NOSTATE
    }
    private enumTransitionType{
      ProcessOrder_Delivered_to_ProcessOrder_Closed,
        TT_NOTRANSITION
    }
    private enum CommandType{
       Do,
       Entry,
       Exit,
       Packed,
       Dispatched,
       New,
       Delivered,
       closed
    }
    private StateTypecurrState;
    private StateTypenextState;
    private TransitionTypecurrTransition;
    private booleantranscend;
    private StateTypeProcessOrder_history;
    
    private voidprocessOrder_Delivered(CommandType command) {
       switch (command) {
           case Do:{
              // Do Behaviors..
             setStatus(CommandType.Delivered);
              // State's Transitions
              if ((currState ==StateType.ProcessOrder_Delivered)) {
                 nextState = StateType.ProcessOrder_Closed;
                 currTransition =TransitionType.ProcessOrder_Delivered_to_ProcessOrder_Closed;
              }
              break;
           }
           default:{
              break;
           }
       }
    }

    private voidprocessOrder_Packed(CommandType command) {
       switch (command) {
           case Do:{
              // Do Behaviors..
             setStatus(CommandType.Packed);
              // State's Transitions
              nextState =StateType.ProcessOrder_Dispatched;
              break;
           }
           default:{
              break;
           }
       }
    }

    private voidprocessOrder_Closed(CommandType command) {
       switch (command) {
           case Do:{
              // Do Behaviors..
              // State's Transitions
              break;
           }
           default:{
              break;
           }
       }
    }

    private voidprocessOrder_Dispatched(CommandType command) {
       switch (command) {
           case Do:{
              // Do Behaviors..
             setStatus(CommandType.Dispatched);
              // State's Transitions
              nextState =StateType.ProcessOrder_Delivered;
              break;
           }
           default:{
              break;
           }
       }
    }

    private voidprocessOrder_New(CommandType command) {
       switch (command) {
           caseDo:{
              // Do Behaviors..
             setStatus(CommandType.New);
              // State's Transitions
              nextState =StateType.ProcessOrder_Packed;
              break;
           }
          default:{
              break;
           }
       }
    }

    private voidStatesProc(StateType currState, CommandType command) {
       switch (currState) {
           caseProcessOrder_Delivered: {
             processOrder_Delivered(command);
              break;
           }

           caseProcessOrder_Packed: {
             processOrder_Packed(command);
              break;
           }

           caseProcessOrder_Closed: {
             processOrder_Closed(command);
              break;
           }

           caseProcessOrder_Dispatched: {
             processOrder_Dispatched(command);
              break;
           }

           caseProcessOrder_New: {
             processOrder_New(command);
              break;
           }
          default:
              break;
       }
    }

    private voidTransitionsProc(TransitionType transition) {
       switch (transition) {
           caseProcessOrder_Delivered_to_ProcessOrder_Closed: {
             setStatus(CommandType.closed);
              break;
           }
          default:
              break;
       }
    }

    private voidinitalizeStateMachine() {
       currState = StateType.ProcessOrder_New;
       nextState = StateType.ST_NOSTATE;
       currTransition =TransitionType.TT_NOTRANSITION;
    }

    private voidrunStateMachine() {
       while (true) {
           if(currState == StateType.ST_NOSTATE) {
              break;
           }

          currTransition = TransitionType.TT_NOTRANSITION;
          StatesProc(currState, CommandType.Do);
           // thencheck if there is any valid transition assigned after the dobehavior
           if(nextState == StateType.ST_NOSTATE) {
              break;
           }

           if(currTransition != TransitionType.TT_NOTRANSITION) {
             TransitionsProc(currTransition);
           }
           if(currState != nextState) {
              StatesProc(currState,CommandType.Exit);
              StatesProc(nextState,CommandType.Entry);
              currState = nextState;
           }
       }
    }
    
    private voidsetStatus(CommandType set){
       
    }
}
0 0