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

RUP统一软件过程

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

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

用例图

用例是一个活动者使用系统的一项功能时所进行的交互过程的一个文字描述序列,用例分析是一种功能分解的技术,在实际中,就是将业务需求转化为系统的需求的过程。
用例图由参与者、用例、系统边界和箭头组成,有时还涉及用例描述。用例间的关系包括:包含,扩展、泛化等,如下表所示。

关系类型 说明 符号
关联 Actor和use case之间的关系,表示参与者与用例之间的通信,箭头指向消息接收方
泛化 Actor之间或use case之间的关系,等价于继承关系,表示更特别的行为
包含 use case之间的关系,用于把一个复杂用例表示的功能分解为较小的步骤
扩展 use case之间的关系,指用例功能的延伸,相当于给基础用例提供一个附加功能

附上一个简单的示例

序列图

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

类图

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

关系类型 说明 符号
继承关系 类之间的继承关系,箭头指向父类
实现关系 类对于接口的实现
聚合关系 类之间的较弱耦合关系,类似鸟群有0只或多只鸟
组合关系 类之间的强耦合关系,类似鸟有两个翅膀
依赖关系 两个或多个类之间的依存关系,例如鱼依赖水
关联关系 类之间相互影响的关系,如气候和森林相互影响

补充: SOLID面向对象设计原则

  1. 单一职责原则(Single Responsibility):它规定一个类应该只有一个发生变化的原因
  2. 开闭原则(Open/Closed Principle, OCP):一个模块对扩展开放,对修改关闭。
  3. 里氏代换原则(Liskov Substitution Principle, LSP):类可以替换父类,并出现在父类出现的任何位置。
  4. 接口分离原则(Interface Segregation Principle, ISP):在设计时采用多个与特定客户有关的接口比采用一个通用的接口要好。
  5. 依赖倒置原则(Dependency Inversion Principle, DIP):高层模块依赖于低层模块;具体依赖于抽象。

活动图

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

状态图

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

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

  • 状态:对象生命周期中的某个条件或状况,在此期间对象将满足某些条件、执行某些动作或等待某些事件。
  • 子状态与组合状态:多个子状态通过or关系或and关系组合成组合状态。
  • 历史状态:是一个伪状态(pseudostate),其目的是记住从组合状态中退出时所处的子状态,当再次进入组合状态时,可以直接进入这个子状态而不是初态。
  • 转移:是两个状态之间的一种关系,表示对象将在第一个状态中执行一定的动作,并在某个特定事件发生后进入第二个状态。
  • 事件:对一个在时间和空间上占有一定位置的有意义的事情的详细说明,可以分为4类,调用事件、变化事件、时间事件和信号事件。
  • 动作:可执行的原子计算。

Tip
推荐工具:plantUML
附上一个非常好用的UML图生成工具plantuml,示例,官方网站

UML图快速入门的更多相关文章

  1. UML 类图快速入门

    UML 图形 官方定义 UML 类图(Class Diagram) UML 时序图(Sequence Diagram) 领域 UML 类图和实现 UML 类图 领域 UML 类图 实现 UML 类图 ...

  2. UML类图快速入门篇

    1.关联 1.1双向关联: C1-C2:指双方都知道对方的存在,都可以调用对方的公共属性和方法. 在GOF的设计模式书上是这样描述的:虽然在分析阶段这种关系是适用的,但我们觉得它对于描述设计模式内的类 ...

  3. 0.UML图入门——学习《大话设计模式》笔记

    <大话设计模式>中讲述了UML类图的基本用法,做此笔记加深理解. 注:上图来源于<大话设计模式> 上图中设计的关键术语为:继承.实现.聚合.组合.关联.依赖. 要想弄清楚UML ...

  4. OpenStack云计算快速入门之一:OpenStack及其构成简介

    原文:http://blog.chinaunix.net/uid-22414998-id-3263551.html OpenStack云计算快速入门(1) 该教程基于Ubuntu12.04版,它将帮助 ...

  5. 3 学习UML图 学习DDD的基本概念

    今天在学习DDD的过程中看到了大神 圣杰的博文 个人觉得非常经典 强烈推荐  在此提供url链接: UML类图10分钟快速入门 关于聚合 的理解 :一类没有紧密相关的东西聚在一起 ,分开了也可以独立存 ...

  6. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  7. c语言快速入门2

    如果你想快速入门计算机,可以参考我的上一篇帖子,先了解一些必备的软知识,然后再来进行语言的快速入门 计算机入门基础知识 c语言快速入门1 1.1.12 函数的概念 函数的定义:c语言的基本单位,c语言 ...

  8. Swift语言快速入门

    Swift语言快速入门(首部同步新版官方API文档和语法的Swift图书,确保代码可编译,作者专家在线答疑,图书勘误实时跟进) 极客学院 编著   ISBN 978-7-121-24328-8 201 ...

  9. html5快速入门(四)—— JavaScript

    前言: 1.HTML5的发展非常迅速,可以说已经是前端开发人员的标配,在电商类型的APP中更是运用广泛,这个系列的文章是本人自己整理,尽量将开发中不常用到的剔除,将经常使用的拿出来,使需要的朋友能够真 ...

随机推荐

  1. Confluence 6 注册单一小工具

    如果你不能订阅一个应用的小工具,你需要将小工具一个一个的添加进来.针对网站不支持小工具订阅和你的应用和你的 Confluence 不能建立信任连接的情况,你就只能这样添加了. 首先你需要获得小工具的 ...

  2. Confluence 6 订阅所应用的所有小工具

    你可以从你的 Jira, Bamboo,FishEye 或 Crucible 站点中订阅所有的小工具到你的 Confluence 小工具目录中.用户可以为他们的页面查找和选择小工具. 希望订阅其他站点 ...

  3. 以resnet作为前置网络的ssd目标提取检测

    http://blog.csdn.net/zhangjunbob/article/details/53119959

  4. 高性能JavaScript读后感

    这本书让lz对js性能优化有了更深刻的理解,现在因为我们通常用第三方构建工具webpack.gulp等诸如此类,之前总是听说什么dom操作影响性能呢,对这个概念总是有点模糊,但看完这本书之后后,相对而 ...

  5. 量化投资与Python

    目录: 一.量化投资第三方相关模块 NumPy:数组批量计算 Pandas:表计算与数据分析 Matplotlib:图表绘制 二.IPython的介绍 IPython:和Python一样 三.如何使用 ...

  6. css中border画三角形

    <!doctype html><html lang="en"> <head>  <meta charset="UTF-8&quo ...

  7. python Com接口测试

    import comtypes.client as cc import comtypes tlb_id = comtypes.GUID("{D85C6069-D628-4276-93C3-9 ...

  8. C++ Primer 笔记——IO类

    1.C++语言并未定义任何输入输出语句,取而代之,包含了一个全面的标准库来提供IO机制. 由上图能够知道,I/O操作的基类是ios_base,各个类的用途例如以下: <iostream> ...

  9. 饮冰三年-人工智能-linux-08 软件包管理(Python的安装)

    1:软件包存放的位置 media/CentOS_6.9_Final/Packages文件夹下 2.RPM就是Red Hat Package Manger(红帽软件包管理工具)的缩写. 2.1 常用的命 ...

  10. dubbo负载均衡策略和集群容错策略都有哪些

    dubbo负载均衡策略 random loadbalance 默认情况下,dubbo是random load balance随机调用实现负载均衡,可以对provider不同实例设置不同的权重,会按照权 ...