UML类图中的六大关系:关联、聚合、组合、依赖、继承、实现

发布时间:2025-11-17 15:10

一、简介

       在 UML 类图中,类之间的关系可以分成:关联 (association)、聚合 (aggregation)、组合 (composition)、依赖 (dependency)、泛化 (generalization)/ 继承 (inheritance) 和实现 (realization)。这六种关系如下图所描绘:

      

       上面的关系可以解读如下:

(关联) Association:A 类有 B 类有逻辑上的连接 (聚合) Aggregation : A 类有一个 B 类 (组合) Composition : A 类拥有一个 B 类 (依赖) Dependency : A 类使用了 B 类 (继承) Inheritance : B 类是一个 A 类  (或者 B 类扩展 A 类) (实现) Realization : B 类实现了接口 A      

本篇文章主要是展示在 Java 中如何表示这些关系 , 以便我们可以更好地理解这些关系并且知道如何以及何时使用每一种关系。

二、关联 (association)

       关联描述两个类之间行为的一般二元关系。例如,一个学生选修一门特定的课程是学生类 Student 和课程类 Course 之间的一个关联,而一个教师教授一门课程是师资类 Faculty 和课程类 Course 之间的一个关联。Java 代码中,关联可以用属性和方法来实现。

public class Student { private Course[] courses; public void addCourse(Course s) { . . . . . . } } public class Course { private Strudent[] students; private Faculty faculty; public void addStudent(Student s) { . . . . . . } public void setFaculty(Faculty faculty) { this.faculty = faculty; } } public class Faculty { private Course[] courses; public void addCourse(Course s) { . . . . . . } }

三、聚合 (Aggregation)

      聚合是一种特殊的关联 (Association) 形式,表示两个对象之间的所属 (has-a) 关系。所有者对象称为聚合对象,它的类称为聚合类;从属对象称为被聚合对象,它的类称为被聚合类。例如,一个公司有很多员工就是公司类 Company 和员工类 Employee 之间的一种聚合关系。被聚合对象和聚合对象有着各自的生命周期,即如果公司倒闭并不影响员工的存在。

public class Company { private List<Employee> employees; } public class Employee { private String name; }

四、组合 (Composition)  

       聚合是一种较弱形式的对象包含 (一个对象包含另一个对象) 关系。较强形式是组合 (Composition). 在组合关系中包含对象负责被包含对象的创建以及生命周期,即当包含对象被销毁时被包含对象也会不复存在。例如一辆汽车拥有一个引擎是汽车类 Car 与引擎类 Engine 的组合关系。下面是组合的一些例子。

      

(1) 通过成员变量初始化   

public class Car { private final Engine engine = new Engine(); } class Engine { private String type; }

      (2) 通过构造函数初始化  

public class Car { private final Engine engine; public Car(){ engine = new Engine(); } } public class Engine { private String type; }      

(3) 通过延迟初始化

public class Car { private final Engine engine; public Engine getEngine() { if (null == engine) { engine = new Engine(); } return engine; } } public class Engine { private String type; }

五、依赖 (Dependency)

      依赖 (Dependency) 描述的是一个类的引用用作另一个类的方法的参数。例如,可以使用 Calendar 类中的 setTime (Date date) 方法设置日历,所以 Calendar 和 Date 之间的关系可以用依赖描述。

public abstract class Calendar implements Serializable, Cloneable, Comparable<Calendar> { public final void setTime(Date date) { setTimeInMillis(date.getTime()); } . . . . . . }

       在依赖关系中,类之间是松耦合的。

六、继承 (Inheritance)

      继承 (Inheritance) 模拟两个类之间的 is-a 关系。强是 (strong is-a) 关系描述两个类之间的直接继承关系。弱是 (weak is-a) 关系描述一个类具有某个属性。强是关系可以用类的继承表示。例如,Spring 的 ApplicationEvent 是一个 EventObject,ApplicationEvent 和 EventObject 间就是一种强是关系,可以用继承描述。

public abstract class ApplicationEvent extends EventObject { . . . . . . }

七、实现 (Realization)

      实现 (Realization) 描述的是一个类实现了接口(可以是多个)。上面描述的弱是 (weak is-a) 关系就可以用接口表示。例如字符串是可以被序列化的,这就可以用实现来描述。

public final class String implements java.io.Serializable, Comparable<String>, CharSequence { . . . . . . }

八、参考资料

      http://usna86-techbits.blogspot.com/2012/11/uml-class-diagram-relationships.html

      http://javarevisited.blogspot.com/2014/02/ifference-between-association-vs-composition-vs-aggregation.html

网址:UML类图中的六大关系:关联、聚合、组合、依赖、继承、实现 https://m.mxgxt.com/news/view/1872699

相关内容

UML图讲解(关联关系,单向关联,双向关联,自关联,组合关系,依赖关系,继承关系,实现关系)
区分 UML类图中的几种关系
UML类图符号 各种关系说明以及举例
最清晰易懂的UML类图与类的关系详解
跟我学UML建模工具StarUML(第4部分)——应用StarUML创建类图的创建示例
star uml系统架构图
【UML建模】(8) UML建模之组件图
StarUML使用与类之间的关系
类图及绘制工具:StarUML
UML建模三个工具: StarUML ,Telelogic TAU 和 Rose

随便看看