状态机图state machine diagram

下面是状态图的一个例子(一个城堡中的秘密保险箱的控制面板)。

转换transition包括3个部分:trigger-signature [guard]/activity,每个部分都是可选的。

内部活动

状态可以在没有转换时响应事件,可以使用内部活动来表示:将事件,警戒条件和活动放在状态框里面。

一个文本域的typing状态的内部事件

活动状态

前面描述的状态中,对象是安静的,它在等待下一个事件,然后决定做点什么。在某个状态中的对象也可以是活动的,比如searching状态,使用do-activity来表示,如下图。

超状态superstate

有时候,你会发现若干个状态共享共同的转换和内部活动。可以把它们当做子状态,把共享行为移进超状态。

并发状态concurrent state

状态可以分解为若干正在并发进行的正交状态图。如下图展示了一个简单的闹钟,它可以播放CD或者收音机,以及展示当前时间或者闹钟时间。

实现状态图

状态图的实现主要有3中方式:嵌套switch、状态模式和状态表。

1. 最直接的方式是使用switch,如下面的代码实现了保险箱控制面板实例的状态转换过程。

public void HandleEvent(PanelEvent anEvent)
{
    switch (CurrentState)
    {
        case PanelState.Open:
            switch (anEvent)
            {
                case PanelEvent.SafeClosed:
                    CurrentState = PanelState.Wait;
                    break;
            }
            break;
        case PanelState.Wait:
            switch (anEvent)
            {
                case PanelEvent.CandleRemoved:
                    if (isDoorOpen)
                    {
                        RevealLock();
                        CurrentState = PanelState.Lock;
                    }
                    break;
            }
            break;
        case PanelState.Lock:
            switch (anEvent)
            {
                case PanelEvent.KeyTurned:
                    if (isCandleIn)
                    {
                        OpenSafe();
                        CurrentState = PanelState.Open;
                    }
                    else
                    {
                        ReleaseKillerRabbit();
                        CurrentState = PanelState.Final;
                    }
                    break;
            }
            break;
    }
}

2. 使用state模式。

3. 使用状态表。建造一个运行时使用该状态表的解释器,或者一个基于该表生成类的代码生成器。

Source State

Target State

Event

Guard

Procedure

Wait

Lock

Candle removed

Door open

Reveal lock

Lock

Open

Key turned

Candle in

Open safe

Lock

Final

Key turned

Candle out

Release killer rabbit

Open

Wait

Safe closed

何时使用状态图

状态图擅长于描述单个对象的行为,这些行为可能跨越多个用例。状态图不擅长设计许多对象协作的行为。

活动图activity diagram

活动图是描述过程逻辑、业务流程和工作流的技术。

分叉fork有一个进入流,和若干个离开的并发流。结合join表示过个进入流都到达,离开流才会执行。合并merge有多个输入流和单个输出流,意味着由判断decision开始的条件行为结束了。活动图的步骤称为动作action。

分解一个动作

动作可以分解为子活动。例如将deliver order分解为子活动。

分区partitions

活动图告诉你发生了什么,但没有告诉你谁做什么。可以通过分区来展示谁做什么。这种风格经常被称为泳道,也称为泳道图。

  1. 信号。
  2. 令牌
  3. 流和边
  4. 针脚和变换
  5. 扩展区域
  6. 流结束
  7. 结合规格
  8. 何时使用活动图。活动图是工作流和流程建模的一个很棒的工具。

通信图communication diagram

交互图的一种,强调交互的各个参与者之间的数据链接。再UML1.x中被称为协作图。

UML标准做法。使用多级编号表示消息序列。

人们也经常这样使用。

何时使用通信图

强调调用序列时,使用序列图;强调数据链接时,使用通信图更好。

组合结构composite structures

组合结构深入类的内部结构,将一个复杂的类分解为部件part。

展示TV viewer及其接口的两种方式。

组件的内部视图

何时使用组合结构。组合结构是UML2新增的。它和包图的的区别是:包是编译时分组,组合结构是运行时分组。组合结构非常适合展示组件以及组件的内部结构,所以大多在组件图中使用。

组件图component diagram

组件通过实现接口可需求接口来连接,经常使用组合结构的标示法。当你把系统分解为组件并要展示它们通过接口的相互连接时,或者把组件分解为更低级别的结构时,使用组件图。

协助collaboration

协助表示一次交互过程中各个角色role之间的关系。

带角色类图的协作。

交互概述图Interaction overview diagram

交互概述图是活动图和序列图嫁接起来得到的。你可以认为交互概述图就是活动图,不过其中的活动替换为了小的序列图,或者认为交互概述图就是序列图被活动图打碎了,用于展现控制流。

时间图Timing diagram

时间图是另一种形式的交互图,它的焦点是时间约束。如下一个咖啡壶的泵和电炉的交互示例:泵开始工作和电炉开始工作的时间间隔至少10秒,泵停止工作和电炉停止工作的间隔不得大于15分钟。

展示状态为线的时间图

展示状态为区域的时间图

UML精粹5 - 状态图,活动图,通信图,组合结构,组件图,协作,交互概述图,时间图的更多相关文章

  1. Python设计模式 - UML - 交互概述图(Interaction Overview Diagram)

    简介 交互概述图是将不同交互图衔接在一起的图,属于UML2.0的新增图.交互概述图并没有引入新的建模元素,其主要元素来自于活动图和时序图.交互概述图侧重从整体上概览交互过程中的控制流,包括交互图之间的 ...

  2. 【UML】NO.52.EBook.5.UML.1.012-【UML 大战需求分析】- 交互概览图(Interaction Overview Diagram)

    1.0.0 Summary Tittle:[UML]NO.52.EBook.1.UML.1.012-[UML 大战需求分析]- 交互概览图(Interaction Overview Diagram) ...

  3. UML用法及状态图,活动图介绍

    统一建模语言UML(Unified Modeling Language)是非专利的第三代建模和规约语言.UML是一种开放的方法,用于说明.可视化.构建和编写一个正在开发的.面向对象的.软件密集系统的制 ...

  4. uml精粹——11.活动图(及整个读书笔记分享)

    11.活动图activity diagram   活动图是描写叙述过程化逻辑procedural logic.业务过程business process和工作流work flow的技术. 他和流程图fl ...

  5. UML精粹3 - 类图,序列图,CRC

    类图Class diagram 类图描述系统中的对象类型,以及它们之间的各种静态关系.类图也展示类的性质和操作,以及应用于对象连接方式的约束.UML中的特性feature,涵盖了性质property和 ...

  6. UML学习笔记:活动图

    UML学习笔记:活动图 活动图 活动图是UML中描述系统动态行为的图之一,用于展现参与行为的类的活动或动作.在UML里,活动图很类似于流程图,但是有一些区别: 活动图着重表现系统行为,描述对象活动的顺 ...

  7. UML精粹4 - 对象图,包图,部署图,用例

    对象图object diagram 对象图是某个时间点上的对象在系统中的快照,也经常被称为实例图.一般在展示组合对象结构时比较有用.例如 组合结构的类图 一个时刻的对象图 包图package diag ...

  8. 《UML精粹》第三章 -类图的基本概念

    第三章 类图:基本概念 类图可用来描写叙述系统中各种对象的类型.也可描绘出对象间各种各样的静态关系.此外.类图中也能够秀出类的性质(property)与操作(operation),以及可应用到对象间连 ...

  9. UML作业第三次:分析《书店图书销售管理系统,绘制类图

    plantuml类图绘制方法的学习: 1.关于类图的学习: 类图显示了系统的静态结构. 类:类图中的主要元素,用矩形表示.矩形的上层表示类名.中层表示属性.下层表示方法. 类之间的关系:关联.依赖.聚 ...

随机推荐

  1. C# 自动运行代码 (创建windows 服务的形式 )

    本文转载自:http://blog.csdn.net/csethcrm/article/details/17917721 1.      新建项目 1.1 右键解决方案 – 添加 – 新建项目 1.2 ...

  2. 转:PHP--获取响应头(Response Header)方法

    转:http://blog.sina.com.cn/s/blog_5f54f0be0102uvxu.html PHP--获取响应头(Response Header)方法 方法一: ========== ...

  3. 一些常用的方法(1)--去除DataTable中的重复数据

    private DataTable Display(DataTable dtSource)        {            DataTable dtTemp = dtSource.Copy() ...

  4. guacamole 0.8.3 项目部署 桌面虚拟化

    Guacamole是一个基于HTML5的虚拟桌面应用程序,其中包含多个组件,由各组件共同构成Guacamole---一个完整的虚拟桌面解决方案,不需要任何插件,只要浏览器支持HTML5就可以实现,而且 ...

  5. git中Member设置为Developer也可以的

    之前说Member至少要设置为master,或者owner才行,昨天发现依然可以设置为developer. 因为有个位置可以设置Developers can push,√上就可以了. 比如,我不希望大 ...

  6. WCF初探-6:WCF服务配置

    WCF服务配置是WCF服务编程的主要部分.WCF作为分布式开发的基础框架,在定义服务以及定义消费服务的客户端时,都使用了配置文件的方法.虽然WCF也提供硬编程的方式,通过在代码中直接设置相关对象的属性 ...

  7. [最近公共祖先] POJ 1330 Nearest Common Ancestors

    Nearest Common Ancestors Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 27316   Accept ...

  8. HTTP Referer 防外链

    HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理. if (Req ...

  9. VC只运行一个程序实例

    方法有很多,以下只是提供一种用的多的 一. 单文档程序 在程序App类的InitInstance中添加如下代码 BOOL CDDZApp::InitInstance() { /*只运行一个实例*/ / ...

  10. PB中用oracle的存储过程返回记录集做数据源来生成数据窗口,PB会找不到此存储过程及不能正常识别存储过程的参数问题(转)

    (转)在PB中用oracle的存储过程返回记录集做数据源来生成数据窗口 首先oracle的存储过程写法与MSSQL不一样,差别比较大. 如果是返回数据集的存储过程则需要利用oracle的包来定义游标. ...