1,关联关系
在使用Java、C#和C++等编程语言实现关联关系时,通常将一个类的对象作为另一个类的成员变量
- public class LoginForm {
- private JButton loginButton; //定义为成员变量
- ……
- }
- public class JButton {
- ……
- }
1.1自关联
- public class Node {
- private Node subNode;
- ……
- }
1.2双向关联
- public class Customer {
- private Product[] products;
- ……
- }
- public class Product {
- private Customer customer;
- ……
- }
2,聚合关系
聚合(Aggregation)关系表示整体与部分的关系。在聚合关系中,成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在
通常成员对象通常作为构造方法、Setter方法或业务方法的参数注入到整体对象中
通常成员对象通常作为构造方法、Setter方法或业务方法的参数注入到整体对象中
- public class Car {
- private Engine engine;
- //构造注入
- public Car(Engine engine) {
- this.engine = engine;
- }
- //设值注入
- public void setEngine(Engine engine) {
- this.engine = engine;
- }
- ……
- }
- public class Engine {
- ……
- }
3,组合关系
组合(Composition)关系也表示类之间整体和部分的关系,但是在组合关系中整体对象可以控制成员对象的生命周期,一旦整体对象不存在,成员对象也将不存在,成员对象与整体对象之间具有同生共死的关系
通常在整体类的构造方法中直接实例化成员类
- public class Head {
- private Mouth mouth;
- public Head() {
- mouth = new Mouth(); //实例化成员类
- }
- ……
- }
- public class Mouth {
- ……
- }
4,依赖关系
大多数情况下,依赖关系体现在某个类的方法使用另一个类的对象作为参数。
依赖关系通常通过三种方式来实现,第一种也是最常用的一种方式:将一个类的对象作为另一个类中方法的参数,第二种方式是在一个类的方法中将另一个类的对象作为其局部变量,第三种方式是在一个类的方法中调用另一个类的静态方法。
- public class Driver {
- public void drive(Car car) {
- car.move();
- }
- ……
- }
- public class Car {
- public void move() {
- ......
- }
- ……
- }
5,泛化关系
泛化(Generalization)关系也就是继承关系,用于描述父类与子类之间的关系
- //父类
- public class Person {
- protected String name;
- protected int age;
- public void move() {
- ……
- }
- public void say() {
- ……
- }
- }
- //子类
- public class Student extends Person {
- private String studentNo;
- public void study() {
- ……
- }
- }
- //子类
- public class Teacher extends Person {
- private String teacherNo;
- public void teach() {
- ……
- }
- }
6,实现关系
在UML中,类与接口之间的实现关系用带空心三角形的虚线来表示
- public interface Vehicle {
- public void move();
- }
- public class Ship implements Vehicle {
- public void move() {
- ……
- }
- }
- public class Car implements Vehicle {
- public void move() {
- ……
- }
- }
总结:
(1)各种关系的强弱顺序:
泛化 = 实现
>
组合
>
聚合
>
关联
>
依赖
(2)组合,聚合,关联都是
类的成员变量级别的,被引用的类是引用方的成员变量。 而依赖仅仅是在类的某个方法中持有对另一个对象的引用
(3)组合中 成员对象和整体对象具有同生共死的关系, 聚合中成员对象可以脱离整体对象独立存在,组合和聚合都是强的关联关系