`

UML类之间的关系

    博客分类:
  • UML
阅读更多
类与类之间的关系包括四种关系,分别是泛化(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类之间的关系图

    类间关系有很多种,在大的类别上可以分为两种:纵向关系、横向关系。 纵向关系就是继承关系,它的概念非常明确,也成为OO的三个重要特征之一,这里不过多的讨论。

    基于UML类图的类之间依赖关系图论问题研究.pdf

    基于UML类图的类之间依赖关系图论问题研究.pdf

    UML类关系之JAVA代码实现

    关系是事物之间的联系。类之间有4种重要的关系:依赖、泛化、关联和实现。这些关系都可以映射到代码里。

    ModelGoon java代码自动生成UML图

    ModelGoon,Eclipse插件。由 java代码可自动生成UML类图、协作图、顺序图等,操作简单

    UML类图各种关系详解

    UML类图各种关系详解 包括 继承 实现 聚合 等等 一张图道出类之间的各种关系 直观容易

    UML类图-关系数据库之间的映射[收集].pdf

    UML类图-关系数据库之间的映射[收集].pdf

    类的关系图, UML图示

    类的关系图, 类图, 通过starUML绘制的类类之间的关系图, 包含8中类的关系. 详细讲解见博客: http://my.oschina.net/whforever/blog/645501

    UML用例的关系_UML用例图关系_源码

    论述UML用例图之间的关系,对用例图进行详细说明。

    UML类图关系大全!!!!!

    UML类图关系大全,里面把之间的关系描述的较清楚,尤其是图像

    UML类图与类的关系详解

    在画类图的时候,理清类和类之间的关系是重点。类的关系有泛化(Generalization)、实现(Realization)、依赖(Dependency)和关联(Association)。其中关联又分为一般关联关系和聚合关系(Aggregation),合成关系...

    UML类图说明类图关系

    大家知道,UML类图之间的关系确实难以理解,而诸多教材中的解释又各不相同;我是查阅了了很多教程后,总结出的相对具有共性的解释了; 实例介绍了类图之间的关系及面向对象的相关概念 同时,介绍了EA下类图各关系的...

    IT ATA UML认证试题

    2. 两个类之间的关联表示他们之间存在一种不适于继承的逻辑关系。在关联关系的表示图元的两端,可以表示参与关联的()特性。 A、约束 B、可见性 C、角色名 D、多重性 3、(D)是一种不包含操作的实现部分的特殊类。...

    uml 试题及答案

    UML试题1、UML中的交互图有两种,分别是顺序图和协作图,请分析一下两者之间的主要差别和各自的优缺点。掌握利用两种图进行的设计的方法。 答:协作图可视化地表示了对象之间随时间发生的交互,它除了展示对象之间的...

    UML用例图之泛化(generalization)、扩展(extend)和包含(include)关系

    在画用例图的时候,理清用例之间的关系是重点。用例的关系有泛化(generalization)、扩展(extend)和包含(include)。其中include和extend最易混淆。下面我们结合实例彻底理清三者的关系。基本概念用例图...

    从UML类图到关系数据库表的代码生成方法

    计算机工程的论文 在介绍代码自动生成技术产生的背景及其应用的基础上,研究从 UML 类图到关系型数据库表之间的映射规范和映射实现方式

    UML:类图关系总结

    UML类图几种关系的总结,泛化 = 实现 &gt; 组合 &gt; 聚合 &gt; 关联 &gt; 依赖 在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition...

    基于UML的网上购物商店的分析与设计 (2013年)

    以网上购物商店为例,运用UML分析了系统的静态模型和动态特征,分析了基于UML的网上购物商店的建模的实现过程:类图分析了网上购物商店中5个实体类(顾客类、订单类、商品类、记录类、管理员类)之间的关系;顾客用例图...

    UML类图、类与类间关系文档(UML必看)

    NULL 博文链接:https://quicker.iteye.com/blog/600285

    uml 试卷很全面好多个试卷及答案

    8.在UML软件开发过程的需求分析和系统分析阶段,建立类模型的步骤分为 寻找确定类 、 定义类的接口 、定义类之间的关系、建立类图 和 建立系统包图 。 9.组合聚集是指“整体”拥有它的“部分”,它具有强的物主...

Global site tag (gtag.js) - Google Analytics