类与类之间的关系包括四种关系,分别是泛化(Generalization)、关联(Association)、依赖(Dependency)和聚合(Aggregation) ,这对于理解面向对象设计和建模具有非常重要的作用,在次一次介绍一下它们及其区别。
1、泛化(Generalization)
也习惯称为一般化关系,表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。则可以用父类
定义指向子类的实例,实现多态。父类 父类实例=new 子类()。一般化是继承关系,是叫做“is-a-kind-of”的关系。在UML中你可以在包之间建立一般化关系。
Animal是父类,表示所有动物的共同特征。Tiger和Dog类是都是动物,是Animal的子类,因为他们都具备Animal的特征。
2、关联(Association)
关联是一种结构化的关系,指一种对象和另一种对象有联系。给定有关联的两个类,可以从一个类的对象得到另一个类的对象。关联有两元关系和多元关系。两元关系是指一种一对一的关系,多元关系是一对多或多对一的关系。一般用实线连接有关联的同一个类或不同的两个类。当你想要表示结构化关系时使用关联。 关联关系是使用实例变量来实现,比如客户和订单,每个订单对应特定的客户,每个客户对应一些特定的订单;再例如公司和员工,每个公司对应一些特定的员工,每个员工对应
一特定的公司.
3、依赖(Dependency)
对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。依赖关系表现在局部变量,方法的参数,以及对静态方法的调用.例如要去拧螺丝,你是不是要借助(也就是依赖)螺丝刀(Screwdriver)来帮助你完成拧螺丝(screw)的工作。依赖关系是一种使用关系,特定事物的改变有可能会影响到使用该事物的事物,反之不成立。在你想显示一个事物使用另一个事物时使用依赖关系。通常情况下,依赖关系体现在某个类的方法使用另一个类作为参数。在UML中你可以在其它的事物之间使用依赖关系,特别是包和节点之间。
4、聚合(Aggregation)
当对象A被加入到对象B中,成为对象B的组成部分时,对象B和对象A之间为聚集关系。聚合是关联关系的一种,是较强的关联关系,强调的是整体与部分之间的关系。与关联关系一样,聚合关系也是通过实例变量来实现这样关系的。关联关系和聚合关系来语法上是没办法区分的,从语义上才能更好的区分两者的区别。关联与聚合的区别是:
(1)关联关系所涉及的两个对象是处在同一个层次上的。比如人和自行车就是一种关联关系,而不是聚合关系,因为人不是由自行车组成的。聚合关系涉及的两个对象处于不平等的层次上,一个代表整体,一个代表部分。比如电脑和它的显示器、键盘、主板以及内存就是聚集关系,因为主板是电脑的组成部分。
(2)对于具有聚集关系(尤其是强聚集关系)的两个对象,整体对象会制约它的组成对象的生命周期。部分类的对象不能单独存在,它的生命周期依赖于整体类的对象的生命周期,当整体消失,部分也就随之消失。比如张三的电脑被偷了,那么电脑的所有组件也不存在了,除非张三事先把一些电脑的组件(比如硬盘和内存)拆了下来。
(3)聚合:指的是整体与部分的关系。通常在定义一个整体类后,再去分析这个整体类的组成结构。从而找出一些组成类,该整体类和组成类之间就形成了聚合关系。例如一个航母编队包括海空母舰、驱护舰艇、舰载飞机及核动力攻击潜艇等。需求描述中“包含”、“组成”、“分为…部分”等词常意味着聚合关系。
(4)组合:也表示类之间整体和部分的关系,但是组合关系中部分和整体具有统一的生存期。一旦整体对象不存在,部分对象也将不存在。部分对象与整体对象之间具有共生死的关系。
聚合和组合的区别在于:聚合关系是“has-a”关系,组合关系是“contains-a”关系;聚合关系表示整体与部分的关系比较弱,而组合比较强;聚合关系中代表部分事物的对象与代表聚合事物的对象的生存期无关,一旦删除了聚合对象不一定就删除了代表部分事物的对象。组合中一旦删除了组合对象,同时也就删除了代表部分事物的对象。
我们用浅显的例子来说明聚合和组合的区别。“国破家亡”,国灭了,家自然也没有了,“国”和“家”显然也是组合关系。而相反的,计算机和它的外设之间就是聚合关系,因为它们之间的关系相对松散,计算机没了,外设还可以独立存在,还可以接在别的计算机上。在聚合关系中,部分可以独立于聚合而存在,部分的所有权也可以由几个聚合来共享,比如打印机就可以在办公室内被广大同事共用。
在C++语言中,从实现的角度讲,聚合可以表示为:
class A {...}
class B { A* a; .....}
即类B包含类A的指针;
而组合可表示为:
class A{...}
class B{ A a; ...}
即类B包含类A的对象。
准确的UML类图中用空心和实心菱形对聚合和组合进行了区分。
聚合,关联,组合 是对象之间的三种关系。从某种意义上说,继承是一种类的纵向关系,而聚合,关联,组合是对象的横向关系。
其关系强弱为 关联<聚合<组合
关联和聚合的区别主要在语义上,关联的两个对象之间一般是平等的,例如你是我的朋友,聚合则一般不是平等的,例如一个公司包含了很多员工,其实现上是差不多的。聚合和组合的区别则在语义和实现上都有差别,组合的两个对象之间其生命期有很大的关联,被组合的对象是在组合对象创建的同时或者创建之后创建,在组合对象销毁之前销毁。一般来说被组合对象不能脱离组合对象独立存在,而且也只能属于一个组合对象,例如一个文档的版本,必须依赖于文档的存在,也只能属于一个文档。聚合则不一样,被聚合的对象可以属于多个聚合对象,例如一个员工可能可以属于多个公司。
我想举个通俗的例子。
你和你的心脏之间是composition关系(心脏只属于自己)
你和你买的书之间是aggregation关系(书可能是别人的)
你和你的朋友之间是association关系
来自于:
http://blog.csdn.net/yxpjx/archive/2009/07/28/4387198.aspx
分享到:
相关推荐
在软件工程领域,UML(统一建模语言)是...通过理解和熟练应用这些UML类之间的关系,开发者能够清晰地表达复杂的软件设计,提高代码的可读性和维护性。无论是进行系统分析、设计还是文档编制,UML都是不可或缺的工具。
### 基于UML类图的类之间依赖关系图论问题研究 #### 摘要及背景介绍 本文探讨了UML(统一建模语言)类图中的类间依赖关系,并通过图论的方法对其进行深入分析。随着面向对象编程方法在软件开发领域的广泛应用,UML...
UML类关系是UML中的一种基本概念,描述了类之间的关系。今天,我们将探讨UML类关系中的四种基本关系:依赖、关联、聚合和组合。 依赖(Dependency) 依赖关系是指一个类使用另一个类的对象或服务的关系。依赖关系...
在UML类图中,类与类之间的关系对于理解系统的结构至关重要。本文将详细介绍UML类图中的六种基本关系:依赖、类属、关联、实现、聚合和组合。 #### 二、依赖(Dependency) **定义**: - 当元素A的变化会影响元素B...
类图和关系数据库表之间存在着自然的对应关系,通过对UML类图的理解,可以自动生成对应的关系数据库表结构,从而提高开发效率,减少重复劳动,确保数据库设计的一致性和准确性。 一、UML类图基础知识点 UML类图...
关联关系表示类与类之间的静态连接,用于描述类之间的结构关系,是UML中最基本的关系类型之一。关联关系可以是一对一、一对多或多对多的形式,并且可以在关联上定义角色名、可见性等属性。 **特点:** - **双向性*...
类之间的关系是UML中核心的概念,它们反映了类之间的相互作用和依赖。本文将详细探讨四种主要的UML类关系——依赖、泛化、关联和实现,并通过Java代码示例来阐述这些关系的实现。 1. **依赖(Dependency)**:依赖...
在UML(统一建模语言)中,类图是一种重要的模型表示工具,它用来描绘系统中的类、接口以及它们之间的关系。类图中的类扮演着核心角色,它们定义了系统的结构和行为。类可以分为抽象类和具体类,以及主动类和非主动...
在UML中,包含关系和扩展关系是两种关键的结构关系,它们帮助我们理解和描述系统的组件如何相互作用和组织。这些概念在软件设计师的考试中是重要的考察点,因此理解它们的含义和应用至关重要。 首先,我们来看包含...
在使用 UML 进行实体关系建模时,需要首先定义实体类型,包括 Employees、Products 等,然后定义实体类型之间的关系,例如 Employee 和 Product 之间的拥有关系。接着,需要定义关系类型的属性,例如 Services 关系...
本文将深入探讨UML类关系中的四种关键概念:依赖、关联、聚合和组合,以及它们在软件设计中的应用。 1. 依赖(Dependency) 依赖是UML中最弱的一种关系,表示一个类(或对象)的实现或行为需要另一个类(或对象)的...
UML类图是UML中的核心概念之一,它提供了一种可视化的方式来描绘系统的静态结构,包括类、接口、对象以及它们之间的关系。在这个文档中,我们将深入探讨UML类图、类与类间的关系,并结合提供的文档资源进行详细的...
《UML在构建客户关系管理系统中的应用》 UML(统一建模语言)是一种标准化的图形建模语言,用于软件工程领域,特别是系统分析和设计阶段。在这个课设项目中,“uml客户关系管理系统”深入展示了如何运用UML来构建一...
在这个"uml 实验类的关系"中,我们将深入探讨类之间的三种主要关系:关联、泛化和依赖。 1. **关联关系**:关联是描述类之间的一种结构关系,它表示一个类的对象与另一个类的对象之间存在某种联系。在图书管理系统...
UML类图是UML中的一种重要组成部分,用于描述类和对象之间的关系。 1.UML类图的基本组成部分 UML类图由三个部分组成:类名、类特性和类操作。类名表示类的名称,如果是抽象类就用斜体显示。类特性是类的字段和属性...
UML中的类与类之间的关系是理解和设计复杂系统的关键,包括泛化、关联、依赖、聚合和组合等。 ### 泛化(Generalization) 泛化关系表示了类之间的继承关系,它体现了“is-a”(是一种)的概念,即子类是父类的一种...
#### 类之间关系的实现技术 在UML类图中,类之间的关系根据紧密程度的不同可以分为继承、关联、聚集和组合。接下来,我们分别讨论这些关系在将类映射成表的过程中是如何实现的。 ##### 继承的实现 - **策略一**:...
UML 类框图基本关系及符号 UML(Unified Modeling Language)类框图是 software architecture 中的一种重要工具,用于描述软件系统的结构和行为。类框图是一种静态模型,用于描述系统中的类、对象及其之间的关系。...
UML类图作为UML中的一种重要图表类型,主要用于描述系统中类与类之间的关系。本文将详细介绍UML类图中的几种主要关系类型:关联、聚合/组合以及依赖,并通过具体的实例和代码示例来帮助读者更好地理解这些概念。 ##...
UML中的六大关系——依赖、泛化(类属)、关联、实现、聚合和组合,构成了理解软件系统结构的基础。 ### 依赖(Dependency) 依赖关系是最弱的一种关系,表示一个类(或组件、用例等)使用了另一个类的接口,这种...