UML快速回顾
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
参考资料
- 王少锋. 面向对象技术UML教程[M]. 北京:清华大学出版社, 2004.
UML快速回顾的更多相关文章
- MySQL快速回顾:数据库和表操作
前提要述:参考书籍<MySQL必知必会> 利用空闲时间快速回顾一些数据库基础. 4.1 连接 在最初安装MySQL,可能会要求你输入一个管理登录(通常为root)和一个口令(密码). 连接 ...
- SQL快速入门 ( MySQL快速入门, MySQL参考, MySQL快速回顾 )
SQL 先说点废话,很久没发文了,整理了下自己当时入门 SQL 的笔记,无论用于入门,回顾,参考查询,应该都是有一定价值的,可以按照目录各取所需.SQL数据库有很多,MySQL是一种,本文基本都是SQ ...
- UML快速理解
在团队协作过程中最常见的就是开会.开会最常用的就是图,而图中最常见的就是流程图.时序图.类图,这三个图可以清楚的描述你想解释的内容.学好类图不仅仅能帮助自己更清楚的梳理业务,还能提高开会效率. 上图是 ...
- UML快速指南(摘要)转载
UML 概述: UML是一个通用的建模语言.它最初开始捕捉到复杂的软件和非软件系统的行为,现在它已经成为一个OMG标准. UML提供元素和组件的复杂系统支持的要求. UML遵循面向对象的概念和方法.因 ...
- 快速回顾MySQL:简单查询操作
利用空闲时间花几分钟回顾一下 7.1 检索数据 为了查询出数据库表中的行(数据),使用SELECE语句. 格式: # 第一种 SELECT * FROM <table_name>; # 第 ...
- MySQL快速回顾:计算字段与函数
9.1 计算字段 存储在数据库表中的数据一般不是应用程序所需要的格式.比如: 如果想要在一个字段中既显示公司名,又显示公式的地址,但这两个信息一般包含在不同的表列中. 城市.州和邮政编码存储在不同的列 ...
- UML快速概述 - All you need to know about UML
UML 是统一建模语言的缩写,就像使用一组图表来可视化软件建模的蓝图(或设计计划).它不仅可以让您彻底评估整个概念,还可以确保团队中的每个人都在同一页面上. UML 图可以组织成两个不同的组. 结 ...
- 数据结构快速回顾——平衡二叉树 AVL (转)
平衡二叉树(Balanced Binary Tree)是二叉查找树的一个进化体,也是第一个引入平衡概念的二叉树.1962年,G.M. Adelson-Velsky 和 E.M. Landis发明了这棵 ...
- C++ primer分章节快速回顾
第三章: 1,sozeof(int): int n_int=INT_MAX; sizeof n_int;(对变量括号可选) 2,#include<climits>包含一些类型的最大值3,c ...
随机推荐
- Bootstrap 3 简介
Bootstrap is the most popular HTML, CSS, and JS framework for developing responsive, mobile first pr ...
- chrome 浏览器 手动同步书签 && 安装离线插件
现在查的很严,所以使用chrome浏览器 同步功能不是特别好,就算是FQ也会出现 同步延迟的情况,所以定时使用手动同步还是很靠谱的行为,就在网上找了下,借鉴下.亲测可用. 在Chrome浏览器没有一个 ...
- node开发
1. 国内使用npm安装某些插件的时候,偶尔会有网络问题,可以使用cnpm:(后续所有使用 npm 无法正常安装的,都改成 cnpm 试试) a. 首先使用 npm 安装 cnpm:npm insta ...
- [UCSD白板题] Longest Common Subsequence of Three Sequences
Problem Introduction In this problem, your goal is to compute the length of a longest common subsequ ...
- Hive使用技巧
hive默认查询不会显示列名, 当一个表字段比较多的时候,往往看不出值与列之间的对应关系,对日常查错及定位问题带来不便,像下面这样. hive> >select * from exampl ...
- javascript练习-私有状态
在经典的面向对象编程中,经常需要将对象的某个状态封装或隐藏在对象内,只有通过对象的方法才能访问这些状态,对外只暴露一些重要的状态可以直接编写.这是就需要私有状态. function Range(fro ...
- dell交换机固件
Upgrading the S4048-ON Dell Networking OS Image using the Dell Networking OS CLI Bare Metal Provisio ...
- 使用的组件:JQuery UI
jQuery UI包含了许多维持状态的小部件(Widget),因此,它与典型的 jQuery 插件使用模式略有不同.所有的 jQuery UI 小部件(Widget)使用相同的模式,所以,只要您学会使 ...
- 使用Vs2012开发Metro时在另一台win8平板上调试的步骤
需求:开发一个metro应用,因为要给平面设计师参谋, 需要将软件安装在win8平板上. 环境:开发机是win8, win8平板是win8.1rtm , 是用老的win7平板改装的. 步骤: 1:拷 ...
- SSH 动态端口forwarding是如何工作的
好久没有来了,实在是太懒. 经常用SSH的动态端口forwarding 来FQ,使用像这样的命令: ssh -D 9999 -f -C -q -N sshHost.somewhere.com 这个命令 ...









