zoukankan      html  css  js  c++  java
  • UML作业第四次:分析系统,绘制活动图

    UML作业第四次:分析系统,绘制活动图

    作业题目:分析超市购物流程,并画出活动图

    一、要求及步骤

    step1:学习PlantUML活动图绘制方法,学习活动图语法

    step2:以《超市购物》系统为例,分析系统中的活动主体:顾客、收银员、收款机;设置三个活动分区(泳道)

    step3: 分析超市购物流程

    step4:用PlantUML 编写 《超市购物》购物活动的 脚本

    step5:在线绘制《超市购物》购物活动活动图

    一、活动图语法

    活动标签(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、顾客进入商店,选择自己所要购买的商品,并把选好的商品拿到收银台交给收银员。
    2、收银员询问顾客是否是会员,如果是会员,索要顾客的会员卡,把会员卡扫描进系统并对会员卡进行验证。
    3、然后逐一扫描顾客所选商品的条形码,收款机边接收商品条码,边累加商品金额。
    4、扫描完商品信息后,收银员根据收款机上显示的商品金额收货款,然后通过收款机打印售货单。
    5、最后收银员把售货单和商品交给顾客,本次购物过程结束。
    三、《超市购物》购物活动的 脚本
    @startuml
    |顾客|
    start
    :选择商品;
    :商品交给收银员;
    |#AntiqueWhite|顾客|
    if (是否是会员) then (yes)
    :会员;
      |收银员|
      :扫描会员卡;
        |#AntiqueWhite|收款机|
    if (接收会员编号) then (yes)
         :提示会员卡有效;
    else (no)
         :提示会员卡无效;
    endif
    else (no)
    |顾客|
    :非会员;
    endif
    |收银员|
    :扫描商品条码;
    |收款机|
      :接收商品条形码;
      :统计商品金额;
    |收银员|
    while (是否还有商品) is (yes)
      |收银员|
      :扫描商品条码;
    endwhile (no)
    |顾客|
    :交付货款;
    |收银员|
    :接收货款;
    |收款机|
    :打印售货单;
    |收银员|
    :货单及货品交给顾客;
    |顾客|
    :接收货单及货品;
    stop
    @enduml
    四、《超市购物》购物活动活动图
    PlantUML diagram

     

  • 相关阅读:
    HDU 2553 N皇后问题
    HDU 2553 N皇后问题
    HDU 1045 Fire Net
    HDU 1045 Fire Net
    HUD 1175 连连看
    HUD 1175 连连看
    poj3190 Stall Reservations (贪心+优先队列)
    poj3190 Stall Reservations (贪心+优先队列)
    ThinkPHP 模板截取字符串 【转载】
    鼠标位置距浏览器窗体距离
  • 原文地址:https://www.cnblogs.com/cuixihan/p/10816570.html
Copyright © 2011-2022 走看看