什么是UML?
官方定义:
统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言。
UML 使用面向对象设计的的建模工具,但独立于任何具体程序设计语言。在软件设计阶段使用
自己理解的:
UML是描述事物与事物之间的关系的工具,让人能够相对轻松的看清楚系统的构成成分(面向对象系统的构成成分全是类),以及这些成分之间是怎么协同工作的!
UML中的图,关系,事物有哪些?
类图
- 类图是使用频率最高的 UML 图之一。
- 类图是描述系统中的类,以及各个类之间的关系的静态视图。
- 它能够让我们在正确编写代码以前对系统有 一个全面的认识。
- 类图是一种静态模型类型。类图表示类、 接口和它们之间的协作关系,用于系统设计阶段。
例子
类图用三个矩形表示,最上面的部分标识类的名称;中间的部分标识类的属性;最下面的部分标识类的方法,如下图所示:
- +表示 public
- -表示 private
- #表示 protected
- ~ 表示 default,可省略不写。
- 字段和方法返回值的数据类型非必须。
- 抽象类或抽象方法用斜体表示。
- 静态类或静态方法加下划线。
- 如果是接口在类名上方加<>。
类与类之间的关系主要有六种:关联、聚合、组合、继承、实现和依赖,这六种关系的箭头表示如下:
注意:UML 类关系图中,没有实心箭头。
下面用具体实例来说上面的这6种关系
继承关系
实现关系
接口(包括抽象类)是方法的集合,在实现关系中,类实现了接口,类中的方法实现了接口声明的所有方法。例如:汽车和轮船都是交通工具,而交通工具只是一个可移动工具的抽象概念,船和车实现了具体移动的功能。
组合关系
组合关系表示类之间整体与部分的关系,整体和部分有一致的生存期。一旦整体对象不存在,部分对象也将不存在,是同生共死的关系。例如:人由头部和身体组成,两者不可分割,共同存在。
自己的理解
public Class A
{
private B b=new B();
public B getB(){
return b;
}
}
聚合关系
聚合关系也表示类之间整体与部分的关系,成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在。例如:公交车司机和工衣、工帽是整体与部分的关系, 但是可以分开,工衣、工帽可以穿在别的司机身上,公交司机也可以穿别的工衣、工帽。
自己的理解
public Class A
{
private B b;
public void setB(B b){
this.b=b;
}
public B getB(){
return b;
}
}
关联关系
关联关系是类与类之间最常用的一种关系,表示一类对象与另一类对象之间有联系。 组合、聚合也属于关联关系,只是关联关系的类间关系比其他两种要弱。 关联关系有四种:双向关联、单向关联、自关联、多重数关联。例如:汽车和司机, 一辆汽车对应特定的司机,一个司机也可以开多辆车。
在多重性关系中,可以直接在关联直线上增加一个数字,表示与之对应的另一个类的对象的个数。
- 1…1:仅一个
- 0…*:零个或多个
- 1…*:一个或多个
- 0…1:没有或只有一个
- m…n:最少 m、最多 n 个 (m<=n)
依赖关系
大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数。
- 各类关系从强到弱依次是:继承→实现→组合→聚合→关联→依赖。
案例分析
生活案例之动物衍生关系图
根据上面的6种关系就很好理解和编码了
时序图
时序图的定义
时序图描述对象之间消息的发送顺序,强调时间顺序。时序图是一个二维图,横轴表示对象,纵轴表示时间,消息在各对象之间横向传递,依照时间顺序纵向排列。用箭头表示消息、用竖虚线表示对象生命线。
时序图的作用
- 展示对象之间交互的顺序。将交互行为建模为消息传递,通过描述消息是如何在对象间发送和接收的来动态展示对象之间的交互;
- 相对于其他UML图,时序图更强调交互的时间顺序;
- 可以直观的描述并发进程
时序图的组成要素(这些文字不大好理解可以先跳过不看,直接看图会清楚一些)
- 角色(Actor):系统角色,可以是人、机器、其他系统、子系统;在时序图中用表示。
- 对象(Object):
1、对象的三种命名方式 第一种方式包括对象名和类名,例如:直播课时:课时,在时序图中,用“对象:类” 表示;
第二种方式只显示类名,即表示它是一个匿名对象,例如: :课程;在时序图中,用 “:类”表示;
第三种方式只显示对象名不显示类名,例如:讲师;在时序图中,用“对象”表示。
2、命名方式的选择三种命名方式均可,哪种最容易让阅读该时序图的人理解,就选择哪种。
3、对象的排列顺序 对象的左右顺序并不重要,但是为了作图清晰整洁,通常应遵循以下两个原则:把交互频繁的对象尽可能的靠拢;把初始化整个交互活动的对象放置在最左端。 - 生命线(Lifeline): 在时序图中表示为从对象图标向下延伸的一条虚线,表示对象存在的时间。
- 控制焦点(Focus of Control):又称为激活期,表示时间段的符号,在这个时间段内对象将执行相应的操作。可以理 解为 Java 语言中一对大括号{ }中的内容;用小矩形表示。
- 消息(Message) :消息一般分为同步消息(Synchronous Message),异步消息(Asynchronous Message)和返回消息(Return Message)。
1、消息的发送者把控制传递给消息的接收者,然后停止活动,等待消息的接收者放 弃或者返回控制。用来表示同步的意义;
2、消息发送者通过消息把信号传递给消息的接收者,然后继续自己的活动,不等待接 受者返回消息或者控制。异步消息的接收者和发送者是并发工作的。
3、返回消息表示从过程调用返回。 - 自关联消息 :表示方法的自身调用或者一个对象内的一个方法调用另外一个方法。
- 组合片段 :组合片段用来解决交互执行的条件和方式,它允许在序列图中直接表示逻辑组件,用 于通过指定条件或子进程的应用区域,为任何生命线的任何部分定义特殊条件和子进程。 组合片段共有 13 种,名称及含义如下:
1、抉择(Alt)
抉择在任何场合下只发生一个序列。 可以在每个片段中设置一个临界来指示该片段 可以运行的条件。else 的临界指示其他任何临界都不为 True 时应运行的片段。如果所有临界都为 False 并且没有 else,则不执行任何片段。
2、选项(Opt)
包含一个可能发生或不发生的序列;
3、循环(Loop)
片段重复一定次数,可以在临界中指示片段重复的条件。
4、并行(Par)
时序图的画法和实操
画法
- 划清边界,识别交互的语境;
- 将所要绘制的交互场景中的角色以及对象梳理出来;
- 从触发整个交互的某个消息开始,在生命线之间从上到下依次画出所有消息,并注明每个消息的特性(如参数等)