UML,即统一建模语言,是软件行业主要的建模语言,用于分析、明确说明、设计软件系统。
UML12.0支持13种图,可以分为两类:结构图和行为图。
而UML结构图用于表示系统中元素的静态结构,结构图包括:包图、类图、构件图、部署图、对象图、组合结构图。
类图
类图用来描述系统的静态结构,用来描述不同的类以及它们之间的关系。
在UML类图中一共包含三种模型元素,分别是:
- 类
- 接口
- 类之间的关系
单个类的UML表示方法
通俗地讲,每一个类的UML分为三个由横线分隔的区域。
- 标出类名,类名就是一个字符串
- 标出类中的属性,即类的成员变量,格式大体如下:
可见性 名称 :类型[= 默认值] - 标出类中的操作,即类的成员方法,格式大体如下:
可见性 名称(参数列表) :返回类型
属性与操作的可见性:
+表示public表示protected
-表示private
~表示默认,或者包内可见
类之间的六种关系
类之间的关系大体可以分类如下:
- 横向关系
- 依赖
- 关联
- 聚合
- 组合
- 纵向关系
- 泛化
- 实现
泛化
表示类与类之间/接口与接口之间的一种继承关系,指定了子类如何特化父类的所有特征和行为。
- 对于抽象方法和抽象类名,用斜体表示
- 使用带空心的三角箭头的实线表示,箭头指向父类
- 简记,箭头指向谁,就继承谁(宾语)
实现
实现也是一种继承,表示类是接口所有特征和行为的实现。
- 使用带三角箭头的虚线表示,箭头指向接口类。
- 简记,箭头指向谁,就实现谁(宾语)
依赖
对于两个相对独立的对象,当一个对象构造另一个对象的实例时,这两个对象之间主要体现为依赖关系。
依赖关系可以通过三种方式实现:
某一个类的方法使用另一个类的对象作为参数
在一个类的方法中将另一个类的对象作为其局部变量
在一个类的方法中调用另一个类的静态方法
- 使用带箭头的虚线,指向被使用者或者被创建者
- 可以将依赖关系理解为一种使用的关系,即“use-a”关系
- 这种使用的关系是一种具有偶然性、临时性的弱关系
- 简记,箭头指向谁,就依赖谁(宾语)
关联
两个相对独立的对象之间存在固定的对应关系时,它们之间为关联关系。
关联关系是两个类之间一种强的依赖关系,是长期性的,可以理解为“has-a”的关系。
- 单向关联:类B作为了类A的成员变量
- 使用带普通箭头的实心线表示,箭头指向被拥有者
- 简记,箭头指向谁,就拥有谁(宾语)
- 双向关联:B中有A,A中有B
- 使用带有两个箭头或者没有箭头的实心线表示
- 自关联:自己包含自己
每一种关联关系的连线表示,需要标注出关联名、关联端点名和关联重数
聚合
聚合属于关联,耦合度强于关联,仅仅在语义上有所区别。简单点说,聚合关系强调的是“整体”包含“部分”,但是“部分”可以脱离“整体”而单独存在。
- 表示方式是带空心菱形的实线,菱形紧靠整体,另一端指向被拥有者。
组合
一种比聚合还强的关系,要求代表整体的对象负责代表部分的对象的生命周期。
- 表示方式是带实心菱形的实线,菱形紧靠整体。
UML中的注释
UML中的限制
对象图
对象图用于呈现系统在特定时刻的对象(Object),以及对象之间的链接。
- 对象图中仅仅声明类名也没有对象名,则称之为匿名对象;
- 对象图不显示操作,因为所有对象都有着相同的操作。
包图
将相关的、欲放置在一起的东西打包成箱。
包的内部可以放置:包、用例图、类图、组件图等等。
- 元素的导入:可以将包内的任意元素导入到另一个包中,需用到import关键字。
组件图
显示一组组件以及它们之间的相互关系。