前言
当提起 UML,相信很多猿友跟我一样,脑海中便会闪现出 “类图”,“时序图”。
不过也实属正常,在我们日常工作与学习中,用到的无外乎也就此两种图。
近期,由于公司延续很久的《每周一知识分享》主题活动,恰巧轮到我,趁着此“UML”主题,深入了解了一番。
在此,记录一下,分享给大家。
什么是UML
-
定义
统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言。 UML 使用面向对象设计的的建模工具,但独立于任何具体程序设计语言。
简单理解,UMl是一种建模语言,使用面向对象设计的建模工具,是一种程序设计的语言。 -
应用场景:
UML可帮助我们做软件需求分析和软件设计的工作,告诉你一个秘密,UML应用于软件需求分析时,会使其学习门槛降低以及语法复杂度降低,而且你基本不需要掌握软件开发的知识。只要你对软件需求分析感兴趣,认真学习和应用UML,就很有机会成为软件需求分析高手。 -
分类
UML2.0版本 一共有 13 种图形(UML1.5定义了9种,2.0 增加了4种)。分别是:用例图、类图、对象图、状态图、活动图、时序图、协作图、构件图、部署图 9 种,包图、 时间图、组合结构图、交互概览图 4 种。
图形分类 | 作用 |
---|---|
类图 (Class Diagrams) | 用于定义系统中的类 |
对象图 (Object Diagrams) | 是类图的一个实例,描述了系统在具体时间点上所包含 的对象以及各个对象之间的关系 |
构件图 (Component Diagrams) | 一种特殊的 UML 图来描述系统的静态实现视图 |
部署图 (Deployment Diagrams) | 定义系统中软硬件的物理体系结构 |
状态图 (State Chart Diagrams) | 用来描述类的对象所有可能的状态以及时间发生时 状态的转移条件 |
协作图 (Collaboration Diagrams) | 描述对象之间的合作关系,更侧重和用户对象说 明哪些对象有消息的传递 |
活动图 (Activity Diagrams) | 用来描述满足用例要求索要进行的活动以及活动间的约束关系 |
时序图 (Sequence Diagrams) | 描述对象之间的交互顺序,着重体现对象间消息传递 的时间顺序,强调对象之间消息的发送顺序,同时显示对象之间的交互过程 |
包图 (Package Diagrams) | 对构成系统的模型元素进行分组整理的图 |
组合结构图 (Composite Structure Diagrams) | 表示类或者构建内部结构的图 |
时间图 (Timing Diagrams) | 用来显示随时间变化,一个或多个元素的值或状态的更 改,也显示时控事件之间的交互和管理它们的时间和期限约束 |
交互概览图 (Interaction Overview Diagrams) | 用活动图来表示多个交互之间的控制 关系的图 |
用例图 (Usecase Diagrams) | 用来描述用户的需求,从用户的角度描述系统的功能, 并指出各功能的执行者,强调谁在使用系统,系统为执行者完成哪些功能 |
UML绘图规范
类图
-
定义
在 UML 2.0 的 13 种图形中,类图是使用频率最高的 UML 图之一。类图是描述系统 中的类,以及各个类之间的关系的静态视图。能够让我们在正确编写代码以前对系统有 一个全面的认识。类图是一种模型类型,确切的说,是一种静态模型类型。类图表示类、 接口和它们之间的协作关系,用于系统设计阶段。 -
类图表示
类图用三个矩形表示,最上面的部分标识类的名称;中间的部分标识类的属性;最下 面的部分标识类的方法,如下图所示:
-
类与类之间的关系
类与类之间的关系主要有六种:关联、聚合、组合、继承、实现和依赖,这六种关系的箭头表示如下:
-
案例图
下张图为《大话设计模式》书中,对动物衍生关系描述的类图。结合图片下方记忆方法,学习理解上述类与类之间关系。
记忆方法(笔者悟出来的:分组对比记忆法):
- 组合 / 聚合:虚线/实现 - 菱形箭头
- 继承 / 实现:虚线/实现 - 空心三角箭头
- 关联 / 依赖:虚线/实现 - 线状三角箭头
注意:
扫描二维码关注公众号,回复: 17404035 查看本文章![]()
- UML类图中无实心三角箭头;
- 双向关联关系可省略箭头 - 用横线表示;
- 箭头子类指向父类(遵循法则 - 先有的谁后有的谁,先指向后);
- 圆圈也表示接口;
时序图
-
定义
时序图描述对象之间消息的发送顺序,强调时间顺序。时序图是一个二维图,横轴表示对象,纵轴表示时间,消息在各对象之间横向传递,依照时间顺序纵向排列。用箭头表示消息、用竖虚线表示对象生命线。 -
作用
1、 展示对象之间交互的顺序,将交互行为建模为消息传递,通过描述消息是如何在对象间发送和接收来动态展示对象之间的交互;
2.、相对于其他 UML 图,时序图更强调交互的时间顺序;
3.、可以直观的描述并发进程。 -
组成元素
角色 (Actor):系统角色,可以是人、机器、其他系统、子系统;在时序图中以一个小人图标表示;
对象 (Object):对象位于时序图的顶部,以一个矩形表示;
- 对象的三种命名方式:第一种方式对象名和类名。例如:苹果手机: 手机、在时序图中,用“对象: 类” 表示;第二种方式只显示类名,即表示它是一个匿名对象,例如:: 手机;在时序图中,用 “: 类”表示; 第三种方式只显示对象名不显示类名,例如:华为手机: ;在时序图中,用“对象:”表示。
- 命名方式的选择 三种命名方式均可,哪种最容易让阅读该时序图的人理解,就选择哪种。
- 对象的排列顺序 对象的左右顺序并不重要,但是为了作图清晰整洁,通常应遵循以下两个原则:把交 互频繁的对象尽可能的靠拢;把初始化整个交互活动的对象放置在最左端。
生命线 (Lifeline):在时序图中表示为从对象图标向下延伸的一条虚线,表示对象存在的时间。以一条垂直的虚线表;
控制焦点 (Activation):又称为激活期,表示时间段的符号,在这个时间段内对象将执行相应的操作。可以理解为Java语言中一对大括号{ }中的内容。以一个很窄的矩形表示;
消息 (Message):消息分为三种类型 ;
- 消息一般分为同步消息(Synchronous Message):消息的发送者把控制传递给消息的接收者,然后停止活动,等待消息的接收者放弃或者返回控制。用来表示同步的意义。 以一条实线和实心箭头表示;
- 异步消息(Asynchronous Message):消息发送者通过消息把信号传递给消息的接收者,然后继续自己的活动,不等待接受者返回消息或者控制。异步消息的接收者和发送者是并发工作的。以一条实线和大于号表示;
- 返回消息(Return Message):返回消息表示从过程调用返回。以小于号和虚线表示;
自关联消息:表示方法的自身调用或者一个对象内的一个方法调用另外一个方法。以一个半闭合的长方形+下方实心剪头表示;
组合片段:组合片段用来解决交互执行的条件和方式,它允许在序列图中直接表示逻辑组件,用于通过指定条件或子进程的应用区域,为任何生命线的任何部分定义特殊条件和子进程。
-
绘制步骤
1、划清边界,识别交互的语境;
2、将所要绘制的交互场景中的角色以及对象梳理出来;
3、从触发整个交互的某个消息开始,在生命线之间从上到下依次画出所有消息,并注明每个消息的特性(如参数等)。 -
案例
大家好,我是猿医生 ~
在码农的大道上,唯有自己强才是真正的强者,求人不如求己,静下心来,开始行动吧…