`

关联、聚合、合成与依赖

阅读更多

[OO]关联、聚合、合成与依赖


关联(Association)关系是类与类之间的联接,它使一个类知道另一个类的属性和方法。关联可以是双向的,也可以是单向的。在Java语言里,关联关系是使用实例变量实现的。
聚合(Aggregation)关系是关联关系的一种,是强的关联关系。聚合是整体和个体之间的关系。例如,汽车类与引擎类、轮胎类,以及其它的零件类之间的关系便整体和个体的关系。与关联关系一种,聚合关系也是通过实例变量实现的。但是关联关系所涉及的两个类是处在同一层次上的,而在聚合关系中,两个类是处在不平等层次上的,一个代表整体,另一个代表部分。

 
合成(Composition)关系是关联关系的一种,是比聚合关系强的关系。它要求普通的聚合关系中代表整体的对象负责代表部分对象的生命周期,合成关系是不能共享的。代表整体的对象需要负责保持部分对象和存活,在一些情况下将负责代表部分的对象湮灭掉。代表整体的对象可以将代表部分的对象传递给另一个对象,由后者负责此对象的生命周期。换言之,代表部分的对象在每一个时刻只能与一个对象发生合成关系,由后者排他地负责生命周期。

 
依赖(Dependency)也是类与类之间的连接,依赖总是单向的。依赖关系表示一个类依赖于另一个类的定义。例如,一个人(Person)可以买车(car)和房子(House),Person类依赖于Car类和House类的定义,因为Person类引用了Car和House。与关联不同的是,Person类里并没有Car和House类型的属性,Car和House的实例是以参量的方式传入到buy()方法中去的。一般而言,依赖关系在Java语言中体现为局域变量、方法的参量,以及对静态方法的调用。每一个依赖关系都有一个名字。
 

文章出处:http://www.diybl.com/course/3_program/java/javashl/200838/103056.html

 

理解UML元素如何映射到Java
2009年05月10日 星期日 18:18


类图是最常用的UML图,它用于描述系统的结构化设计。其中包括类关系以及与每个类关联的属性及行为。类图能出色地表示继承与合成关系。为了将类图作为一种高效的沟通工具使用,开发者必须理解如何将类图上出现的元素转换到Java中。下面来进一步探索这一转换过程。

1 元素

在后面的小节中,分别讲解了类图的各个元素及其在Java中相应的表示。我会列出元素名,后续简短的代码片断和一幅图来表示元素在类图上的样子。每一节的最后简要总结了该元素。

1.1 类(Class

类(图A)是对象的蓝图,其中包含3个组成部分。第一个是Java中定义的类名。第二个是属性(attributes)。第三个是该类提供的方法。

性和操作之前可附加一个可见性修饰符。加号(+)表示具有公共可见性。减号(-)表示私有可见性。#号表示受保护的可见性。省略这些修饰符表示具有 package(包)级别的可见性。如果属性或操作具有下划线,表明它是静态的。在操作中,可同时列出它接受的参数,以及返回类型,如图A“Java” 区域所示。

A

 

1.2 包(Package

包(图B 是一种常规用途的组合机制。UML中的一个包直接对应于Java中的一个包。在Java中,一个包可能含有其他包、类或者同时含有这两者。进行建模时,你 通常拥有逻辑性的包,它主要用于对你的模型进行组织。你还会拥有物理性的包,它直接转换成系统中的Java包。每个包的名称对这个包进行了惟一性的标识。

B

 

1.3 接口(Interface

 

接口(图C)是一系列操作的集合,它指定了一个类所提供的服务。它直接对应于Java中的一个接口类型。接口既可用图C的那个图标来表示,也可由附加了<<interface>>的一个标准类来表示。通常,根据接口在类图上的样子,就能知道与其他类的关系。

C

 

2 关系

后面的例子将针对某个具体目的来独立地展示各种关系。

虽然语法无误,但这些例子可进一步精炼,在它们的有效范围内包括更多的语义。

2.1 依赖(Dependency

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

D

 

2.2 关联(Association

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

E

 


2.3 聚合Aggregation

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

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

F

 


 

2.4 合成(Composition

合成与聚合的区别
合成和聚合均是关联的特殊情况。聚合用来表示“拥有”关系或者整体与部分的关系;而合成则用来表示一种强得多的“拥有”关系。在 一个合成关系里面,部分和整体的生命周期是一样的。一个合成的新的对象完全拥有对其组成部分的支配权,包括它们的创建和销毁等。使用程序语言的术语来说, 组合而成的新对象对组成部分的内存分配、内存释放有绝对的责任。

人和他的腿就是一个好的例子。

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

EmployeeTimeCard的关系或许更适合表示成合成,而不是表示成关联

G

 


2.5 泛化(Generalization

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

H

 


2.6 实现(Realization

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

I


分享到:
评论
1 楼 邪恶的喵呜 2011-07-11  
图看不到哦!!!

相关推荐

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

    主要有五种关系:泛化、依赖、关联、聚合和合成。 泛化(Generalization)是我们最常用的继承关系。例如,Employee 类和 SaleEmployee 类之间的关系就是泛化关系。 ```csharp public class Employee { } public ...

    合成聚合复用原则_刘邦VS韩信.pdf

    合成(Composition)和聚合(Aggregation)都是关联关系的表现形式,它们都是对象之间的一种结构关系,但各有特点。 聚合关系类似于“has-a”关系,它表示一种整体与部分的关系,但并不意味着整体的生命周期管理...

    领域驱动聚合设计工作坊

    3. **设置聚合边界**:将具有紧密关联和依赖的对象放入同一个聚合,保持概念完整性。 4. **理顺对象图**:分析并调整对象之间的关系,消除不必要的复杂性和耦合。 5. **调整聚合边界**:根据业务需求和模型的演变,...

    合成聚合复用原则_动力节点Java学院整理

    通过应用合成复用原则,我们可以将CustomerDAO和DBUtil之间的关系由继承关系变为关联关系,使用依赖注入的方式将DBUtil对象注入到CustomerDAO中。这样做可以降低类与类之间的耦合度,提高系统的灵活性和可维护性。 ...

    领域驱动聚合设计工作坊.pptx

    - 首先,通过对领域进行分析,梳理模型对象之间的关系,如继承、合成、聚合、依赖和无关系。这些关系反映了对象间的业务含义和数据依赖。 - 接着,确定领域模型中的对象是实体(Entity)还是值对象(Value Object...

    行业-电子政务-具有卤代-丙二酸酯内电子给体的催化剂组合物和由其制备的聚合物.zip

    本主题涉及的“具有卤代-丙二酸酯内电子给体的催化剂组合物和由其制备的聚合物”是化学工程与材料科学中的一个重要研究领域,它与电子政务虽看似不直接关联,但其实这种技术的进步可间接推动电子政务的实施。...

    UML中类图实例讲解关系

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

    java开发中使用的设计模式

    本文主要针对依赖与关联、合成与聚合的区别以及设计模式的目的进行详细探讨。 #### 依赖与关联的区别 **依赖 (Dependency)** 依赖是一种较弱的类间关系,表示一个类(依赖者)在某些情况下需要用到另一个类(被...

    UML.rar_dependent UML_uml _软件工程泛化

    "UML.rar_dependent UML_uml _软件工程泛化"这个标题表明了压缩包的内容主要关注UML中的泛化关系,以及与之相关的其他概念,如依赖、关联、聚合和合成。接下来,我们将深入探讨这些概念。 首先,泛化是UML中的一种...

    常见设计模式的解读和对应代码示例,包括设计原则和软件工程中类之间的依赖关系

    关联关系(Association) 聚合关系(Aggregation) 组合关系(Composition) 依赖关系(Dependency) 泛化关系(Generalization) 实现关系(Realization) 2、设计原则 开闭原则 里氏替换原则 依赖倒置原则 单一职责原则 接口...

    UML类图使用及详细说明

    类图元素包括类、接口、继承关系、实现关系、关联关系、聚合关系、合成关系和依赖关系等。 类 类是类图的基本元素, 一般包含三个组成部分:类名、属性和方法。类名部分是不能省略的,其他组成部分可以省略。类名...

    UML资料汇编 基础知识学习

    依赖、关联、聚合和合成关系则体现在Java中类之间的引用、实例变量或构造函数中,体现了类与类之间的紧密耦合或松散耦合。 总之,UML类图提供了清晰的视觉模型,帮助开发者理解和设计复杂系统的结构。通过深入了解...

    合成复用原则.doc

    该原则强调:在进行软件复用时,应优先考虑使用组合或聚合等关联关系,而不是继承。这一原则的核心在于维持良好的封装性和降低耦合度,从而提高系统的可扩展性和可维护性。 #### 二、合成复用原则的重要性 在面向...

    JAVA模式与设计概念总结

    这些概念包括类与类之间的各种关系,如继承、关联、聚合和合成,以及设计原则,如“开-闭”原则、里氏代换原则、依赖倒转原则、接口隔离原则、组合/聚合复用原则和迪米特法则。 1. **继承关系**:继承是面向对象...

    设计模式六大原则

    - **使用合成/聚合:** 使用对象之间的关联关系(合成或聚合)来达到复用的目的,而不是使用继承。 #### 四、接口隔离原则(Interface Segregation Principle) **含义:** 接口隔离原则建议:“使用多个特定的...

    类图详细实例解说

    通过绘制类图,开发者可以清晰地展示系统中的类以及它们之间的各种关系,包括继承、关联、依赖、聚合和合成等,为软件设计提供一个直观的蓝图。 类图是UML中使用最广泛的图之一,它通过一组标准化的图形符号与连线...

    Java与UML.pdf

    4. 聚合(Aggregation)是关联的特殊形式,表示整体与部分的关系,比如公司与员工。在Java中,聚合同样表现为实例变量,但强调概念上的整体/部分关系。 5. 合成(Composition)是聚合的更强烈形式,表示部分对象...

    软件体系结构七大设计原则

    软件体系结构七大设计原则是构建高质量软件系统的基础,它们分别是:单一职责原则、开闭原则、里氏代换原则、依赖倒转原则、接口隔离原则、迪米特法则和合成聚合原则。这些原则旨在提高软件的可维护性、可扩展性和可...

    UML 中类图实例说明

    在UML类图中,类与类之间的关系包括继承、关联、依赖、聚合和组合等几种。 继承关系使用一个空心三角形和一条实线来表示,连接父类和子类。在继承关系中,子类会继承父类的所有属性和方法,这种关系也被称为泛化...

Global site tag (gtag.js) - Google Analytics