一、六种类图关系
UML静态建模主要使用类图。
类之间的关系主要有依赖、关联、组合、聚合、实现、泛化。
ps:以下内容使用类图与Java代码作解释。
二、依赖关系
一般情况下,类与类之间出现依赖关系,在代码之中的具体表现主要有两种:
- 在类的方法之中使用另一个类作为参数
- 在类的方法中使用另一类作为局部变量
(1)作为参数的情况
类图如下:
类图对应的具体的代码如下 :
public class A
{
public void fun(B b)
{
}
}
public class B
{
}
(2)作为局部变量的情况
类图如下:
类图对应的具体的代码如下:
public class A
{
public void fun()
{
B b;
}
}
public class B
{
}
三、关联关系
一般情况下,类与类之间出现关联关系,在代码中的具体表现为在类中使用另一类作为属性。
类图如下:
类图对应的具体代码如下:
public class A
{
private B b;
}
public class B
{
}
四、组合关系与聚合关系
组合关系与聚合关系本质上就是特殊的关联关系,在代码中的实现与关联关系在代码中的实现相同,都是一类使用另一类作为属性。
组合与聚合的区别在于使用的场合。
(1) 组合关系的意思是一类是另一类的组成部分,是定义层面上的一部分。比如手指是手的一部分。在代码中的意思是两类生成的对象的生命周期相同,同时创建,同时消亡,在下面的代码中的含义是,b对象会随着A类的对象的消亡而消亡。如同手没了,其上的手指自然也没了。
组合关系的类图如下:
类图对应的具体代码如下:
public class A
{
private B b;
}
public class B
{
}
(2)聚合关系的意思是一类是另一类的一部分,但并不是定义层面上的一部分。比如耳机是电脑的一部分,但耳机也可以插在手机上使用,在代码中的意思是,这个类属性的对象,不会随着此类对象的消亡而消亡,在下面的代码中的含义是,b对象不会随着A类的对象的消亡而消亡。如同电脑碎了,但耳机还在,而且还可以被手机使用。
聚合关系对应的类图如下:
类图对应的代码如下:
public class A
{
private B b;
}
public class B
{
}
五、泛化关系
类与类之间的泛化关系就是Java、C++语法中的类的继承。常用作IS-A关系。
类图如下:
类图对应的具体代码如下:
public class A extends B
{
}
public class B
{
}
六、实现关系
实现关系是类与接口的关系,在Java中的具体表现,就是接口的实现。
类图如下:
类图对应的具体代码如下:
public class A implements B
{
}
public interface B
{
}
七、类图关系的耦合度
在评价软件架构的优劣时,使用的重要标准是高内聚,低耦合。
以上六种关系的耦合度,由高到低排列为:泛化=实现>组合>聚合>关联>依赖。