Appearance
UML
UML(类图 Class Diagram)是现实模式的静态结构,特别是模型中存在的类、类的内部结构以及他们与其他类的关系等。类图不显示暂时性的信息。类图是面向对象建模的主要组成部分
类图的作用
在软件工程中,类图是一种静态的结构图,描述了系统的类的集合,类的属性和类之间的关系,可以简化了系统人员对系统的了解。
类图是系统分析和设计阶段的重要产物,是系统编码和测试重要模型
类图表示法
类的表示方式
在UML类图中,类使用包含类名、属性(field)和方法(method)且带有分隔线的矩形来表示比如下图表示一个Employee类,包含了name、age和address这3个属性,以及word()方法
属性、方法名称前的(+ - #)表示这个属性、方法的可见性,UML类图表示可见性的符号有如下三种:
- +:表示public
- -:表示privtae
- #:表示protected
属性的完整表示方式是:可见性 属性名称 :类型 [ = 默认值]
方法的完整表示方式是:可见性 方法名称(参数列表) [ :返回类型]
注意:
- 中括号的内容表示是可选的
- 也有将类型方法属性名前面,返回值类型放在方法名前面
类与类之间关系的表示方式
关联关系
关联关系是对象之间的一种引用关系,用来表示一类对象与另一类对象之间的联系,如:老师与学生、师傅与徒弟、丈夫与妻子等。关联关系是类于类之间最常用的一种关联关系,分为:一般关联关系(单项关联、双向关联、自关联)、聚合关系和组合关系
一般关联关系
单向关联
- 在UML类图中单项关联用一个带箭头的实线表示。下图表示每个顾客都有一个地址,这通过让Customer类持有一个类型为Address的成员变量类的实现
双向关联
- 在UML类图中,双线关联用一个不带箭头的直线表示。如下图所示,双向关联就是双方各自持有对方类型的成员变量,Customer类中万户一个
List<Product>
,表示一个顾客可以购买多个商品;在product类中维护一个Customer类型的成员变量,表示这个产品被哪个顾客所购买
自关联
- 自关联在UML类图中用一个带箭头且指向自身的线表示。下图的意思就是Node类包含类型为Node的成员变量,也就是"自己包含自己"
聚合关系
聚合关系是关联关系的一种,是强关联关系,是整体和部分之间的关系
聚合关系也是通过成员变量来实现的,其中成员变量是整体对象的一部分,但是成员变量可以脱离整体对象而独立存在。例如:学校与老师的关系,学校包含老师,但是吐过学校停办了,老师依然存在。
在UML类图中,聚合关系可以用带空心菱形的实线来表示,菱形指向整体。如下图所示:大学和教师的关系
组合关系
- 组合表示类之间的整体与部分的关系,但它是一种更强烈的聚合关系
- 在组合关系中,整体对象可以控制部分对象的生命周期,一旦整体对象不存在,部分对象也将不存在,部分对象不能脱离整体对象而存在。例如:头部和嘴巴
- 在UML类图中,组合关系用带实心菱形的实线来表示,菱形指向整体。如下图:头部和嘴巴的关系图
依赖关系
- 依赖关系是一种使用关系,它是对象之间耦合度最弱的一种关联方式,是临时性关联。在代码中,某个类的方法通过局部变量、方法的参数或者静态方法的调用来访问另一个类(被依赖类)中的某些方法来完成一些职责。
- 在UML类图中,依赖关系使用带箭头的虚线来表示,箭头指向被依赖的类。如下图所示:司机和汽车的关系图,司机驾驶汽车
继承关系
- 继承关系是对象之间耦合度最大的一种关系,表示一般与特殊的关系,是父类与子类的关系,是一种继承关系。
- 在UML类图中,泛化关系用带空心三角箭头的实线来表示,箭头从子类指向父类。在代码实线中,使用面向对象的继承机制来实线泛化关系。例如:Student类和Teacher类都是Person类的子类
实现关系
- 实现关系是接口与实现类之间的关系。在这种关系中,类实现了接口,类中的操作实现了接口中所声明的所有的抽象操作
- 在UML类图中,实现关系使用带空心三角箭头的虚线来表示,箭头从实现类指向接口。例如:汽车和船实现了交通工具,其类图如下所示