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. Web Penetration Testing w3af fierce

    1.启动wsaf工具,设置载入插件(攻击模型的插件),可以设置默认的攻击模型,也可以添加自己的plug. 2.在侦查的时候渗透邮箱需要知道,云行邮箱服务的托管服务器是什么类型,在之前的博客中我已近两提 ...

  2. Winhex数据恢复学习笔记(四)

    睡不着,那就深夜写篇笔记打发一下不瞌睡,❥(^_-) 1.winhex在文件批量处理上主要是针对批量保存.打开.关闭,主要还是基于批量打开的其他一些操作,这里通过构造通配符来批量打开,列如 *符号 ? ...

  3. 20165314 2016-2017-2 《Java程序设计》第9周学习总结

    20165314 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 URl类 UDP数据报 广播数据报 套接字 套接字连接机制 代码托管

  4. Python之yield简明详解

    yield在Python中被称之为生成器(只能在函数中使用),他的作用是将函数中每次执行的结果以类似元组的形式保存起来一遍后续使用. 什么是生成器? 通过列表生成式,我们可以直接创建一个列表.但是,受 ...

  5. 极光推送>>java SDK服务端集成后台项目(使用详解)

    PS:如果你是第一次用推送,那就直接按照我的步骤来,再去看官方文档,这样,更容易能理解操作流程.还有——-请耐心看 极光文档(java SDK)请参考 [ 极光文档 ] 步骤一: 首先,你必须在 [极 ...

  6. exec函数族

    进程程序替换 进程程序替换原理 fork创建子进程执行的是和父进程相同的程序(也有可能是某个分支),通常fork出的子进程是为了完成父进程所分配的任务,所以子进程通常会调用一种exec函数(六种中的任 ...

  7. python的学习和使用

    1.python的官网:https://www.python.org/ Python简介: .Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. .Python 的设计具有 ...

  8. spring+redis的集成,redis做缓存

    1.前言 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.我们都知道,在日常的应用中,数据库瓶颈是最容易出现的 ...

  9. 学习笔记: IO操作及序列化

    /// <summary> /// 文件夹  文件管理 /// </summary> public class MyIO {     /// <summary>   ...

  10. [转] zepto的各种坑

    1.编译zepto.模块之前可能有依赖关系,整体顺序参考下面这个即可: MODULES="zepto event ajax form ie detect fx fx_methods asse ...