JAVA中的聚集和组合的区别和联系

选自《JAVA语言程序设计-基础篇(原书第8版)》

定义:一个对象可以包含另一个对象。这两个对象之间的关系称为组合(composition)。

组合实际上是聚集关系的一种特殊形式。聚集模拟了具有(has-a)关系,表示两个对象之间的归属关系。归属关系中的所有者对象称为聚集对象(aggregation object),而它的类称为聚集类(aggregating class)。归属关系中的从属对象称为被聚集类(aggregated object),而它的类被称为被聚集类(aggregated class)。

一个对象可以被几个其他聚集对象所拥有。如果一个对象只归属于一个聚集对象,那么它和聚集对象之间的关系就称为组合(composition)。例如:“一个学生有一个名字”就是组合关系,“一个学生有一个地址”就是聚集关系,因为一个地址可以被几个学生所共享。

UML中,实心菱形表示组合关系,空心菱形表示聚集关系。如图:

聚集关系通常被表示为聚集类中的一个数据域,如图:

聚集还可以存在于同一类的多个对象之间。例如:一个人可能有一个管理者或者多个管理者。一个管理者可用变量表示,多个则可使用数组,如图:

到这里,基本上聚集和组合的关系就不言自明了。

时间: 2024-08-26 14:41:45

JAVA中的聚集和组合的区别和联系的相关文章

<Java中的继承和组合之间的联系和区别>

1 //Java中的继承和组合之间的联系和区别 2 //本例是继承 3 4 class Animal 5 { 6 private void beat() 7 { 8 System.out.println("心胀跳动..."); 9 } 10 public void breath() 11 { 12 beat(); 13 System.out.println("吸一口气,吐一口气,呼吸中..."); 14 } 15 } 16 //继承Animal,直接复用父类的bre

Java中的throw和throws的区别

Java中的throw和throws的区别 1.throw关键字用于方法体内部,而throws关键字用于方法体部的方法声明部分: 2.throw用来抛出一个Throwable类型的异常,而throws用来声明方法可能会抛出某些异常 Java中的throw和throws的区别,布布扣,bubuko.com

java中的hashcode和euqals的区别和联系

一.equals方法的作用 1.默认情况(没有覆盖equals方法)下equals方法都是调用Object类的equals方法,而Object的equals方法主要用于判断对象的内存地址引用是不是同一个地址(是不是同一个对象). 2 .要是类中覆盖了equals方法,那么就要根据具体的代码来确定equals方法的作用了,覆盖后一般都是通过对象的内容是否相等来判断对象是否相等. 没有覆盖equals方法代码如下: [java] view plaincopy //学生类 public class S

Java中PreparedStatement和Statement的用法区别

Java中PreparedStatement和Statement的用法区别 (2012-08-01 11:06:44) 转载▼ 标签: 杂谈   1. PreparedStatement接口继承Statement, PreparedStatement 实例包含已编译的 SQL 语句,所以其执行速度要快于 Statement 对象. 2.作为 Statement 的子类,PreparedStatement 继承了 Statement 的所有功能.三种方法 execute. executeQuery

JAVA中extends 与implements有啥区别?

JAVA中extends 与implements有啥区别?1. 在类的声明中,通过关键字extends来创建一个类的子类.一个类通过关键字implements声明自己使用一个或者多个接口.extends 是继承某个类, 继承之后可以使用父类的方法, 也可以重写父类的方法; implements 是实现多个接口, 接口的方法一般为空的, 必须重写才能使用2.extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承,JAVA中不支持多重继承,但是可以用接口

菜鸟译文(一)——Java中的继承和组合

阅读英文的能力对于程序员来说,是很重要的.这几年也一直在学习英文,今天心血来潮,就在网上找了一篇简短的博文翻译一下.水平一般,能力有限,还请各位看官多多指点. 译文: 本文将会举例说明Java中继承和组合的概念.首先举一个继承的例子,然后展示一下如何用组合来改善继承的设计.最后概括一下如何在它们之间做出选择. 1. 继承 假设我们有一个Insect类.这个类包含两个方法:一个是move(),一个是attack(). class Insect { private int size; private

Java中针对 ArrayList和LinkedList 的区别

一般大家都知道ArrayList和LinkedList的大致区别:      1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构.      2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针.      3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据. ArrayList和LinkedList是两个集合类,用于存储一系列的对象引用

java中Map,List与Set的区别

java中Map,List与Set的区别 目录(?)[+] Set,List,Map的区别 java集合的主要分为三种类型: Set(集) List(列表) Map(映射) 要深入理解集合首先要了解下我们熟悉的数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),而JAVA集合可以存储和操作数目不固定的一组数据. 所有的JAVA集合都位于 java.util包中! JAVA集合只能存放引用类型的的数据,不能存放基本数据类型. 简单说下集合和数组的区别:(参考文章:

Java中equals、==和instanceof的区别

本文转自http://blog.csdn.net/t12x3456/article/details/7341515 (1)对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同. “==”比较两个变量本身的值,即两个对象在内存中的首地址. “equals()”比较字符串中所包含的内容是否相同. 比如: String s1,s2,s3 = "abc", s4 ="abc" ; s1 = new String("abc"