转自知乎:https://zhuanlan.zhihu.com/p/158693052
1.3 UML结构
UML结构通常包括以下4个部分:视图,图,模型元素以及通用机制。
1.3.1 视图
UML视图用于从不同的角度来表示待建模的系统。视图是由许多图形组成的一个抽象集合,在建立一个系统模型时,只有通过定义多个视图,每个视图显示该系统的一个特定方面,才能构造出该系统的完整蓝图。
UML视图包括:
- 用户视图:以用户的观点表示系统的目标,是所有视图的核心,用于描述系统的需求
- 结构视图:系统的静态行为,描述系统的静态元素,比如包,类,对象以及它们之间的关系
- 行为视图:系统的动态行为,描述系统的组成元素在系统运行时的交互关系
- 实现视图:系统中逻辑元素的分布,描述系统中物理文件以及它们之间的关系
- 环境视图:系统中物理元素的分布,描述系统中硬件设备以及他们之间的关系
1.3.2 图
UML图是描述UML视图内容的图形,UML2.0提供了13种图,分别是用例图,类图,对象图,包图,组合结构图,状态图,活动图,顺序图,通信图,定时图,交互概览图,组件图和部署图。其中:
- 用例图对应用户视图
- 类图,对象图,包图和组合结构图对应结构视图
- 状态图,活动图,顺序图,通信图,定时图和交互概览图对应行为视图
- 组件图对应实现视图
- 部署图对应环境视图
1.3.3 模型元素
模型元素是指UML图中所使用的一些概念,对应于普通的面向对象概念,如类,对象,消息以及这些概念之间的关系,如关联关系,泛化关系等。
1.3.4 通用机制
UML提供的通用机制为模型元素提供额外的注释,信息和语义,这些通用机制也提供了扩展机制,允许用户对UML进行扩展,如定义新的建模元素,扩展原有的语义,添加新的特殊信息来扩展模型元素的规则说明等,以便适用于特定的方法或过程,组织和用户。
2 UML类图
2.1 类图
类封装了数据和行为,是具有相同属性,操作,关系的对象集合的总称。类图是用出现在系统中不同类来描述系统的静态结构,主要描述不同的类以及它们之间的关系。
在UML中,类图包含类名,属性以及操作。如下面的Employee类:
类一般由三部分组成:
- 类名
- 属性
- 操作
2.1.1 类名
类名就是类的名字,一个字符串。
2.1.2 属性
类的成员变量,一般的格式为
可见性 名称 : 类型 [ = 默认值]
可见性表示该属性对于类外的元素是否可见,包括:
- 公有:
+
- 私有:
-
- 受保护:
#
- 包:
~
2.1.3 操作
UML规定操作的定义方式为:
可见性 名称(参数列表)[ : 返回类型]
- 可见性与属性可见性的定义一致
- 参数列表表示方法的参数,语法与属性定义类似,用
,
分隔
2.2 类之间的关系
UML提供了四种不同的方式表示类与类之间的关系:
- 关联关系
- 依赖关系
- 泛化关系
- 接口与实现关系
下面逐个看一下。
3 关联关系
关联关系是一种结构化关系,用于表示一类对象与另一类对象之间有联系。在UML中用实线连接有关联关系的类。可以在关联线上标注角色名,关系的两端代表两种不同的角色,因此在一个关联关系中可以包含两个角色名,角色名不是必须的,但可以使类之间的关系更加明确。
例如在一个登录界面类LoginForm
包含一个JButton
:
UML中关联通常包括以下六种形式:
- 双向关联
- 单向关联
- 自关联
- 多重性关联
- 聚合关系
- 组合关系
3.1 双向关联
默认情况下关联是双向的,例如顾客购买商品并拥有商品,反之卖出的商品总是某个顾客与之相关联:
3.2 单向关联
关联也可以是单向的,在UML中关联用带箭头的实线表示,比如顾客拥有地址:
3.3 自关联
系统中可能会存在一些类的属性对象类型为该类本身,这种特殊的关联关系为自关联,常见于链表:
3.4 多重性关联
多重性关联又称为多重性关联联系,表示两个关联对象在数量上的对应关系。在UML中,对象之间的多重性可以直接在关联直线上用一个数字或者一个数字范围来表示。常见的表示方式如下:
例如一个界面可以具有0个或多个按钮,但是一个按钮只能从属于一个界面:
3.5 聚合关系
聚合关系表示整体与部分的关系,使用空心菱形表示。聚合关系中部分是整体的一部分,但是部分可以脱离整体独立存在,比如引擎是汽车的一部分,但是引擎可以独立于汽车存在:
3.6 组合关系
组合关系也表示整体与部分之间的关系,但是部分不能脱离整体存在。组合关系使用实心菱形表示。比如人的头和嘴巴是组合关系:
4 依赖关系
依赖关系是一种使用关系,在需要表示“一个事物使用另一个事物”时使用依赖关系。UML中依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。例如驾驶员开车,开车需要车,也就是驾驶员依赖于车:
5 泛化关系
泛化关系也就是继承关系,用于描述父类与之类之间的关系,父类又叫基类或者超类,子类又称作派生类。UML中泛化关系用带空心三角形的直线表示,箭头指向基类:
6 接口与实现关系
很多语言比如Java,C#都有接口的概念,接口通常没有属性,所有是操作都是抽象的,只有操作的声明没有操作的实现。UML中使用<<Interface>>
表示接口:
类与接口之间的实现关系使用空心三角形+虚线表示: