目录
[5.1 关联关系(Association)](#5.1 关联关系(Association))
[5.2 聚合关系(Aggregation)](#5.2 聚合关系(Aggregation))
[5.3 组合关系(Composition)](#5.3 组合关系(Composition))
[5.4 依赖关系(Dependency)](#5.4 依赖关系(Dependency))
[5.5 继承关系(Inheritance)或泛化关系(Generalization)](#5.5 继承关系(Inheritance)或泛化关系(Generalization))
[5.6 实现关系(Realization)](#5.6 实现关系(Realization))
(接上篇,序号延续)
五、类图中的6种关系
在UML(统一建模语言)类图中,类之间的关系是描述软件系统结构和行为的关键部分。从专业的角度来看,类图中主要存在以下几种关系:
5.1 关联关系(Association)
- 定义:关联表示两个类之间的结构性连接,它说明一个类的对象可以与另一个类的对象有连接。关联可以是双向的或单向的,也可以有特定的名称、角色和多重性。
- 例子 :在订单处理系统中,
Customer
(客户)类和Order
(订单)类之间可能有一个关联关系,表示一个客户可以下多个订单。 - 图形:通常使用实线表示。
- 箭头:无特定箭头,但线的两端连接相关的类。
- 示例:一条实线连接两个类。
java
public class Customer {
private String name;
// ... 其他属性和方法 ...
}
public class Order {
private Customer customer;
// ... 其他属性和方法 ...
}
5.2 聚合关系(Aggregation)
- 定义:聚合是一种表示"整体-部分"关系的二元关联,其中整体和部分都是独立的对象,但整体包含部分。聚合是关联的一种特殊形式,具有方向性,并通过一个空心菱形表示。
- 例子 :在车辆类中,
Car
(汽车)和Wheel
(轮子)之间可以有聚合关系,表示汽车由轮子等组成,但轮子可以独立于汽车存在。 - 图形:使用带有空心菱形的实线表示。
- 箭头:空心菱形一端指向整体,线的另一端指向部分。
- 示例 :空心菱形连接
Car
类,线的另一端连接Wheel
类。
java
public class Car {
private Wheel wheel;
// ... 其他属性和方法 ...
}
public class Wheel {
// ... 轮的属性和方法 ...
}
5.3 组合关系(Composition)
- 定义:组合也是一种"整体-部分"的关系,与聚合类似,但更为强烈。在组合中,当整体被销毁时,部分也会被销毁。组合关系通过实心菱形表示。
- 例子 :
House
(房子)和Room
(房间)之间可能存在组合关系,因为房子被销毁时,房间通常也会不复存在。 - 图形:使用带有实心菱形的实线表示。
- 箭头:实心菱形一端指向整体,线的另一端指向部分。
- 示例 :实心菱形连接
House
类,线的另一端连接Room
类。
java
public class House {
private Room room;
// ... 其他属性和方法 ...
public House() {
room = new Room(); // 创建房间作为房子的一部分
}
}
public class Room {
// ... 房间的属性和方法 ...
}
5.4 依赖关系(Dependency)
- 定义:依赖表示一个类依赖于另一个类的定义。这种依赖通常是因为一个类使用了另一个类的某些信息或功能,而这种使用是通过参数传递、方法调用或访问静态成员等方式实现的。依赖关系用带箭头的虚线表示。
- 例子 :如果
ClassA
中的方法使用了ClassB
的一个对象作为参数,那么ClassA
就依赖于ClassB
。 - 图形:使用虚线表示。
- 箭头:虚线带有箭头,箭头指向被依赖的类。
- 示例 :虚线箭头从
ClassA
指向ClassB
。
java
public class ClassA {
public void methodA(ClassB classB) {
// 使用 ClassB 的对象进行操作...
}
}
public class ClassB {
// ... ClassB 的属性和方法 ...
}
5.5 继承关系(Inheritance)或泛化关系(Generalization)
- 定义:继承表示一个类是另一个类的特化形式。子类继承了父类的所有属性和操作,还可以添加自己特有的属性和操作。继承关系用带空心三角形的实线表示,箭头指向父类。
- 例子 :在图形界面中,可以有
Shape
(形状)类作为基类,而Circle
(圆形)和Rectangle
(矩形)类作为它的子类。 - 图形:使用虚线表示。
- 箭头:虚线带有箭头,箭头指向被依赖的类。
- 示例 :虚线箭头从
ClassA
指向ClassB
。
java
public class Shape {
// ... 形状的通用属性和方法 ...
}
public class Circle extends Shape {
// ... 圆形的特有属性和方法 ...
}
5.6 实现关系(Realization)
- 定义:实现关系用于表示类与接口之间的关系,即类实现了接口中声明的所有操作。实现关系用带空心三角形的虚线表示,箭头指向接口。
- 例子 :如果一个
Button
类实现了一个Clickable
接口,那么Button
类和Clickable
接口之间就存在实现关系。 - 图形:使用虚线表示。
- 箭头:虚线带有空心三角形,箭头指向接口。
- 示例 :空心三角形连接
Button
类,箭头指向Clickable
接口。
java
public interface Clickable {
void click(); // 接口中声明的方法...
}
public class Button implements Clickable {
@Override
public void click() {
// 实现点击操作...
}
}
这些关系是UML类图中描述软件系统结构和行为的基础工具,它们提供了丰富的语义和可视化手段来帮助开发人员更好地理解和设计软件系统。
六、关联的几种形式
关联关系(Association)是类与类之间最常用的一种关系,表示两个类之间存在某种连接。这种连接可以是一般的关联,也可以是更为特殊的聚合和组合关系。
在UML中,关联关系可以通过多种方式进一步详细描述,其中包括多重性(Multiplicity)。多重性用来表示类之间关联的数量。常见的多重性表示有:
1
:表示一个实例必须与另一个类的一个实例相关联。0..1
:表示一个实例可以与另一个类的一个实例相关联,或者不与任何实例相关联。*
或不指定:表示一个实例可以与另一个类的任意数量的实例相关联。n..m
:表示一个实例可以与另一个类的n到m个实例相关联。
多重性在关联关系的两端都可以指定,用来更精确地描述类之间的连接。例如,在订单和商品的关系中,一个订单可能包含多个商品,但每个商品只能属于一个订单。这样的关系可以通过在订单端指定*
和在商品端指定1
来表示。
此外,关联关系还可以通过角色(Role) 、导航性(Navigability)、关联类(Association Class)等属性来进一步详细描述。角色用于给关联关系的端点命名,以便更清晰地表达关系的含义;导航性用于表示是否可以从一个类的实例导航到另一个类的实例;关联类用于表示关联本身具有属性和操作的情况。
总的来说,关联关系是UML中描述类与类之间连接的基础工具,通过不同的属性和标记,可以精确地表达类之间各种复杂的连接关系。
(未完,下次我们来学习序列图。)