一、关联关系

关联关系(Association)是类与类之间最常用的一种关系,它是一种结构化关系,用于表示一类对象与另一类对象之间有联系,如汽车与轮胎,师傅与徒弟,班级和学生等。通常将一个类的对象作为另一个类的属性

如何设计类java 如何设计类之间的关系_关联关系

(1)双向关联

默认情况下,关联是双向的

如何设计类java 如何设计类之间的关系_关联关系_02

(2)单向关联

类的关联关系也可以是单向,单项关联用箭头的实线表示

如何设计类java 如何设计类之间的关系_类对象_03

(3)自关联

 在系统中可能会存在一些类的属性对象为该类本身,这种特殊的关联关系称之为自关联。

如何设计类java 如何设计类之间的关系_如何设计类java_04

(4)多重性关联

重数性关联关系又称为多重性关联关系(Multiplicity),表示一个类的对象与另一个类的对象连接的个数。在UML中多重性关系可以直接在关联直线上增加一个数字表示与之对应的另一个类的对象的个数。

表示方式

多重性说明

1..1

表示另一个类的一个对象只与一个该类对象有关系

0..*

表示另一个类的一个对象与零个或多个该类对象有关系

1..*

表示另一个类的一个对象与一个或多个该类对象有关系

0..1

表示另一个类的一个对象没有或只与一个该类对象有关系

m..n

表示另一个类的一个对象与最少m、最多n个该类对象有关系 (m<=n)

例:

如何设计类java 如何设计类之间的关系_类对象_05

方法1:使用数组

如何设计类java 如何设计类之间的关系_依赖关系_06

 

 

方法2:使用集合框架

如何设计类java 如何设计类之间的关系_依赖关系_07

     or

如何设计类java 如何设计类之间的关系_如何设计类java_08

 

 

 

 (5)聚合关系

聚合关系(Aggregation)表示一个整体与部分的关系。通常在定义一个整体类后,再去分析这个整体类的组成结构,从而找出一些成员类,该整体类和成员类之间就形成了聚合关系。如:一天计算机包含显示器、主机、键盘。聚合关系中,成员类是整体类的一部分,但是成员对象可以脱离整体对象独立存在,UML中,聚合关系用带空心的菱形直线表示

如何设计类java 如何设计类之间的关系_如何设计类java_09

 

(6)组合关系

组合关系(Composition)表示类之间整体和部分的关系,但是组合关系中部分和整体具有统一的生命周期。一旦整体对象不存在,部分对象也将会不存在,部分和整体对象之间具有同生共死的关系。在组合关系中,成员对象是整体对象的一部分,而整体对象可以控制成员对象的生命周期,即成员对象的存在依赖于整体对象,UML中组合关系用带实心菱形的直线表示

如何设计类java 如何设计类之间的关系_依赖关系_10

 

二、依赖关系

依赖关系(Dependency)是一种使用关系,特定事物的改变有可能会影响到使用该事物的其他事物,在需要表示一个事物使用另一个事物时使用依赖关系。在UML中,依赖关系用带箭头的虚线表示,由依赖的一方指向被依赖的一方。

在系统实现阶段,依赖关系通常通过三种方式实现:

(1)将一个类的对象作为另一个类中方法的参数

(2)在一个类的方法中将另一个类的对象作为其局部对象

(3)在一个类的方法中调用另一个类的静态方法

如何设计类java 如何设计类之间的关系_依赖关系_11

 

三、泛化关系

泛化关系(Generalization)也就是继承关系,也成为is-a-kind-of关系,泛化关系用于描述父类与子类之间的关系,父类又称作基类或超类,子类又称作派生类。在代码实现时,使用面向对象的继承机制来实现泛化关系,JAVA中使用extendes关键字,C#/C++使用“:”来实现。在UML用带空心三角形的直线来表示

如何设计类java 如何设计类之间的关系_类对象_12

 

四、接口与实现关系

接口:一组操作的集合,只有操作的声明而没有实现

接口与实现的关系:接口之间也可以有与类之间关系类似的继承关系和依赖关系,但是接口和类之间还存在一种实现关系(Realization),在这种关系中,类实现了接口,类中的操作实现了接口中所声明的操作。在UML中,类与接口之间的关系用带空心三角形的虚线来表示。

如何设计类java 如何设计类之间的关系_关联关系_13

 

五、参考文献

《设计模式实训教程(第二版)》——刘伟