zoukankan      html  css  js  c++  java
  • UML作业第五次:分析系统,绘制状态图

    UML作业第五次:分析系统,绘制状态图

    作业题目:分析电梯控制系统和银行账户系统,分别画出状态图

    一、要求及步骤

    step1:学习PlantUML状态图绘制方法

    step2:以《电梯控制》系统、《银行账户》系统为例,分析系统中的状态。

    step3: 分析电梯运行、银行账户的状态转换;

    step4:用PlantUML 编写 《电梯控制》系统、《银行账户》系统 状态转换的脚本;

    step5:在线绘制UML图;

    一、活动图语法

    活动标签(activity label)以冒号开始,以分号结束,文本格式支持creole wiki语法。,活动默认安装它们定义的顺序就行连接。

    @startuml
    :Hello world;
    :This is on defined on
    several **lines**;
    @enduml
    

    开始/结束

    可以使用关键字startstop表示图示的开始和结束。

    @startuml
    start
    :Hello world;
    :This is on defined on
    several **lines**;
    stop
    @enduml
    

    也可以使用 end 关键字。

    @startuml
    start
    :Hello world;
    :This is on defined on
    several **lines**;
    end
    @enduml
    

    条件语句

    在图示中可以使用关键字ifthenelse设置分支测试。标注文字则放在括号中。

    @startuml
    
    start
    
    if (Graphviz installed?) then (yes)
      :process all
    diagrams;
    else (no)
      :process only
      __sequence__ and __activity__ diagrams;
    endif
    
    stop
    
    @enduml
    

    也可以使用关键字elseif设置多个分支测试。

    @startuml
    start
    if (condition A) then (yes)
      :Text 1;
    elseif (condition B) then (yes)
      :Text 2;
      stop
    elseif (condition C) then (yes)
      :Text 3;
    elseif (condition D) then (yes)
      :Text 4;
    else (nothing)
      :Text else;
    endif
    stop
    @enduml
    

    重复循环

    可以使用关键字repeatrepeatwhile进行重复循环。

    @startuml
    
    start
    
    repeat
      :read data;
      :generate diagrams;
    repeat while (more data?)
    
    stop
    
    @enduml
    
    while循环

    可以使用关键字whileend while进行while循环。

    @startuml
    
    start
    
    while (data available?)
      :read data;
      :generate diagrams;
    endwhile
    
    stop
    
    @enduml
    

    还可以在关键字endwhile后添加标注,还有一种方式是使用关键字is

    @startuml
    while (check filesize ?) is (not empty)
      :read file;
    endwhile (empty)
    :close file;
    @enduml
    

    并行处理

    可以使用关键字forkfork againend fork表示并行处理。

    @startuml
    
    start
    
    if (multiprocessor?) then (yes)
      fork
    	:Treatment 1;
      fork again
    	:Treatment 2;
      end fork
    else (monoproc)
      :Treatment 1;
      :Treatment 2;
    endif
    
    @enduml
    

    注释

    文本格式支持creole wiki语法。

    A note can be floating, using floating keyword.

    @startuml
    
    start
    :foo1;
    floating note left: This is a note
    :foo2;
    note right
      This note is on several
      //lines// and can
      contain <b>HTML</b>
      ====
      * Calling the method ""foo()"" is prohibited
    end note
    stop
    
    @enduml
    

     颜色

    可以为活动(activity)指定一种颜色。

    @startuml
    
    start
    :starting progress;
    #HotPink:reading configuration files
    These files should edited at this point!;
    #AAAAAA:ending of the process;
    
    @enduml
    

    箭头

    使用->标记,可以给箭头添加文字或者修改箭头颜色。

    同时,也可以选择点状 (dotted),条状(dashed),加粗或者是隐式箭头

    @startuml
    :foo1;
    -> You can put text on arrows;
    if (test) then
      -[#blue]->
      :foo2;
      -[#green,dashed]-> The text can
      also be on several lines
      and **very** long...;
      :foo3;
    else
      -[#black,dotted]->
      :foo4;
    endif
    -[#gray,bold]->
    :foo5;
    @enduml
    

    连接器(Connector)

    可以使用括号定义连接器。

    @startuml
    start
    :Some activity;
    (A)
    detach
    (A)
    :Other activity;
    @enduml
    

    组合(grouping)

    通过定义分区(partition),你可以把多个活动组合(group)在一起。

    @startuml
    start
    partition Initialization {
    	:read config file;
    	:init internal variable;
    }
    partition Running {
    	:wait for user interaction;
    	:print information;
    }
    
    stop
    @enduml
    

    泳道(Swimlanes)

    你可以使用管道符|来定义泳道。

    还可以改变泳道的颜色。

    @startuml
    |Swimlane1|
    start
    :foo1;
    |#AntiqueWhite|Swimlane2|
    :foo2;
    :foo3;
    |Swimlane1|
    :foo4;
    |Swimlane2|
    :foo5;
    stop
    @enduml
    

    分离(detach)

    可以使用关键字detach移除箭头。

    @startuml
     :start;
     fork
       :foo1;
       :foo2;
     fork again
       :foo3;
       detach
     endfork
     if (foo4) then
       :foo5;
       detach
     endif
     :foo6;
     detach
     :foo7;
     stop
    @enduml
    

    特殊领域语言(SDL)

    通过修改活动标签最后的分号分隔符(;),可以为活动设置不同的形状。

    • |
    • <
    • >
    • /
    • ]
    • }
    @startuml
    :Ready;
    :next(o)|
    :Receiving;
    split
     :nak(i)<
     :ack(o)>
    split again
     :ack(i)<
     :next(o)
     on several line|
     :i := i + 1]
     :ack(o)>
    split again
     :err(i)<
     :nak(o)>
    split again
     :foo/
    split again
     :i > 5}
    stop
    end split
    :finish;
    @enduml
    

    二、分析电梯控制系统、银行账户系统

    (1)电梯控制

    1.电梯存在四种基本状态,即:待载、上升、下降、楼间停;

    2.电梯无人承载时停在某一楼层,处于待载状态;

    3.当有人进入电梯,并且当前楼层比目标楼层低,电梯上升;

    4.当有人进入电梯,并且当前楼层比目标楼层高,电梯下降;

    5.当在某一层时电梯内所有人都离开电梯,电梯回到待载状态;

    6.如果电梯中存在人,则执行2或3步骤

    (2)银行账户

    1.银行账户存在三种状态,即:空额、有余额、负债;

    2.初建立的账户没有存款,处于空额状态;

    3.若在空额状态时向账户存款,则进入有余额状态;若在空额状态时从账户取款,进入负债状态;

    4.在有余额状态时向账户存款,余额增加,但还是处于有余额状态;

    5.从账户中取款,若取款额小于余额,处于有余额状态;等于余额,回到空额状态;大于余额,进入负债状态;

    6.负债时,取款则余额减少,仍处于负债状态;存款,当存款额小于负债额,还是负债;存款额等于负债额,回到空额状态;若存款额大于负债额,进入有余额状态。

    三、脚本

    电梯控制:

    @startuml [*] --> 待载

      待载 -up-> 上升 : 进入[目标楼层>当前楼层]/关门上行  

     上升 -down-> 楼间停 : [进人/出人]/停机开门
     待载 -down-> 下降 : 进入[目标楼层<当前楼层]/关门下行  

     下降 -up-> 楼间停 : [进人/出人]/停机开门

      楼间停 -up-> 上升:[目标楼层>当前楼层]/关门上行  

      楼间停 -down-> 下降:[目标楼层<当前楼层]/关门下行   

      楼间停 -left-> 待载:[无人]/关门

    @enduml

    银行账户:

    @startuml [*] --> 空额
    空额 -down-> 有余额 : 存款/余额=余额+存款额

    空额 -down-> 负债 : 取款[取款额<最大限额]/余额=余额-存款额

    有余额 --> 有余额 : 存款/余额=余额+存款额

    有余额 --> 有余额 : 取款[取款额<余额]/余额=余额-取款额

    有余额 -right-> 负债 : 取款[取款额>余额]/余额=余额-取款额

    有余额 -up-> 空额 : 取款[取款额=余额]/余额=余额-取款额

    负债 --> 负债 : 取款[取款额<最大限额]/余额=余额-存款额

    负债 --> 负债 : 存款[存款额<负债额]/余额=余额+存款额

    负债 -left-> 有余额 : 存款[存款额>负债额]/余额=余额+存款额

    负债 -up-> 空额 : 存款[存款额=负债额]/余额=余额+存款额

    空额 -up-> [*]

    @enduml

    四、UML图

    电梯控制:

    银行账户:

  • 相关阅读:
    [C#][控件]WebBrowser 使用范例
    [java]经验集
    [html][easyui]DataGrid 绑定
    [转]jQuery 读取 xml
    [转][html]大文件下载
    [转][javascript]判断传入参数
    [html][javascript] Cookie
    [bat]批处理删默认共享和清理垃圾
    [转]JavaScript RegExp 对象参考手册
    5个编程问题(1小时解决)
  • 原文地址:https://www.cnblogs.com/cuixihan/p/10816709.html
Copyright © 2011-2022 走看看