`
yangyangmilan
  • 浏览: 30057 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

[转] UML中关联、依赖、聚集等关系的异同

阅读更多
1.  关联:连接模型元素及链接实例,用一条实线来表示;
2.  依赖:表示一个元素以某种方式依赖于另一个元素,用一条虚线加箭头来表示;
3.  聚集:表示整体与部分的关系,用一条实线加空心菱形来表示;
4.  组成:表示整体与部分的有一关系,用一条实线加实心菱形来表示;
             (关联,依赖,聚集,组成的异同见后描述)
5.  泛化(继承):表示一般与特殊的关系,用一条实线加空心箭头来表示;
6.  实现:表示类与接口的关系,用一条虚线加空心箭头来表示;
 
关联,依赖,聚集的异同:(《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成员变量去上班很相似。
4。组成关系的特征
组成关系是一种两个类之间的关系,其中整体类由部分类组成,部分类需要整体类才能存在,这种关系意味着销毁整体类将会同时销毁部分类。
分享到:
评论

相关推荐

    UML中依赖泛化关联实现聚合组合的C#实现

    UML 中依赖泛化关联实现聚合组合的 C# 实现 UML 中类图是软件设计中最重要的工具之一,它能够帮助我们更好地设计和管理软件系统。今天,我们将讨论 UML 中的依赖泛化关联实现聚合组合的 C# 实现。 首先,让我们...

    UML 类图 关系 大全 泛化、关联、依赖等

    在 UML 类图关系大全中,依赖关系是一种弱关联关系,表示一个类使用另一个类的方法或属性,但并不意味着它们之间有明确的关系。例如,一个人可以使用锤子来钉钉子,但并不意味着两人之间有明确的关系。 在使用 UML ...

    UML类关系-依赖,关联,聚合和组合

    UML类关系是UML中的一种基本概念,描述了类之间的关系。今天,我们将探讨UML类关系中的四种基本关系:依赖、关联、聚合和组合。 依赖(Dependency) 依赖关系是指一个类使用另一个类的对象或服务的关系。依赖关系...

    UML中的包含关系和扩展关系

    在UML中,包含关系和扩展关系是两种关键的结构关系,它们帮助我们理解和描述系统的组件如何相互作用和组织。这些概念在软件设计师的考试中是重要的考察点,因此理解它们的含义和应用至关重要。 首先,我们来看包含...

    UML中继承实现依赖关联聚合组合的联系与区别_线条箭头.doc

    UML 中的关联关系他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友。这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的...

    六大UML类图以及关系

    - 在UML类图中,依赖关系用一条带有箭头的虚线表示,箭头指向被依赖的一方。 **示例**: - 假设有一个`Calculator`类,它依赖于一个`MathFunctions`类来执行复杂的数学运算。在这个例子中,`Calculator`类依赖于`...

    UML中类图实例讲解关系

    UML类图关系讲解 ...UML类图关系讲解了类图中的各种关系,包括继承关系、实现关系、关联关系、聚合关系、合成关系和依赖关系等。这些关系都是UML类图的基本组成部分,用于描述类和对象之间的关系。

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

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

    UML关系(泛化,实现,依赖,关联(聚合,组合))

    UML关系(泛化,实现,依赖,关联(聚合,组合))

    UML类关系:依赖、关联、聚合、组合

    总结来说,依赖关系强调短暂的相互依赖,关联描绘类间的结构联系,聚合表示部分与整体的松散连接,而组合则强调整体对部分的强依赖和生命周期管理。理解这些关系对于进行高质量的软件设计至关重要。在实际开发中,...

    UML中依赖泛化关联实现聚合组合的Java实现

    ### UML中依赖、泛化、关联、聚合与组合的Java实现详解 #### UML基础知识概览 统一建模语言(UML)作为一种图形化的标准化建模语言,为软件开发提供了强大的可视化工具,帮助开发者理解、设计和记录软件系统。UML...

    UML学习之依赖_关联_聚合_组合_继承

    在UML中,依赖关系通常用虚线箭头表示,箭头指向被依赖的元素。 **特点:** - **单向性**:依赖关系总是单向的,表示一个元素依赖于另一个元素的服务。 - **实现方式**:依赖可以通过方法参数、局部变量、全局变量...

    UML解惑:图说UML中的六大关系

    UML中的六大关系——依赖、泛化(类属)、关联、实现、聚合和组合,构成了理解软件系统结构的基础。 ### 依赖(Dependency) 依赖关系是最弱的一种关系,表示一个类(或组件、用例等)使用了另一个类的接口,这种...

    UML中类图中的几个关系

    在UML中,依赖关系用带箭头的虚线来表示,箭头指向被依赖的类。 #### 泛化关系(Generalization) 虽然题目中未提及,但在UML类图中,泛化关系也非常重要,它表示了一种继承或实现的关系。泛化关系用实线箭头表示...

    UML统一建模语言中依赖泛化关联实现聚合组合的C#实现_配UML图.doc

    本文将详细探讨UML中的一些关键概念,包括依赖、泛化、关联、聚合、组合以及实现,并结合C#语言给出具体实现示例。 1. 泛化(Generalization): 泛化关系在UML中代表了继承,它表示一个类(子类)继承自另一个类...

    UML 继承,实现,依赖,关联,聚合

    本文将深入探讨UML中的五个关键关系:继承、实现、依赖、关联和聚合,以及它们在软件设计中的作用。 1. **继承(Inheritance)**: 继承是面向对象编程的核心概念之一,它允许一个类(子类或派生类)从另一个类...

    UML类图关系大全

    依赖是UML中最弱的一种关系,用于表示一个类依赖于另一个类的定义。例如,`C5` 类依赖于 `C6` 类的定义,意味着 `C5` 需要在某些地方使用到 `C6` 的功能。在实际的代码中,依赖通常通过在类的声明中包含另一个类的...

    UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别

    在UML中,有六种主要的类间关系:继承、实现、依赖、关联、聚合和组合。理解这些关系对于设计高质量的软件架构至关重要。 1. **继承**: 继承是类与类之间的一种层次结构关系,表示一个类(子类)可以从另一个类...

    UML关系

    在本篇文章中,我们将深入探讨UML中的几种主要关系,包括关联、依赖、泛化、实现以及组合和聚合。 1. **关联关系**: 关联是UML中最常见的一种关系,表示两个或多个类之间的结构联系。关联可以是单向或双向的,也...

Global site tag (gtag.js) - Google Analytics