本文参考

今天给一个很有思想网友解释 关联, 聚合,合成 的区别.结果把我自己给绕进去了.赶紧的 查漏补缺. 做个备份.

处于聚合关系的两个类生命周期不同步,则是聚合关系;处于组合关系的两个类的生命周期同步;

eg:聚合关系,当A创建的时候,B不一定创建;当A消亡时,B不一定消亡。

class A{ private B;}

class B{....}

eg:组合关系,当创建一个A对象时,也会创建一个B对象;当A对象消亡时,作为A的属性的B对象也会消亡。

class A{private b=new B();....}

class B{....}

具体UML解释

依赖(Dependency)

实体之间一个“使用”关系暗示一个实体的规范发生变化后,可能影响依赖于它的其他实例(图D)。 更具体地说,它可转换为对不在实例作用域内的一个类或对象的任何类型的引用。其中包括一个局部变量,对通过方法调用而获得的一个对象的引用(如下例所 示),或者对一个类的静态方法的引用(同时不存在那个类的一个实例)。也可利用“依赖”来表示包和包之间的关系。由于包中含有类,所以你可根据那些包中的 各个类之间的关系,表示出包和包的关系。

图D

关联(Association)

实体之间的一个结构化关系表明对象是相互连接的。箭头是可选的,它用于指定导航能力。如果没有箭头,暗示是一种双向的导航能力。在Java中,关联(图E) 转换为一个实例作用域的变量,就像图E的“Java”区域所展示的代码那样。可为一个关联附加其他修饰符。多重性(Multiplicity)修饰符暗示 着实例之间的关系。在示范代码中,Employee可以有0个或更多的TimeCard对象。但是,每个TimeCard只从属于单独一个 Employee。

图E

聚合(Aggregation)

聚合(图F)是关联的一种形式,代表两个类之间的整体/局部关系。聚合暗示着整体在概念上处于比局部更高的一个级别,而关联暗示两个类在概念上位于相同的级别。聚合也转换成Java中的一个实例作用域变量。

关联和聚合的区别纯粹是概念上的,而且严格反映在语义上。聚合还暗示着实例图中不存在回路。换言之,只能是一种单向关系。

图F

组合(Composition)

组合 (图G) 是聚合的一种特殊形式,暗示“局部”在“整体”内部的生存期职责。合成也是非共享的。所以,虽然局部不一定要随整体的销毁而被销毁,但整体要么负责保持局 部的存活状态,要么负责将其销毁。局部不可与其他整体共享。但是,整体可将所有权转交给另一个对象,后者随即将承担生存期职责。

Employee和TimeCard的关系或许更适合表示成“合成”,而不是表示成“关联”。

图G

泛化(Generalization)

泛化(图H)表示一个更泛化的元素和一个更具体的元素之间的关系。泛化是用于对继承进行建模的UML元素。在Java中,用extends关键字来直接表示这种关系。

图H

实现(Realization)

实例(图I)关系指定两个实体之间的一个合同。换言之,一个实体定义一个合同,而另一个实体保证履行该合同。对Java应用程序进行建模时,实现关系可直接用implements关键字来表示。

图I

我觉得这个图不错

分享到:

2012-08-28 16:02

浏览 1066

评论

java 泛化_(转)Java中的泛化,依赖,关联,聚合,合成相关推荐

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

    UML的构造快包含3种: (1) 事物(4种):结构事物,行为事物,分组事物,注释事物 (2) 关系(4种):泛化关系,实现关系,依赖关系,关联关系 (3) 图(10种):用例图,类图,对象图,包图, ...

  2. linux java 栈_关于Java中栈与堆的思考

    1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2. 栈的优势是,存取速度比堆要快,仅次于直接位于C ...

  3. js 中 java 代码_在js中嵌套java代码

    jsp中有时候在js中操作某些java后台传递过来的数据逻辑比较复杂,比如list内容的遍历,可以直接在页面上添加java脚本来执行内容,代码如下: //在js中插入java代码操作 //取出java ...

  4. java 企业版_下列版本中哪个是Java 企业版

    下列版本中哪个是Java 企业版 2021-02-07 下列版本中哪个是Java 企业版 张爱玲评价自己的服饰:"仿佛穿着博物院的()到处走,遍体森森然飘飘欲仙".转动惯量是刚体转 ...

  5. jython 导入java包_在jython中导入java类

    我用python处理NLP.有一个NLP工具,即Zemberek,用于土耳其语.但它是用java编写的.所以我必须使用jython来导入这些类.我安装了Jython2.7.另外,我安装了eclipse ...

  6. 修改docker内java内存_在docker中使用java的内存情况

    Java和Docker不是天然的朋友. Docker可以设置内存和CPU限制,而Java不能自动检测到.使用Java的Xmx标识(繁琐/重复)或新的实验性JVM标识,我们可以解决这个问题. 虚拟化中的 ...

  7. 谷歌去水印java实现_在Java中实现Google的“您的意思是”功能

    谷歌去水印java实现 介绍 搜索引擎用户经常因各种原因而拼写错误的搜索词,包括键盘问题(键不起作用),陌生的国际名称(例如Sigmund Freud),意外更改一个字母(Sinpsons)或添加一个 ...

  8. java地区_在Java中存储国家/地区代码,名称和Continent的最佳方式

    在ISO 3166中有246个国家,你可能会在此背后得到一个继电器大枚举.我更喜欢使用包含国家/地区列表的 XML文件,您可以从 http://www.iso.org/下载一个并加载它们(例如,当应用 ...

  9. java 抛物线_关于java中模拟抛物线轨迹的问题

    展开全部 看了这套题目感觉很有兴趣,就花了一e69da5e6ba903231313335323631343130323136353331333264623831个中午亲手给你写了一个类似的例子,相信可 ...

最新文章

  1. 车联网行业No.1元征科技的云端架构实现
  2. linux学习总结之磁盘管理
  3. k8s 基础概念和术语
  4. [资料整理]记一下英特尔atom处理器
  5. RabbitMQ学习总结(8)——RabbitMQ后台管理控制台页面属性总结
  6. This Android SDK requires Android Developer Toolkit version 23.0.0 or above
  7. Python多线程报错之RuntimeError
  8. 4_2 刽子手游戏(UVa489)自顶向下逐步求精法
  9. 凸优化第七章统计估计 7.3最优检测器设计及假性检验
  10. fpga烧写bin文件_FPGA中可执行文件:bit/bin/mcs/elf
  11. 网易面试总结(2014.12.31)
  12. cd40系列芯片_CD40,CD45系列芯片功能大全
  13. WIN2000故障修复之故障恢复控制台篇
  14. 【DG】DG的3种保护模式
  15. 苹果手机天气温度显示80度_iPhone如何做到锁屏桌面显示天气?花上一分钟,亮屏就能看天气...
  16. 第三周java实验报告
  17. 并发模型第肆讲-pre threaded模型
  18. 【产品经理学习笔记 | 巨详细】2.规划阶段——2.1需求收集:用户访谈和问卷调查方式
  19. java反射底层原理。
  20. 南京理工大学计算机学院张勇,2015年南京理工大学研究生数模竞赛获奖名单

热门文章

  1. 一键压缩word文档的办法,太简单了
  2. 杰理之按键切换默认 EQ 和 EQ 工具调节的 EQ【篇】
  3. oracle ora-01103:,执行数据库克隆时报ORA-01103错误
  4. 2022高压电工考试题库及答案
  5. 【报告分享】 2021天猫国际母婴小童市场趋势报告-CBNDATA(附下载)
  6. ICML2017全部接受论文列表(内含paper分类)
  7. 制定项目管理计划有什么作用呢?
  8. python表情包语言_我是斗图王之python爬取表情包
  9. linux报错CMake Error at CMakeLists.txt:3 (project): No CMAKE_CXX_COMPILER could be found.
  10. anki服务器搭建java,ANKI 服务器搭建过程