UML(Unified Modeling Language)统一建模语言的概念已经出现了近20年,虽然并不是所有的概念都非常有实践意义,但常见的用例图、类图、序列图和状态图却实实在在非常有效,是项目中不同成员间沟通的有效载体,在此,将主要介绍之前提到的几种最常见的图示方法。

Tip:

RUP软件过程是Ration Unified Processs的简称,是一个不错的软件过程体系,其最佳的开发实践包括:迭代式开发,管理需求、使用基于构件爱的体系架构、可视化软件建模、验证软件质量和控制软件变更。其包括9个核心工作流:业务建模、需求、分析与设计、实现、测试、部署、配置与变更管理、项目管理环境,4个主要阶段:初始阶段、细化阶段、构造阶段和移交阶段。

此外,RUP通过如下的"4+1"视图模型来描述软件系统的体系结构,当然这部分内容的实践意义不是特别大,但可以作为一个很好的方法论参考。

用例是一个活动者使用系统的一项功能时所进行的交互过程的一个文字描述序列,用例分析是一种功能分解的技术,在实际中,就是将业务需求转化为系统的需求的过程。

用例图由参与者、用例、系统边界和箭头组成,有时还涉及用例描述。用例间的关系包括:包含,扩展、泛化等,如下表所示。

关系类型

说明

表示符号

关联(Association)

Actor和use case之间的关系,表示参与者与用例之间的通信,箭头指向消息接收方

泛化(Generalization)

Actor之间或use case之间的关系,等价于继承关系,表示更特别的行为

包含(include)

use case之间的关系,用于把一个复杂用例表示的功能分解为较小的步骤

扩展(extend)

use case之间的关系,指用例功能的延伸,相当于给基础用例提供一个附加功能

附上一个简单的示例,其中inherits等价于泛化。

类图是UML最主要的静态图,通过它可以完成软件系统基础骨架的建立,类的属性包括:可见性、属性名、类型、多重性和初始值等;类之间的关系比较多,如下表所示。此外由于类图太过常见,省略其示例图。

关系类型

说明

表示符号

继承关系

类之间的继承关系,箭头指向父类

实现关系

类对于接口的实现,

聚合关系

类之间的较弱耦合关系,类似鸟群有0只或多只鸟

组合关系

类之间的强耦合关系,类似鸟有两个翅膀

依赖关系

两个或多个类之间的依存关系,例如鱼依赖水

关联关系

类之间相互影响的关系,如气候和森林相互影响

补充:OO设计原则

开闭原则(Open/Closed Principle, OCP):一个模块对扩展开放,对修改关闭。

里氏代换原则(Liskov Substitution Principle, LSP):类可以替换父类,并出现在父类出现的任何位置。

依赖倒置原则(Dependency Inversion Principle, DIP):高层模块依赖于低层模块;具体依赖于抽象。

接口分离原则(Interface Segregation Principle, ISP):在设计时采用多个与特定客户有关的接口比采用一个通用的接口要好。

在UML中,序列图(顺序图)和协作图统一称为交互图,序列图较为常见,可以说是动态图中最重要的类型了。序列图的建模元素包括:对象、生命线、控制焦点、消息等。对象可以包含类名和对象名,也可以包含部分;生命线是表示从对象图标向下延伸的一条虚线,表示对象存在的时间;控制焦点是表示时间段的符号,对象在该时间段内,执行相应操作,为生命线上的小矩形;消息类型包括同步消息、异步消息、返回消息、阻止消息和超时消息。一个简单的序列图示例如下所示。

活动图很像流程图的规范形式,也非常的常用,其基本概念包括:活动、泳道、分支、分叉和汇合、对象流。其中泳道swimlane表示职责的区域划分;分支会根据不同条件跳转到不同的活动;分叉与汇合用于表述并发行为,常见活动图如下所示。

状态图主要用于描述一个对象在其生存期间的动态行为,表现一个对象所经历的状态序列,引起状态转移的事件,以及因状态转移而伴随的动作。常用在状态比较复杂的场景下,通过状态机描述状态之间的控制流,若下图所示。

在状态机中,动作既可以与状态相关也可以和转移相关。如果动作是与状态相关,则对象在进入一个状态时将触发某一动作,而不管是从哪个状态转入这个状态的;如果动作是和转移相关的,则对象在不同的状态之间转移时,将触发对应的动作(理解还不够深入)。对于一个状态机,如果其中所有动作都是与状态相关的,则称这个状态机是Moore机;如果其中所用的动作都是与转移相关的,则成为Mealy机。理论上,这两种方式的表示能力是一致的,一般状态图中都会混用,其包含以下几个基本概念。

状态:对象生命周期中的某个条件或状况,在此期间对象将满足某些条件、执行某些动作或等待某些事件。

子状态与组合状态:多个子状态通过or关系或and关系组合成组合状态。

历史状态:是一个伪状态(pseudostate),其目的是记住从组合状态中退出时所处的子状态,当再次进入组合状态时,可以直接进入这个子状态而不是初态。

转移:是两个状态之间的一种关系,表示对象将在第一个状态中执行一定的动作,并在某个特定事件发生后进入第二个状态。

事件:对一个在时间和空间上占有一定位置的有意义的事情的详细说明,可以分为4类,调用事件、变化事件、时间事件和信号事件。

动作:可执行的原子计算。

附上一个非常好用的UML顺序图生成工具plantuml:http://files.cnblogs.com/files/wanliwang01/plantuml.zip

及其示例:http://files.cnblogs.com/files/wanliwang01/plantuml_Example.zip

参考资料

  1. 王少锋. 面向对象技术UML教程[M]. 北京:清华大学出版社, 2004.

UML快速回顾的更多相关文章

  1. MySQL快速回顾:数据库和表操作

    前提要述:参考书籍<MySQL必知必会> 利用空闲时间快速回顾一些数据库基础. 4.1 连接 在最初安装MySQL,可能会要求你输入一个管理登录(通常为root)和一个口令(密码). 连接 ...

  2. SQL快速入门 ( MySQL快速入门, MySQL参考, MySQL快速回顾 )

    SQL 先说点废话,很久没发文了,整理了下自己当时入门 SQL 的笔记,无论用于入门,回顾,参考查询,应该都是有一定价值的,可以按照目录各取所需.SQL数据库有很多,MySQL是一种,本文基本都是SQ ...

  3. UML快速理解

    在团队协作过程中最常见的就是开会.开会最常用的就是图,而图中最常见的就是流程图.时序图.类图,这三个图可以清楚的描述你想解释的内容.学好类图不仅仅能帮助自己更清楚的梳理业务,还能提高开会效率. 上图是 ...

  4. UML快速指南(摘要)转载

    UML 概述: UML是一个通用的建模语言.它最初开始捕捉到复杂的软件和非软件系统的行为,现在它已经成为一个OMG标准. UML提供元素和组件的复杂系统支持的要求. UML遵循面向对象的概念和方法.因 ...

  5. 快速回顾MySQL:简单查询操作

    利用空闲时间花几分钟回顾一下 7.1 检索数据 为了查询出数据库表中的行(数据),使用SELECE语句. 格式: # 第一种 SELECT * FROM <table_name>; # 第 ...

  6. MySQL快速回顾:计算字段与函数

    9.1 计算字段 存储在数据库表中的数据一般不是应用程序所需要的格式.比如: 如果想要在一个字段中既显示公司名,又显示公式的地址,但这两个信息一般包含在不同的表列中. 城市.州和邮政编码存储在不同的列 ...

  7. UML快速概述 - All you need to know about UML

    UML 是统一建模语言的缩写,就像使用一组图表来可视化软件建模的蓝图(或设计计划).它不仅可以让您彻底评估整个概念,还可以确保团队中的每个人都在同一页面上.   UML 图可以组织成两个不同的组. 结 ...

  8. 数据结构快速回顾——平衡二叉树 AVL (转)

    平衡二叉树(Balanced Binary Tree)是二叉查找树的一个进化体,也是第一个引入平衡概念的二叉树.1962年,G.M. Adelson-Velsky 和 E.M. Landis发明了这棵 ...

  9. C++ primer分章节快速回顾

    第三章: 1,sozeof(int): int n_int=INT_MAX; sizeof n_int;(对变量括号可选) 2,#include<climits>包含一些类型的最大值3,c ...

随机推荐

  1. 『TCP/IP详解——卷一:协议』读书笔记——16

    2013-08-26 22:50:54 6.4 ICMP时间戳请求与应答 ICMP时间戳请求允许系统向另一个系统查询当前的时间.返回的建议值是自午夜开始计算的毫秒数(协调的统一时间,Coordinat ...

  2. 【收藏】Firebird知识

    本代码在:WinXp Pack 3 + Delphi2009 updata1 火鸟Firebird2.5.0.23247下测试通过.使用了Data Access面板的组件用SQL进行操作作者:LAH ...

  3. tar.xz文件解压

    原文:http://blog.csdn.net/rheostat/article/details/7614451 感谢CSDN的<帝都码农> ======================= ...

  4. 给VM中的RHEL6.5配置本地源

    二步:1.启动时自动挂载安装盘:2.增加一个".repo"(或者改掉原来的源的配置p.s.除非你以后都不想用网络源或者已经知道如何更改源的配置,否则别改) 首先,在/media中创 ...

  5. 关于HashTable的遍历方法解析

    要遍历一个Hashtable,api中提供了如下几个方法可供我们遍历: keys() - returns an Enumeration of the keys of this Hashtable ke ...

  6. (原创)Louis Aston Knight 的家(摄影,欣赏)

    本文图片转自腾讯文化:www.cal.qq.com 1.Abstract     记忆中的家,深情刻画. 2.Content 图1 图2 图3 图4 图5 图6 图7 图8 图9 图10 图10 图1 ...

  7. yuecheng 笑话

    http://115.28.189.219:9898/stock/manager_articles/fundamentals 要闻 http://115.28.189.219:9898/stock/m ...

  8. HttpCookie加匿名类实现多语言

    突然想做一个多语言网站,确不知道怎么实现好,突然想到了HttpCookie,然后页面后台用匿名类实现语言的储存. string lan = Request["str_lan"]; ...

  9. 由360手机卫士谈起——让你的service获取最高权限。

    近日来,我在倒腾360手机卫士的时候,发现,你无论是把他数据清空,还是把它强行停止以后,甚至是把它卸载以后,它的service都没有被Android的系统干掉,依然是岿然不动了.我就感到了纳闷了,后来 ...

  10. C++11新特性总结 (一)

    1. 概述 最近在看C++ Primer5 刚好看到一半,总结一下C++11里面确实加了很多新东西,如果没有任何了解,别说自己写了,看别人写的代码估计都会有些吃力.C++ Primer5是学习C++1 ...