详解UML中的聚合,关联,泛化,接口等关系

1. Overview

UML设计类中,类的关系分为Generalization(泛化),Dependency(依赖关系)、Association(关联关系)、Aggregation(聚合关系)、Composition(组合关系)五种!

2. Generalization(泛化)

Generalization(泛化)表现为继承或实现关系(is a)。具体形式为类与类之间的继承关系,接口与接口之间的继承关系,类对接口的实现关系。

 

 

3. Dependency(依赖)

表现为函数中的参数(use a)。是类与类之间的连接,表示一个类依赖于另一个类的定义,其中一个类的变化将影响另外一个类。例如如果A依赖于B,则B体现为局部变量,方法的参数、或静态方法的调用。

 

 

4. Association(关联)

表现为变量(has a )。类与类之间的联接,它使一个类知道另一个类的属性和方法。例如如果A依赖于B,则B体现为A的全局变量。关联关系有双向关联和单向关联。双向关联:两个类都知道另一个类的公共属性和操作。单向关联:只有一个类知道另外一个类的公共属性和操作。大多数关联应该是单向的,单向关系更容易建立和维护,有助于寻找可服用的类。

 

 

5. Aggregation(聚合)

关联关系的一种,是强的关联关系。聚合关系是整体和个体的关系。普通关联关系的两个类处于同一层次上,而聚合关系的两个类处于不同的层次,一个是整体,一个是部分。同时,是一种弱的“拥有”关系。体现的是A对象可以包含B对象,但B对象不是A对象的组成部分。具体表现为,如果A由B聚合成,表现为A包含有B的全局对象,但是B对象可以不在A创建的时刻创建。

 

 

6. Composition(组合)

关联关系的一种,是比聚合关系强的关系。它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。Composition(组合关系)是一种强的“拥有”关系,体现了严格的部分和整体的关系,部分和整体的生命周期一致。如果A由B组成,表现为A包含有B的全局对象,并且B对象在A创建的时刻创建。

 

 

注:转自http://blog.csdn.net/maybehelios/archive/2008/01/12/2038685.aspx

----------------------------------------------------------------------------------------------------------

以下转载自: 浅谈UML中的聚合与组合  https://blog.csdn.net/liushuijinger/article/details/6994265

 

大家都知道UML的类图中一般包含五种关系即  关联 聚合 组合 泛化 依赖  有些人可能会感觉组合跟聚合有点难区分 说难其实是相对其他几种关系而言 实际上想分清这两种关系一点也不难 

聚合跟组合其实都属于关联 只不过它们是两种特殊的关联 因为本是同根生 所以它们之间难免会有相似之处 下面让我们一起来看一下它们之间有何不同

聚合与组合的概念相信不用我在此赘述大家就已经了解了 下面直接上例子

程老师的《大话》里举大那个大雁的例子很贴切 在此我就借用一下 大雁喜欢热闹害怕孤独 所以它们一直过着群居的生活 这样就有了雁群 每一只大雁都有自己的雁群 每个雁群都有好多大雁 大雁与雁群的这种关系就可以称之为聚合 另外每只大雁都有两只翅膀 大雁与雁翅的关系就叫做组合 有此可见 聚合的关系明显没有组合紧密 大雁不会因为它们的群主将雁群解散而无法生存 而雁翅就无法脱离大雁而单独生存——组合关系的类具有相同的生命周期

 

聚合关系图:

组合关系图:

 

从从代码上看这两种关系的区别在于:

构造函数不同

雁群类:

    public  class GooseGroup
    {
        public Goose goose;
 
        public GooseGroup(Goose goose)
        {
            this.goose = goose;
        }
    }
大雁类:

    public class Goose
    {
        public Wings wings;
 
        public Goose()
        {
            wings=new Wings();
        }
    }


聚合关系的类里含有另一个类作为参数

雁群类(GooseGroup)的构造函数中要用到大雁(Goose)作为参数把值传进来 大雁类(Goose)可以脱离雁群类而独立存在 

组合关系的类里含有另一个类的实例化

大雁类(Goose)在实例化之前 一定要先实例化翅膀类(Wings) 两个类紧密耦合在一起 它们有相同的生命周期 翅膀类(Wings)不可以脱离大雁类(Goose)而独立存在

信息的封装性不同

在聚合关系中,客户端可以同时了解雁群类和大雁类,因为他们都是独立的

而在组合关系中,客户端只认识大雁类,根本就不知道翅膀类的存在,因为翅膀类被严密的封装在大雁类中。
--------------------- 
作者:刘水镜 
来源:CSDN 
原文:https://blog.csdn.net/liushuijinger/article/details/6994265 
版权声明:本文为博主原创文章,转载请附上博文链接!

 

---------------------------------------------

以下转载自: https://www.jianshu.com/p/ee0c26bcbf3d

说点废话:大学学习UML的时候一点都不用心,感觉不如学个JSP能直接写个网站出来,就把该学UML的时间用在了学做网站上,不过当时UML确实没用=_=。现在接触的东西越来越多,如果分析一些大的开源框架,即使不用画特别复杂的图的话,也要画出基本的类的继承关系和依赖关系吧。现在必须学习一下了0.0

说到UML,像我这样的业余画UML图的人,大多数时候在看源码库时喜欢用手画,对于工具也喜欢简洁的UML工具。这里推荐两个在线的画UML图的工具,当然这两款工具不仅仅只能画UML。

前者是国外开发的,后者是国内的,相对来说我喜欢前者,但是有时候网速不好=_=,前者操作舒服并且画出的图也好看些,具体看自己选择,还有很多可以用的客户端工具就不介绍了。

类之间可描述的关系大概有下面几种:继承、实现、依赖、关联、聚合、组合关系的总览图如下:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值