UML中类图关系

本文内容来自<<大话设计模式>>一书,做个记录。

链接: https://pan.baidu.com/s/10HbpSQRZiyuwMTZ2yLvOCw 密码: z1q4

UML中类图关系

矩形框代表一个类(Class),类图分三层,第一层显示类的名称,如果是抽象类则用斜体显示,第二层是类的特性,通常就是字段和属性,第三层是类的操作,通常是方法或行为。

"+"表示public

"-"表示private

"#"表示protected

UML中类图关系

接口顶端有<<interface>>第一行是接口名称,第二行是接口方法

UML中类图关系

继承关系空心三角形+实线来表示

UML中类图关系

接口实现空心三角形+虚线来表示

UML中类图关系

关联关系实线箭头来表示 关联就是一个类中引用到另一个类的实例  has a

UML中类图关系

关联关系在java中一般使用成员变量来实现,有时也用方法形参的形式实现。依然使用Driver和Car的例子,使用方法参数形式可以表示依赖关系,也可以表示关联关系,毕竟我们无法在程序中太准确的表达语义。在本例中,使用成员变量表达这个意思:车是我自己的车,我“拥有”这个车。使用方法参数表达:车不是我的,我只是个司机,别人给我什么车我就开什么车,我使用这个车。

class Driver

    //使用成员变量形式实现关联(车是我自己的车,我“拥有”这个车)

    Car mycar; 

    public void drive(){ 

        mycar.run(); 

    } 

    ... 

    //使用方法参数形式实现关联(车不是我的,我只是个司机,别人给我什么车我就开什么车,我使用这个车)

    public void drive(Car car){ 

        car.run(); 

    } 

}

聚合关系表示一种弱的拥有关系,体现的是A对象可以包含B对象,但是B对象不是A对象的一部分

聚合关系用空心的菱形+实线箭头表示。

UML中类图关系

聚合关系是一种比较强的关联关系,java中一般使用成员变量形式实现。对象之间存在着整体与部分的关系

class Driver

    //使用成员变量形式实现聚合关系 

    Car mycar; 

    public void drive(){ 

        mycar.run(); 

    } 

}

假如给上面代码赋予如下语义:车是一辆私家车,是司机财产的一部分。则相同的代码即表示聚合关系了。聚合关系一般使用setter方法给成员变量赋值。

组合(合成)关系是一种强的拥有关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。

组合关系用实心的菱形+实线来表示

UML中类图关系

数字"1"和数字"2"称为基数,表示这一端的类可以有几个实例。

假如赋予如下语义:车是司机的必须有的财产,要想成为一个司机必须要先有辆车,车要是没了,司机也不想活了。而且司机要是不干司机了,这个车就砸了,别人谁也别想用。那就表示组合关系了。一般来说,为了表示组合关系,常常会使用构造方法来达到初始化的目的,例如上例中,加上一个以Car为参数的构造方法

public Driver(Car car){ 

    mycar = car; 

}

依赖关系虚线箭头来表示  use a

UML中类图关系

依赖关系比较好区分,它是耦合度最弱的一种,在java中表现为局域变量、方法的形参,或者对静态方法的调用,如下面的例子:Driver类依赖于Car类,Driver的三个方法分别演示了依赖关系的三种不同形式。

class Car

    public static void run(){ 

        System.out.println("汽车在奔跑"); 

    } 

class Driver

    //使用形参方式发生依赖关系 

    public void drive1(Car car){ 

        car.run(); 

    } 

    //使用局部变量发生依赖关系 

    public void drive2(){ 

        Car car = new Car(); 

        car.run(); 

    } 

    //使用静态变量发生依赖关系 

    public void drive3(){ 

        Car.run(); 

    } 

}