UML中类图关系
本文内容来自<<大话设计模式>>一书,做个记录。
链接: https://pan.baidu.com/s/10HbpSQRZiyuwMTZ2yLvOCw 密码: z1q4
矩形框代表一个类(Class),类图分三层,第一层显示类的名称,如果是抽象类则用斜体显示,第二层是类的特性,通常就是字段和属性,第三层是类的操作,通常是方法或行为。
接口顶端有<<interface>>第一行是接口名称,第二行是接口方法
关联关系用实线箭头来表示 关联就是一个类中引用到另一个类的实例 has a
关联关系在java中一般使用成员变量来实现,有时也用方法形参的形式实现。依然使用Driver和Car的例子,使用方法参数形式可以表示依赖关系,也可以表示关联关系,毕竟我们无法在程序中太准确的表达语义。在本例中,使用成员变量表达这个意思:车是我自己的车,我“拥有”这个车。使用方法参数表达:车不是我的,我只是个司机,别人给我什么车我就开什么车,我使用这个车。
//使用成员变量形式实现关联(车是我自己的车,我“拥有”这个车)
//使用方法参数形式实现关联(车不是我的,我只是个司机,别人给我什么车我就开什么车,我使用这个车)
聚合关系表示一种弱的拥有关系,体现的是A对象可以包含B对象,但是B对象不是A对象的一部分。
聚合关系是一种比较强的关联关系,java中一般使用成员变量形式实现。对象之间存在着整体与部分的关系
假如给上面代码赋予如下语义:车是一辆私家车,是司机财产的一部分。则相同的代码即表示聚合关系了。聚合关系一般使用setter方法给成员变量赋值。
组合(合成)关系是一种强的拥有关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。
数字"1"和数字"2"称为基数,表示这一端的类可以有几个实例。
假如赋予如下语义:车是司机的必须有的财产,要想成为一个司机必须要先有辆车,车要是没了,司机也不想活了。而且司机要是不干司机了,这个车就砸了,别人谁也别想用。那就表示组合关系了。一般来说,为了表示组合关系,常常会使用构造方法来达到初始化的目的,例如上例中,加上一个以Car为参数的构造方法
依赖关系比较好区分,它是耦合度最弱的一种,在java中表现为局域变量、方法的形参,或者对静态方法的调用,如下面的例子:Driver类依赖于Car类,Driver的三个方法分别演示了依赖关系的三种不同形式。