`
sdustyongz
  • 浏览: 89637 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

区分关联、依赖和聚集关系

阅读更多
《Java面向对象编程》作者:孙卫琴 来源:www.javathinker.org 一书中看到了这篇文章。其中关于依赖关系和关联关系讲的很不错,举的例子生动形象。但是聚集关系感觉有的地方讲的不妥。原文转贴如下:

在建立对象模型时,很容易把依赖、关联和聚集关系混淆。当对象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成员变量去上班很相似。

不妥的地方:

第三部分——聚集关系的特征,作者并没有准确区分聚集关系和组合关系,把聚集关系和组合关系混为一谈了。组合关系指被包含对象是包含对象的一部分。组合和聚集都有“一个对象包含另外一个或多个对象”的意思,但是,组合意味着“被包含对象是包含对象的一部分”,而聚集意味着被包含对象更像是一个集合。自行车有响铃、龙头、轮胎、钢圈等,很显然这是组合关系;同样人的头、四肢和躯干和人之间也是组合关系。再比如,飞机场有飞机,飞机可以看着是一个集合,所以飞机和飞机场之间是聚集关系。

实践的一个网站为:[u=http://jianfei66.appspot.com]减肥网[/u]
分享到:
评论

相关推荐

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

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

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

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

    变量之间的相关关系必修PPT课件.pptx

    通过散点图,我们可以更科学地判断两个变量之间的关联性,而非仅依赖经验和直觉。 总的来说,理解变量之间的相关关系对于科学研究、商业决策以及日常生活中的问题解决都具有重要意义。通过识别和量化这些关系,我们...

    基于关联信息提取的恶意域名检测方法.docx

    本文提出的基于关联信息提取的恶意域名检测方法,旨在通过综合考虑域名请求时间、域名解析IP地址和别名记录等多方面信息,提高恶意域名检测的准确性和覆盖范围。 #### 检测方法分类 当前基于域关联信息的恶意域名...

    2011数据库复习题总结.doc

    数据库建模时,通过基数、特殊化、概括和聚集等概念来表达实体和联系的复杂关系,并将E-R模型转换为表的集合,即关系数据模型。 关系数据模型基于表格,支持查询、插入、删除和更新操作。关系代数和域关系演算等非...

    Java面向对象编程孙卫琴版习题总结

    3. **依赖关系、聚集关系和关联关系**: - **关联关系**:如学生和老师,订单和客户,体现类间的特定对应,可以是单向或双向,一对一、一对多或多对多。 - **依赖关系**:类A调用类B的服务,如Panel与Shape,一个...

    教育大数据挖掘技术与应用案例分析.pdf

    关联规则挖掘的目的是发现事务之间关联、相互依赖的关系。关联分析算法例如Apriori算法、FP-Growth算法等在教育数据挖掘中的应用可以帮助发现学生学习活动之间的内在关联,以及学习材料的关联性等。 4. 可视化技术 ...

    数据库系统原理与应用-数据库建模—ER图.ppt

    ER图的高级技术涉及更复杂的关系结构,如多对多关系的细化,自连接,以及继承和聚集等概念。这些技术有助于更准确地表达复杂的业务逻辑和数据间的层次关系。 最后,学习ER图的绘制技巧是非常必要的,这不仅包括选择...

    资本及其循环和周转略PPT学习教案.pptx

    资本积聚和资本集中之间存在相互促进的关系,但也有显著区别,如资本积聚依赖于剩余价值的绝对增长,增长速度相对较慢,而资本集中则可以通过合并或联合迅速聚集大量资本。 企业融资是资本经营的重要环节,它涉及...

    生态农业数据挖掘技术应用.docx (2).pdf

    这些技术可以用于特征区分、关联分析、分类、预测、聚类分析和演变分析等任务。在实际应用中,通常会结合不同的技术以达到最佳的挖掘效果。 数据挖掘的过程通常包括四个步骤:首先,数据定义和清洗,涉及创建元数据...

    数据挖掘技术在物流管理中的应用.pdf

    2. 关联规则:通过特定算法挖掘数据项之间的强关联规则,用于发现数据集中不同字段之间的关系。 3. 聚类:将数据根据相似性进行分组,以区分不同类别的数据,有助于数据的组织和分析。 在物流管理中的应用可以分为...

    SQL Server开发基本规范

    如果多个表间有逻辑依赖关系,那么建议为其建立外键约束。但是需要根据开发的情况,防止出现对表进行更新的困难。 视图规范 视图的命名前需要加上“View_”以便于和数据表明显区分。视图的作用主要是代替复杂的联...

    数据库系统ER模型数据库系统ER模型.ppt

    除了上述基本概念,ER模型还可以包含更复杂的特性,如弱实体集(依赖于其他实体存在的实体)、多对多联系(两个实体集之间的联系允许任意数量的匹配)、继承和聚集等。 总的来说,ER模型是数据库设计的重要工具,它...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     1.1.1 区分物理层和逻辑层  1.1.2 软件层的特征  1.1.3 软件分层的优点  1.1.4 软件分层的缺点  1.1.5 Java应用的持久化层  1.2 软件的模型  1.2.1 概念模型  1.2.2 关系数据模型  1.2.3 域模型  1.2.4 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     1.1.1 区分物理层和逻辑层  1.1.2 软件层的特征  1.1.3 软件分层的优点  1.1.4 软件分层的缺点  1.1.5 Java应用的持久化层  1.2 软件的模型  1.2.1 概念模型  1.2.2 关系数据模型  1.2.3 域模型  1.2.4 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     1.1.1 区分物理层和逻辑层  1.1.2 软件层的特征  1.1.3 软件分层的优点  1.1.4 软件分层的缺点  1.1.5 Java应用的持久化层  1.2 软件的模型  1.2.1 概念模型  1.2.2 关系数据模型  1.2.3 域模型  1.2.4 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     1.1.1 区分物理层和逻辑层  1.1.2 软件层的特征  1.1.3 软件分层的优点  1.1.4 软件分层的缺点  1.1.5 Java应用的持久化层  1.2 软件的模型  1.2.1 概念模型  1.2.2 关系数据模型  1.2.3 域模型  1.2.4 ...

    湖北省产业集群发展状况及其区域创新体系研究论文.doc

    产业集群是指在同一区域内,由于共性和互补性聚集在一起的相互关联的公司和机构,是湖北省经济发展的重要组织形式。根据波特的分类,湖北省的产业集群主要包括传统制造业集群、基于自然资源的集群、复杂产品制造集群...

    东财20秋《客户关系管理》单元作业二答卷.docx

    - **知识点**: 聚集和分类的区别在于聚集不依赖于预先定义好的类,不需要训练集。 - **解析**:在数据分析领域,聚集和分类是两种常用的技术。聚集(Clustering)是一种无监督的学习方法,旨在将相似的对象分组在...

Global site tag (gtag.js) - Google Analytics