UML之类图关系(继承、实现、依赖、关联、聚合、组合)

继承

    指的是一个类(称为子类,子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能,继承是类与类或者接口与接口之间最常见得关系,一个类最多只能继承一个类

    UML之类图关系(继承、实现、依赖、关联、聚合、组合)_第1张图片

public class ClassA extends ClassB {    
}

public class ClassB {
}



实现

    指的是一个class类实现interface接口(可以多实现),实现是类与接口之间最常见关系。在Java中此类关系通过关键字implements明确标识,在设计时一般没有争议性

UML之类图关系(继承、实现、依赖、关联、聚合、组合)_第2张图片

public class ClassA implements InterfaceA {

    @Override
    public void test() {
        
    }
}

public interface InterfaceA {
    void test();
}

依赖

可以简单的理解,就是一个类A使用到另一个类B,而这种使用关系是具有偶然性、临时性,但B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖,为类B作为参数被类A在某个method方法中使用

UML之类图关系(继承、实现、依赖、关联、聚合、组合)_第3张图片

public class ClassA {

    public void depend(ClassB b){
    }
}

public class ClassB {
}

或A为一个圆柱体类,要求A实例的体积

//圆柱体类
public class A {
    public static void main(String[] args) {
        double zArea = 0;
        //底面积及为一个圆(B类)的面积
        B b = new B();
        double height = 1.6;
        //调用B类的getArea()方法,形成依赖关系
        zArea = b.getArea(4)*height;
    }
}

//圆类B
public class B {

    public double getArea(int r){
        double area = 0;
        area = Math.PI*r*r;
        return area;
    }
}

关联(Association)

它体现的是两个类、或者类与接口之间语义级别的一种强依赖关系。比如我和我的朋友,这种关系比依赖更强、不存在依赖关系的偶然性、临时性,一般是长期性而且双方的关系一般是平等的;关联可以是单向的,也可以是双向的,表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量;

UML之类图关系(继承、实现、依赖、关联、聚合、组合)_第4张图片

public class ClassA {
    private ClassB classB;
}

public class ClassB {
}

聚合

聚合是关联关系的一种特例,聚合关系是整体和个体/部分之间的关系,即has-a(包含)的关系;关联关系的两个类处于同一个层次上,而聚合关系的两个类处于不同的层次上,一个是整体,一个是个体/部分;在聚合关系中,代表个体/部分的对象有可能会被多个代表整体的对象所共享

has-a 是组成关系,在组成关系中,一个对象将一个或者多个其它对象作为自己的成员。

UML之类图关系(继承、实现、依赖、关联、聚合、组合)_第5张图片

public class Family{  
    int id;  
    String name;  
    Child child;//Child is a class  
    ...  
}
在这种情况下,Family有一个实体引用Child,因此关系是:Family HAS-A Child。

组合

组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;房子和房间的关系,当房子没有了,房间同样不可能单独存在

UML之类图关系(继承、实现、依赖、关联、聚合、组合)_第6张图片

//房子
public class House {

    private Room room ;
    public House(){
        room = new Room() ;
    }

    public void createHouse(){
        room.createRoom() ;

    }
}

//房间
public class Room {

    public Room createRoom(){
        System.out.println("创建房间");
        return new Room() ;
    }
} 

聚合和组合的区别:聚合是个体离开了整体,依然可以存在
                              组合是个体和整体不可以分开,个体不能离开整体单独存在

几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖;


你可能感兴趣的:(UML之类图关系(继承、实现、依赖、关联、聚合、组合))