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。组成关系的特征
组成关系是一种两个类之间的关系,其中整体类由部分类组成,部分类需要整体类才能存在,这种关系意味着销毁整体类将会同时销毁部分类

转载于:https://www.cnblogs.com/ForEverKissing/archive/2007/12/13/993818.html

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

  1. 小解UML中关联、聚合、依赖(简易区分)

    说明:本帖目的是使读者快速简易理解三者关系,并非详解概念,所以有难免疏漏之处(部分内容来源网络). 一.相关概念 1.关联:关联关系(Association):类之间的联系,如客户和订单,每个订单对应 ...

  2. UML中的用例间关系图示

    今天应用用例图对一个系统进行了分析,期间需要考虑用例间关系.随找到如下资料. 正文:    用例图主要用来图示化系统的主事件流程,它主要用来描述客户的需求,即用户希望系统具备的完成一定功能的动作,通俗 ...

  3. UML中关联,聚合,组合的区别及C++实现

    类间关系 在类图中,除了需要描述单独的类的名称.属性和操作外,我们还需要描述类之间的联系,因为没有类是单独存在的,它们通常需要和别的类协作,创造比单独工作更大的语义.在UML类图中,关系用类框之间的连 ...

  4. UML中聚合和组合的关系(笔记)

    聚合(Aggregation) 一種鬆散的對象閒的關係 部分可獨立于聚合而存在 关联是表示两个类的一般性联系,比如"学生"和"老师"就是一种关联关系:聚合表示h ...

  5. UML中关联关系和依赖关系的区别(转)

    UML中关联(association)关系和依赖关系比较难以让人理解.今天查了一下<UML参考手册>.归纳如下 关联(association) 如果几个类元的实例之间有联系,那么这几个类元 ...

  6. UML中关联关系和依赖关系的区别

    UML中关联(association)关系和依赖关系比较难以让人理解.今天查了一下<UML参考手册>.归纳如下 关联(association) 如果几个类元的实例之间有联系,那么这几个类元 ...

  7. UML中依赖,关联,聚合,组合的含义(结合UML图和实战代码详解)

    UML中各种关系的含义 1. 什么是UML图? 2. UML图中的各种关系含义 2.1 依赖 2.1.1 简单理解及画法 2.1.2 那么在UML中的依赖是怎样的呢? 2.1.3 实战中UML图的画法 ...

  8. UML中关系(4+4)

    前言 学习UML画图中最重要的两部分就是9种图和四种关系了,只要掌握了这两部分,那你就厉害了.下面就让小编和你一起学习一下这四种关系吧. 论述 一.第一个四种关系:依赖关系.关联关系.泛化关系.实现关 ...

  9. UML 中的六大关系详解

    UML中的六大关系   在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation), ...

最新文章

  1. 编译microwindow(nano-X) 及flnx-0.18
  2. 页面升紧急级访问_部落冲突10-13本 发育规划丨升什么性价比最高?
  3. Coding:两个从大到小的有序链表合并成一个从小到大有序链表
  4. 全国计算机等级考试题库二级C操作题100套(第52套)
  5. java模板方法模式_Java中的模板方法模式
  6. 《Python Cookbook 3rd》笔记(2.20):字节字符串上的字符串操作
  7. python中的匿名函数lambda
  8. [转载] Java——toArray,集合转换为数组
  9. 《Programming in Lua 3》读书笔记(九)
  10. C语言图书借阅管理系统
  11. 环评图件制作-数据处理+图件制作(weixin公众号【图说GIS】)
  12. u深度重装系统详细教程_u深度一键还原精灵电脑重装系统使用教程
  13. 计算机信息安全技术 学习笔记
  14. 基于zookeeper的统一命名服务及实现
  15. 关于打卡值班制度---一个excel开发工具小函数
  16. stm32驱动ili9486液晶显示屏
  17. diskgenius软件将分区表类型转换成GUID,提示磁盘的首尾部分没有转换到GUID分区所必须的空间,还需各33个扇区,不能转换成功
  18. wps无法打印_WPS+云办公如何进行文档加密
  19. java获取剩余手机电池容量_怎样判断手机电池的剩余容量
  20. 国庆节去哪浪?让 Python 帮你分析分析

热门文章

  1. Hexo自定义页面的方法
  2. 作业自动提示功能设计思路
  3. 【js拾遗】名称空间
  4. CodeSite日志使用
  5. 面向对象之多态性(基类引用可以指向子类)
  6. matlab中腐蚀图像的编写,Matlab实现二值图像的腐蚀算法源代码
  7. 华水c语言课程设计,【图片】发几个C语言课程设计源代码(恭喜自己当上技术小吧主)【东华理工大学吧】_百度贴吧...
  8. mysql性能调优精简版
  9. Spring Data JPA框架
  10. linux命令行sip电话,基于Linux和MiniGUI的SIP电话终端设计