UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别

本文详细介绍了UML类图的基本概念及其在软件设计中的应用,包括类、接口、泛化、依赖、关联、聚合和组合等核心元素及它们之间的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://blog.youkuaiyun.com/sfdev/article/details/3906243

uml关系的区别

这是一堂关于UML基础知识的补习课;现在我们做项目时间都太紧了,基本上都没有做过真正的class级别的详细设计,更别提使用UML来实现规范建模了;本篇主要就以前自己一直感觉很迷糊的几种class之间的关系进行整理,让我们在真正用UML进行比如类图设计时能够更加清晰明了;以下就分别介绍这几种关系:

继承

指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议性;

实现

指的是一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系;在Java中此类关系通过关键字implements明确标识,在设计时一般没有争议性;

依赖

可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用;

关联

他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量;

聚合

聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;

组合

组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;

对于继承、实现这两种关系没多少疑问,他们体现的是一种类与类、或者类与接口间的纵向关系;其他的四者关系则体现的是类与类、或者类与接口间的引用、横向关系,是比较难区分的,有很多事物间的关系要想准备定位是很难的,前面也提到,这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;但总的来说,后几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖;

http://myswirl.blog.163.com/blog/static/5131864220081181024294/

软件设计起步:画UML类图  

2008-12-08 10:02:42|  分类: 设计模式 |字号 订阅


? 学习设计模式,画 UML 类图是基础,通过 UML 类图,能更好地和大家交流,也能很容易就表达出自己的设计想法,它就好比普通话,是一种标准语言。

???????现在流行的主要工具有两种:Rational Rose?Microsoft Visio,这两种工具都比较易用,选择哪种工具就看个人的喜好了。本人对Microsoft的软件比较有好感,所以自然Microsoft Visio 2003是我的首选。

???????UML类图常用元素。

类:

???????类是一种复杂的数据类型,它是将不同类型的数据和与这些数据相关的操作封装在一起的集合体。

?????????????
??????软件设计起步:画UML类图 - myswirl - myswirl成长之路
??????? CPerson
是一个抽象类,它是不能被实例化的,而CFamily可以被实例化。

接口:

???????接口是被调用者调用的一组操作方法。

软件设计起步:画UML类图 - myswirl - myswirl成长之路???????
??? 其实CPerson也可以作为接口。

?

???????UML类图中常见的几种关系。

泛化(Generalization):

???????一句话,就是继承的表示。是is-a的关系。
软件设计起步:画UML类图 - myswirl - myswirl成长之路

依赖(Dependency:

???????依赖是一种使用关系,它说明一个事物规范的变化可能影响到使用它的另一个事务,但反之则不然。依赖关系的表示法是虚线箭头,箭头尾部的元素依赖箭头头部的元素,是use-a的关系。

软件设计起步:画UML类图 - myswirl - myswirl成长之路
关联(Association):

???????用于描述类与类之间的连接,是has -a的关系。
软件设计起步:画UML类图 - myswirl - myswirl成长之路
聚合(Aggregation):

???????聚合是关联的特例。如果类与类之间的关系具有“整体和局部”的特点,则把这样的关联称为聚合。它往往有“包含”,“由……组成”的意思。


如何使用visio

http://jingyan.baidu.com/article/9f7e7ec07286e16f281554f7.html

类图又称为UML图,在做C++的项目中,画类图是必不可少的工作之一。


工具/原料

  • 安装有Visio 2007的电脑一台

步骤/方法

  1. 双击桌面的Visio 2007图标打开软件。

    怎样用Visio 2007画C++类图
  2. 打开后的界面如下图所示。

    怎样用Visio 2007画C++类图
  3. 点击左边的“软件和数据库”。

    怎样用Visio 2007画C++类图
  4. 中间会出现很多选项,这个时候鼠标左键双击“UML 模型图”。

    怎样用Visio 2007画C++类图
  5. 出现如下图所示的界面。

    怎样用Visio 2007画C++类图
  6. 用鼠标左键点击“UML 静态结构”。

    怎样用Visio 2007画C++类图
  7. 出现如下图所示界面。

    怎样用Visio 2007画C++类图
  8. 这个时候就可以开始画C++类图了。首先把光标放在“类”上,并按住鼠标左键,开始移动鼠标,这个时候“类”就跟着动起来了。把“类”拖到方格区域时,释放鼠标左键。

    怎样用Visio 2007画C++类图
  9. 这个时候是不是觉得背景很小呢?按住CTRL键,然后往前滚动鼠标中奖的滚轮。整个画图区域都被放大了。

    怎样用Visio 2007画C++类图
  10. 这个时候就可以开始填写C++类中的相关元素了。类的三个部分从上到下,分别写类的“类名”,“类变量”和“类函数”。

    怎样用Visio 2007画C++类图
  11. 下面以下图所示的C++类为例画一个类图。类图的规则:最前面写访问权限。访问权限为“public”的前面写“+”,为“private”的前面写“-”,为“protected”的前面写“#”。接着写“变量名”或者“函数名”。接着写一个“:”。最后写“变量名”或者“函数名”的类型。

    怎样用Visio 2007画C++类图
    怎样用Visio 2007画C++类图
  12. 首先用鼠标左键双击“类”,出现如下图所示的界面。

    当前类名为“SportsMan”,修改后点击“确定”,类图变成下图所示样子。


    怎样用Visio 2007画C++类图
    怎样用Visio 2007画C++类图
  13. 以下图为例,开始填写“变量”。


    首先用鼠标左键双击“类”,然后点击“特性”,出现如下图所示的界面

    “特性”栏填写“变量名”,“类型”栏填写“变量类型”,“可见性”栏填写“变量访问权限”。后面的根据需要填写,本例不填写。点击“确定”后,类图变成下图所示样子。

    怎样用Visio 2007画C++类图
    怎样用Visio 2007画C++类图
    怎样用Visio 2007画C++类图
  14. 以下图为例,开始填写“函数”。


    首先用鼠标左键双击“类”,然后点击“操作”,出现如下图所示的界面。

    怎样用Visio 2007画C++类图
    怎样用Visio 2007画C++类图
  15. “操作”栏填写“函数名”,“返回类型”栏填写“函数类型”,“可见性”栏填写“函数访问权限”。后面的根据需要填写,本例不填写。点击“确定”后,类图变成下图所示样子。


    怎样用Visio 2007画C++类图
  16. 最终“步骤11”所示的C++类,画出来的类图如下图所示。

    怎样用Visio 2007画C++类图
  17. 如果有多个类,可以根据上面的步骤画出相应的类。然后根据类之间的关系画出相应的关系。例如下面的类:

    最终画出的类图如下图所示。


    怎样用Visio 2007画C++类图
    怎样用Visio 2007画C++类图
    怎样用Visio 2007画C++类图

注意事项

  • 变量名和函数名过多的时候要细心,防止输入错误。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值