posts - 1,comments - 0,trackbacks - 0

关于UML规定的类之间的关系网上查到的说法不一,但都说是5种:

版本一:

泛化、关联、聚合、合成、依赖

版本二:

关联、依赖、聚集、泛化、实现

 

那我们就都拿来说一下吧!每个人心中都有一种属于自己的类关系分类。

1、泛化关系:类之间或接口之间的继承关系。(一种说法说它包含了实现关系)

代码:

public class CA

{

......

}

public class CAS extends CA

{

......

}

2、实现关系:实体类实现接口叫做实现关系。

代码:

public interface A
{
public void methodA();
}
public class B implements A
{
public void methodA()
{...}
...
}

3、关联关系:类之间的联接。比较宽泛的一种关系,分为聚集和合成(有的版本将这两种关系合并成了聚合)。

按照类之间的数量对比,关联关系分为:

一对一关联

一对多关联

多对多关联

按照方向,关联关系分为:

单向关联

双向关联

4、聚集关系:是关联关系的一种,是强的关联关系。聚合是整体与个体之间的关系。聚合关系是通过实例变量来实现的。

5、合成(组合)关系:是关联关系的一种,是比聚集关系强的关联关系。它要求普通的聚合关系中代表的对象负责代表部分的对象的生命周期,合成关系是不能共享的。

 

对比4和5举例子

聚集关系中,子系统允许被拆卸和替换。例如:电灯和灯泡

Bulb bulb1 = new Bulb(); //创建第一个灯泡

Bulb bulb2 = new Bulb(); //创建第二个灯泡

ReadingLamp lamp = new ReadingLamp(bulb1); //创建的时候使用第一个灯泡

lamp.setBulb(bulb2); //创建以后还可以换成第二个灯泡

 

合成关系中,子系统不允许被拆卸和替换。例如:Windows的窗口和窗口上的菜单就是组合关系。生命周期一致指的是部分必须在组合创建的同时或者之后创建,在组合销毁之前或者同时销毁,部分的生命周期不会超出组合的生命周期。

【聚集和合成在代码实现上的主要差别在于生命周期的实现上,合成需要负责其部分的创建和销毁;聚集则不然,部分可以在整体之前创建也可以在整体销毁之后再销毁或者一直不销毁】

 

6、依赖关系:是类与类之间的连接,依赖总是单向的。依赖关系代表一个类依赖于另一个类的定义。一般而言,依赖关系在Java语言中体现为局部变量,以及一个方法的参数。

 

【区分几种关系】

依赖、关联、聚集、合成看起来都很象,一个类里面出现了其他类的影子。

关联、聚集、合成都可以说是一种依赖,只是它们有比较强的语义和其他作用。在实际使用的时候类之间的关系确定了关联、聚集、合成以后,剩下的就可以叫做依赖了。

聚集、合成又是一种关联。关联关系中两个类是平级的,当出现整体和个体的迹象时就变成了聚集,个体的生命周期需要被整体严格控制时又变成了合成。

posted @ 2007-10-26 15:24 yangyansong 阅读(668) | 评论 (0)编辑 收藏