粗暴理解UML中的依赖、实现、泛化、关联、聚合、组合关系

1. 依赖关系

假设有A、B类,结构如下:

public class A{
    private B b;
    
    ...
    
    public B getB(){
        return this.b;
    }
    
    public void reciveB(B b){
        ...
    }
}
public class B{
	...
}

由上可以看出,A类中有一个B类的私有成员变量,这就是依赖关系的体现,A类依赖B类,同时A类中还有一个getB方法,返回一个B类型变量,也可以看作是A类依赖B类,A类中还有一个reciveB方法,接收一个B类变量,这也是A类依赖B类的体现。

总而言之,只要A类中出现了B类,就可以说A类依赖B类。

2. 实现关系

这个比较简单,是用来描述接口和实现类的关系,假设有一个接口Aimpl,和一个类A,A类实现了接口Aimpl,就可以说A类是Aimpl接口的实现。

interface Aimpl{
    public void doSomething();
}
public class A implements Aimpl{
    public void doSomething(){
        ...
    }
}

3. 泛化关系

这个也比较简单,泛化是用来描述继承的关系,假设有A类、B类如下:

public void A{
    ...
}
public void B extends A{
    ...
}

A类继承了B类,则称A类是B类的泛化。

4. 关联关系

关联关系是用来描述一对一或者是一对多的关系的,假设有A、B类:

public class A{
	private B b;
    ...
}
public class B{
    private A a;
    ...
}

A类中有一个B类引用,B类中有一个A类引用,可以认为有双向的一对一关系,关联关系也可以是单向的,例如A类中有B类引用,而B类中没有A类引用。

关联和依赖在代码的表现上虽然是一样的,但是语义环境不同,依赖侧重类的使用关系,关联侧重类之间的结构关系,在不同的业务条件下关联和依赖关系是可以互相转化的。

5. 聚合关系

聚合是用来描述语义上的整体和部分的关系,聚合表示整体和部分虽然联系在一起,但是这种关系是允许断开的。

假设A、B类,如果A和B类有聚合的关系,则A和B类至少已经有了关联的关系,聚合关系是对关联关系的进一步细分,如下示例:

public class A{
	private B b;
    ...
    public void setB(B b){
        this.b = b;
    }
}
public class B{
    ...
}

如上例,A为整体,B为部分,如果A不需要B,可以调用方法设置B为null,在不同的业务条件下,聚合关系可以转化为组合关系。

6. 组合关系

组合也是用来描述语义上的整体和部分的关系,组合表示整体和部分联系在一起且联系不允许断开,即整体和部分不能独立存在。

假设A、B类,如果A和B类有组合的关系,则A和B类至少已经有了关联的关系,和聚合关系一样,组合关系也是对关联关系的进一步细分,如下示例:

public class A{
	private B b = new B();
    ...
}
public class B{
    ...
}

如上所示,A类中存在一个B类实例,如果创建一个A类实例,则在A类中肯定会有一个B类实例被创建,该B类实例不能独立存在A类之外,如果A类实例结束生命周期,则B实例也会结束其生命周期。在不同的业务条件下,组合关系可以转化为聚合关系。

发布了68 篇原创文章 · 获赞 12 · 访问量 5185

猜你喜欢

转载自blog.csdn.net/qq_40963076/article/details/105692838