`

依赖、关联和聚集关系

阅读更多

在建立对象模型时,很容易把依赖、关联和聚集关系混淆。当对象A和对象B之间存在依赖、关联或聚集关系时,对象A都有可能调用对象B的方法,这是三种关系之间的相同之处,除此之外,它们有着不同的特征。

1.依赖关系的特征


对于两个相对独立的系统,当一个系统负责构造另一个系统的实例,或者依赖另一个系统的服务时,这两个系统之间主要体现为依赖关系,例如生产零件的机器和零件,机器负责构造零件对象。再例如充电电池和充电器,充电电池通过充电器来充电。再例如自行车Bicycle和打气筒Pump,自行车通过打气筒来充气。图1-39为Bicycle类与Pump类的类框图。



图1-39 Bicycle类与Pump类的依赖关系

Bicycle类和Pump类之间是依赖关系,在Bicycle类中无需定义Pump类型的变量。Bicycle类的定义如下:

public class Bicycle{
/** 给轮胎充气 */
public void expand(Pump pump){
pump.blow();
}
}


在现时生活中,通常不会为某一辆自行车配备专门的打气筒,而是在需要充气的时候,从附近某个修车棚里借个打气筒打气。在程序代码中,表现为Bicycle类的expand()方法有个Pump类型的参数。以下程序代码表示某辆自行车先后到两个修车棚里充气:

myBicycle.expand(pumpFromRepairShed1); //到第一个修车棚里充气
myBicycle.expand(pumpFromRepairShed2); //若干天后,到第二个修车棚里充气

2.关联关系的特征
对于两个相对独立的系统,当一个系统的实例与另一个系统的一些特定实例存在固定的对应关系时,这两个系统之间为关联关系。例如客户和订单,每个订单对应特定的客户,每个客户对应一些特定的订单;再例如公司和员工,每个公司对应一些特定的员工,每个员工对应一特定的公司;再例如自行车和主人,每辆自行车属于特定的主人,每个主人有特定的自行车,图1-40显示了主人和自行车的关联关系。而充电电池和充电器之间就不存在固定的对应关系,同样自行车和打气筒之间也不存在固定的对应关系。

图1-40 主人和自行车的关联关系


Person类与Bicycle类之间存在关联关系,这意味着在Person类中需要定义一个Bicycle类型的成员变量。以下是Person类的定义:

public class Person{
private Bicycle bicycle; //主人的自行车

public Bicycle getBicycle(){
return bicycle;
}
public void setBicycle(Bicycle bicycle){
this.bicycle=bicycle;
}
/** 骑自行车去上班 */
public void goToWork(){
bicycle.run();
}
}


在现时生活中,当你骑自行车去上班时,只要从家里推出自己的自行车就能上路了,不象给自行车打气那样,在需要打气时,还要四处去找修车棚。因此,在Person类的goToWork()方法中,调用自身的bicycle对象的run()方法。假如goToWork()方法采用以下的定义方式:

/** 骑自行车去上班 */
public void goToWork(Bicycle bicycle){
bicycle.run();
}

那就好比去上班前,还要先四处去借一辆自行车,然后才能去上班。


3.聚集关系的特征


当系统A被加入到系统B中,成为系统B的组成部分时,系统B和系统A之间为聚集关系。例如自行车和它的响铃、龙头、轮胎、钢圈以及刹车装置就是聚集关系,因为响铃是自行车的组成部分。而人和自行车不是聚集关系,因为人不是由自行车组成的,如果一定要研究人的组成,那么他应该由头、躯干和四肢等组成。由此可见,可以根据语义来区分关联关系和聚集关系。 

聚集关系和关联关系的区别还表现在以下方面:

(1) 对于具有关联关系的两个对象,多数情况下,两者有独立的生命周期。比如自行车和他的主人,当自行车不存在了,它的主人依然存在;反之亦然。但在个别情况下,一方会制约另一方的生命周期。比如客户和订单,当客户不存在,它的订单也就失去存在的意义。

(2) 对于具有聚集关系(尤其是强聚集关系)的两个对象,整体对象会制约它的组成对象的生命周期。部分类的对象不能单独存在,它的生命周期依赖于整体类的对象的生命周期,当整体消失,部分也就随之消失。比如小王的自行车被偷了,那么自行车的所有组件也不存在了,除非小王事先碰巧把一些可拆卸的组件(比如车铃和坐垫)拆了下来。 
不过,在用程序代码来表示关联关系和聚集关系时,两者比较相似。图1-41为自行车Bicycle与响铃Bell的聚集关系。

图1-41 自行车和响铃的聚集关系 

以下例程1-6是Bicycle类的源程序。

例程1-6 Bicycle.java

public class Bicycle{
private Bell bell;

public Bell getBell(){
return bell;
}

public void setBell(Bell bell){
this.bell=bell;
}

/** 发出铃声 */
public void alert(){
bell.ring();
}
}


在Bicycle类中定义了Bell类型的成员变量,Bicycle类利用自身的bell成员变量来发出铃声,这和在Person类中定义了Bicycle类型的成员变量,Person类利用自身的bicycle成员变量去上班很相似。

分享到:
评论

相关推荐

    类和类之间的依赖、关联、聚合、组合关系

    (6)关联:是人类思考问题时经常运用的思想方法:通过一个事物联想到另外的事物。能使人发生联想的原因是事物之间确实存在着某些联系。 (7)消息通信:这一原则要求对象之间只能通过消息进行通信,而不允许在对象...

    C++类间关系

    在本文中,我们将详细解释C++类间关系,包括依赖关系、关联关系和聚集关系。 一、依赖关系 依赖关系是指两个类之间的一种关系,其中一个类(A)依赖于另一个类(B),即A类的对象需要使用B类的对象来完成某些操作...

    基于UML类图的类之间依赖关系图论问题研究.pdf

    在类图中,每个类由其属性和方法构成,同时还展示了类之间的关系,如关联、聚集、泛化以及依赖等。类图是面向对象系统分析中最基本的元素之一,能够清晰地展示出系统中各个类如何相互作用。因此,对UML类图中类之间...

    类与类之间的关系

    聚合关系是指对象 A 被加入到对象 B 中,成为对象 B 的组成部分时,对象 B 和对象 A 之间为聚集关系。聚合关系是关联关系的一种,是较强的关联关系,强调的是整体与部分之间的关系。 例如,在 UML 图中,Computer ...

    java中类与类之间的关系

    聚合关系是指对象 A 被加入到对象 B 中,成为对象 B 的组成部分时,对象 B 和对象 A 之间为聚集关系。聚合是关联关系的一种,是较强的关联关系,强调的是整体与部分之间的关系。 在 UML 图中,聚合关系用实线箭头和...

    类与类关系的UML图与代码表现.doc

    聚合关系当对象 A 被加入到对象 B 中,成为对象 B 的组成部分时,对象 B 和对象 A 之间为聚集关系。聚合是关联关系的一种,是较强的关联关系,强调的是整体与部分之间的关系。 例如,电脑和它的显示器、键盘、主板...

    UML类图符号 UML类图符号 UML类图符号

    ● 被聚集的子系统不允许被拆卸和替换,这种聚集称为强聚集关系,或者组成关系。 泛化(Generalization)泛化指的是类之间的继承关系,在UML中用带实线的三角形箭头表示。 实现(Realization)实现指的是类与接口...

    软考UML大题知识点总结

    UML 有 4 种关系:依赖、关联、聚集(关联一种)、组合(聚集的另一种形式)、泛化(继承)、实现。这些关系用于描述类之间的关系,例如依赖关系、关联关系、继承关系等。 依赖关系 依赖关系描述了两个类之间的...

    GPmethod.rar_关联维数 matlab_关联维数参数_关联维数计算_分形维数 matlab_混沌判断

    在IT领域,特别是数据分析和复杂系统研究中,关联维数(Correlation Dimension)和分形维数(Fractal Dimension)是两个重要的概念,常用于描述数据的复杂性和自相似性。MATLAB作为一种强大的数学和计算工具,提供了...

    计算机等考三级数据库辅导:聚集索引的重要性和如何选择聚集索引.docx

    2. **分页需求**:对于分页显示,理想的聚集索引应该是可以提供唯一排序的列,因为分页通常依赖于找到每页的第一条和最后一条记录。如果聚集索引列有重复值,可能需要额外的操作来确定分页边界,这会降低效率。 在...

    软件设计师培训14.ppt

    综上所述,本次软件设计师培训的内容涵盖了UML的用例图分析、类间关联的重复度表示、类与类之间的四种关系(依赖、概括、关联、聚集),以及数据库设计中如何存储和管理关键数据,这些知识点对于理解和构建复杂的...

    深入理解JAVA中的聚集和组合的区别与联系

    在聚集关系中,一个对象(整体)可以包含若干个其他对象(部分),但这些部分对象也可以独立存在,不完全依赖于整体。比如,在学生和地址的例子中,一个学生有一个地址,但这并不意味着这个地址只能属于这个学生,它...

    UML类图符号

    聚合关系还可以分为两种类型:普通聚集关系和强聚集关系(组合关系)。 组合(Composition) 组合用实心的菱形+实线箭头来表示。组合关系表示部分和整体的关系,并且生命周期是相同的。 依赖(Dependency) 依赖...

    云计算环境下数据弱关联挖掘模型的仿真.pdf

    而在进行数据特征的关联概率计算时,往往需要依赖于一定的统计模型或概率模型来推断数据之间可能的关联关系。 通过弱聚类方法对属性元素进行分类,可以将原本以数量形式表示的数据元素转换为类别型,这为后续的关联...

    类图练习题参考.pdf

    类图练习题参考.pdf 类图是 Unified Modeling Language(UML)中的一种静态结构图,它用于描述类之间的关系和类的内部结构。类图是对象图的基础,它...类图可以显示类之间的关系,如关联关系、泛化关系、聚集关系等。

    UML建模的课件 没分数了凑够20个字符

    4. **聚集和组合**:聚集是关联的特例,表示整体与部分的关系。聚合是部分可以属于多个整体的关系,而组合则更为紧密,部分的存在依赖于整体。 5. **泛化**:泛化关系,即继承,是一种分类关系,子类(具体元素)...

    统一的建模语言UML

    模型元素是构成模型的基本构造块,包括类、对象、属性、操作、状态、用例、接口、包、依赖、关联和聚集等。这些元素之间通过各种关系进行连接,形成了系统的模型。例如,泛化关系表示一般与特殊的关系,如类之间的...

    UML及面向对象设计思想.docx

    * 关联关系:类之间的关系,可以分为继承和关联,关联可以进一步分为组合、聚集和依赖。 类之间的关系可以分为: * 组合关系:是一种紧密而稳定的关联关系,例如公司与部门是一种组合关联关系。 * 聚合关系:是一...

    UML基础、案例与应用:第3版

    4. **关系**:UML中的关系包括关联、多重性、限定关联、自身关联、继承和泛化、依赖等。关联可以有约束,关联类用于添加额外信息,继承则体现了类之间的层次关系。依赖表示一个类的改变可能影响另一个类。 5. **...

    对象-关系数据库之间的映射.pdf

    此外,还需区分关联与聚集/组合的差异,以及如何在关系数据库中表示这些复杂关系。 #### 引用完整性和关系约束 引用完整性确保数据库中各表之间的关系符合预定义的规则。这涉及到父表与子表之间的操作约束,如级联...

Global site tag (gtag.js) - Google Analytics