精华内容
下载资源
问答
  • 在学习面向对象设计时,类关系涉及依赖、关联、聚合、组合和泛化这五种关系,耦合性依次递增。关于耦合度,可以简单地理解为当一个类发生变更时,对其他类造成的影响程度,影响越小则耦合度越弱,影响越大耦合度越强...


    在学习面向对象设计时,类关系涉及依赖、关联、聚合、组合和泛化这五种关系,耦合度依次递增。关于耦合度,可以简单地理解为当一个类发生变更时,对其他类造成的影响程度,影响越小则耦合度越弱,影响越大耦合度越强。

    下面根据个人理解,尝试讲解这五种类关系。

    1.依赖(Dependency)

    依赖关系使用虚线加箭头表示,如下图所示:
    这里写图片描述

    学生在学习生活中经常使用电脑,于是对电脑产生了依赖。依赖关系是五种关系中耦合最小的一种关系。类A要完成某个功能引用了类B,则类A依赖类B。依赖在代码中主要体现为类A的某个成员函数的返回值、形参、局部变量或静态方法的调用,则表示类A引用了类B。以Student类和Computer类为例,用C++语言编码如下:

    class Computer {
    public:
    	static void start(){
    		cout<<"电脑正在启动"<<endl;
    	} 
    };
    class Student {
    public:
    	//返回值构成依赖
    	Computer& program();
    	//形参构成依赖
    	void program(Computer&);
    	void playGame() {
    		//局部变量构成依赖
    		Computer* computer=new Computer;
    		...
    		//静态方法调用构成依赖
    		Computer::star();
    	}
    };
    

    2.关联(Association)

    关联关系使用实线加箭头表示,类之间的关系比依赖要强。学生与老师是关联的,学生可以不用电脑,但是学生不能没有老师。如下图所示:
    这里写图片描述

    关联与依赖的对比:
    相似之处:
    关联暗示了依赖,二者都用来表示无法用聚合和组合表示的关系。

    区别:
    (1)发生依赖关系的两个类都不会增加属性。其中的一个类作为另一个类的方法的参数或者返回值,或者是某个方法的变量而已。

    发生关联关系的两个类,类A成为类B的属性,而属性是一种更为紧密的耦合,更为长久的持有关系。 在代码中的表现如下:

    class Teacher;
    class Student {
    public:
    	Teacher teacher;  //成员变量
    	void study();
    }	
    

    (2)从关系的生命周期来看,依赖关系是仅当类的方法被调用时而产生,伴随着方法的结束而结束。关联关系当类实例化的时候产生,当类对象销毁的时候关系结束。相比依赖,关联关系的生存期更长。

    关联关系有单向关联、双向关联、自身关联、多维关联等等。其中后三个可以不加箭头。
    单向关联:
    这里写图片描述

    双向关联:
    这里写图片描述

    自身关联:
    这里写图片描述

    多维关联:
    这里写图片描述

    3.聚合(Aggregation)

    聚合关系使用实线加空心菱形表示。聚合用来表示集体与个体之间的关联关系。例如班级与学生之间存在聚合关系,类图表示如下:
    这里写图片描述

    聚合关系在代码上与关联关系表现一致,类Student将成为类Classes的成员变量。代码如下:

    class Student;
    class Classes {
    public:
        Student* student; 
    	Classes(Student* stu):student(stu) {}
    };
    

    4.组合(复合,Composition)

    复合关系使用实线加实心菱形表示。组合又叫复合,用来表示个体与组成部分之间的关联关系。例如学生与心脏之间存在复合关系,类图表示如下:
    这里写图片描述

    组合关系在代码上与关联关系表现一致,类Heart将成为类Student的成员变量。代码如下:

    class Heart;
    class Student {
    public:
        Heart* heart; 
    	Student() {
    		heart=new Heart;
    	}
    	~Student() {
    		delete heart;
    	}
    };
    

    聚合与组合的对比:
    (1)聚合关系没有组合紧密。
    学生不会因为班级的解散而无法存在,聚合关系的类具有不同的生命周期;而学生如果没有心脏将无法存活,组合关系的类具有相同的生命周期。

    这个从构造函数可以看出。聚合类的构造函数中包含另一个类的实例作为参数,因为构造函数中传递另一个类的实例,因此学生可以脱离班级体独立存在。组合类的构造函数包含另一个类的实例化。因为在构造函数中进行实例化,因此两者紧密耦合在一起,同生同灭,学生不能脱离心脏而存在。

    (2)信息的封装性不同。
    在聚合关系中,客户端可以同时了解Classes类和Student类,因为他们是独立的。

    在组合关系中,客户端只认识Student类,根本不知道Heart类的存在,因为心脏类被严密地封装在学生类中。

    理解聚合与复合的区别,主要在于聚合的成员可独立,复合的成员必须依赖于整体才有意义。

    5.泛化(Generalization)

    泛化是学术名称,通俗来讲,泛化指的是类与类之间的继承关系和类与接口之间的实现关系。

    继承关系使用直线加空心三角形表示。类图结构如下:
    这里写图片描述
    类接口的实现关系使用虚线加空心三角形表示。类图结构如下:
    这里写图片描述

    6.小结

    依赖、关联、聚合、组合与泛化代表类与类之间的耦合度依次递增。依赖关系实际上是一种比较弱的关联,聚合是一种比较强的关联,组合是一种更强的关联,泛化则是一种最强的关联,所以笼统的来区分的话,实际上这五种关系都是关联关系。

    依赖关系比较好区分,它是耦合度最弱的一种,在编码中表现为类成员函数的局部变量、形参、返回值或对静态方法的调用。关联、聚合与组合在编码形式上都以类成员变量的形式来表示,所以只给出一段代码我们很难判断出是关联、聚合还是组合关系,我们需要从上下文语境中来判别。关联表示类之间存在联系,不存在集体与个体、个体与组成部分之间的关系。聚合表示类之间存在集体与个体的关系。组合表示个体与组成部分之间的关系。

    依赖、关联、聚合与组合是逻辑上的关联,泛化是物理上的关联。物理上的关联指的是类体的耦合,所以类间耦合性最强。


    参考文献

    [1] 认识UML中类之间的依赖、关联、聚合、组合、泛化的关系
    [2] UML类关系(依赖,关联,聚合,组合的区别)
    [3] 谈一谈自己对依赖、关联、聚合和组合之间区别的理解

    展开全文
  • 使用IDEA 的类UML 图分析类关系

    千次阅读 2019-03-07 12:41:18
    文章目录使用IDEA 的类UML 图分析类关系1、初始化UML 分析设置2、右键某个类打开UML 分析图3、显示分析结果4、使用放大镜 使用IDEA 的类UML 图分析类关系 1、初始化UML 分析设置 2、右键某个类打开UML 分析图 3、...

    使用IDEA 的类UML 图分析类关系


    1、初始化UML 分析设置

    在这里插入图片描述

    2、右键某个类打开UML 分析图

    在这里插入图片描述

    展开全文
  • idea查看类关系

    千次阅读 2019-04-30 09:59:05
    目录推荐博客引言只看上下...idea查看类关系图,非常常用,老是忘记这里做一下备注 只看上下继承关系不能看接口 ctrl+h 查看很详细的继承关系但是只能看向上的继承关系 快捷键:ctrl+alt+u 或者右键类如下图所示 ...

    推荐公众号

    彩蛋哦!!!(或者公众号内点击网赚获取彩蛋)
    程序员探索之路

    引言

    idea查看类关系图,非常常用,老是忘记这里做一下备注

    只看上下继承关系不能看接口

    ctrl+h
    在这里插入图片描述

    查看很详细的继承关系但是只能看向上的继承关系

    快捷键:ctrl+alt+u
    或者右键类如下图所示
    在这里插入图片描述

    展开全文
  • 使用 idea查看类关系图形

    千次阅读 2019-06-22 22:47:57
    idea使用Diagram图形查看类关系 标签:idea diagram 写在前面 最近在闲下来在看 spring 源码的时候,发现根本对 diagram 不熟,看到的类关系一脸懵逼,理解上也是烂七八糟,这次利用 idea diagram,结果真的是...

    idea使用Diagram图形查看类关系

    标签:idea diagram


    写在前面

    最近在闲下来在看 spring 源码的时候,发现根本对 diagram 不熟,看到的类关系一脸懵逼,理解上也是烂七八糟,这次利用 idea diagram,结果真的是一目而然,好东西就要利用起来,就此分享。

    1、查看图形

    在 idea 中查看类关系,大家都会经常用到。步骤如下,①在类的标签页内。点击右键,选择 Diagram,其中 show 和 show …Poup,区别就是前者在新建的标签内,后者以复现的形式展示;②实际上还可以在项目目录树,对你想查看的类点击右键,同样选择 Diagrams 效果也是一样

    在这里插入图片描述

    然后就得到下面所示的继承关系,以 spring 中核心类DefaultListableBeanFactory

    在这里插入图片描述

    显而易见:
    蓝色实现箭头是指继承关系
    绿色虚线箭头是指接口实现关系

    2、有时候需要我们优化继承链图形

    2.1 去掉不关系的类

    得到的继承关系图形,有些并不是我们想去了解的,比如上图的SuppressWarnings,我们只想关心Beanfactory重要的那几个继承关系,怎么办?

    点击选择你想要删除的类,然后直接使用键盘上的delete键就行了。清理其他类的关系后图形如下

    在这里插入图片描述

    2、显示详细的类信息

    有人说,诶,这怎么够呢,那继承下来的那些方法我也想看啊?简单,IDEA通通满足你。

    在页面右键,选择 show categories,根据需要可以展开类中的属性、方法、构造方法等等;当然也可以使用工具栏

    在这里插入图片描述

    在这里插入图片描述

    什么,方法里你还想筛选,比如说想看protected权限及以上范围的?简单,右键选择 Change Visibility Level,根据需要调整即可。

    在这里插入图片描述

    什么,你嫌图形太小你看不清楚?IDEA也可以满足你,按住键盘的Alt,竟然出现了放大镜,惊不惊喜,意不意外?

    3、引入其它类

    当我们还需要查看其他类和当前类是否有继承上的关系的时候,我们可以选择加其加入到当前的继承关系图形中来。

    在页面点击右键,选择 Add Class to Diagram,然后输入你想加入的类就可以了:

    在这里插入图片描述

    查看具体代码

    如果你想查看某个类中,比如某个方法的具体源码,当然,不可能给你展现在图形上了,不然屏幕还不得撑炸?

    但是可以利用图形,或者配合IDEA的structure方便快捷地进入某个类的源码进行查看。

    双击某个类后,你就可以在其下的方法列表中游走,对于你想查看的方法,选中后点击右键,选择 Jump to Source:

    在这里插入图片描述

    在进入某个类后,如果还想快速地查看该类的其他方法,还可以利用IDEA提供的structure功能:

    在这里插入图片描述

    选择左侧栏的structure之后,如上图左侧会展示该类中的所有方法,点击哪个方法,页面内容就会跳转到该方法部分去。

    在这里插入图片描述

    展开全文
  • UML类图以及常见类关系图解

    千次阅读 2019-01-07 00:07:43
    最近查询了类图中的常见关系,网上有不少或详细或简略的解释,大部分都是一张图被来来回回的复制粘贴,我借这个文档重新梳理一下概念和类关系。 文章目录基本概念类关系泛化 Generalization实现 Realization依赖 ...
  • VS2017中无法查看类关系

    千次阅读 2018-09-12 00:59:35
    选中项目----&gt;右键-----&...VS2017中无法查看类关系图怎么办? 1.打开vs后的初始界面,点击创建项目 2. 弹出的界面中,点击左下角的“打开Visual Studio 安装程序” 3. 弹出界面中,选择 ...
  • Java中常见的集合容器类关系

    千次阅读 2015-06-19 23:36:24
    Java中常见的集合容器类关系
  • UML——类关系

    千次阅读 2018-04-28 13:13:46
    类图显示了一组,接口,协作以及它们之间的关系。在UML中问题域要被逐步转化,通过来建模。之间有五种关系:1、依赖关系。就是A中某个具体方法a中用到B,然后在A::a方法中实例化了B进行使用。是五...
  • vs2008 中查看类关系视图

    千次阅读 2012-11-22 09:39:45
    在VS2008中,有时需要查看类的关系图,需要点一个按钮,平时这个按钮不会出现.当点击项目名称时,在解决方案资源管理器上方会出现查看类关系的图标。点击即可。可以找到放大镜放大查看。
  • IDEA自动生成类关系

    万次阅读 2018-08-21 18:03:53
    找到所有--&gt;ctrl+h--&gt;点击左键--&gt;Diagrams,有两种选择,任选一种就可以看到关系图了(记录一下,防忘记)  
  • IDEA查看类关系图的正确姿势

    千次阅读 2019-04-28 22:22:56
    有时候学习某个类库需要了解之间的关系,用来理解或者写文章,有些人会手动画UML图,比较浪费时间。 其实可以通过IDEA提供的功能来实现。 可以菜单或者快捷键直接显示继承关系图: 效果如下: 另外还...
  • 这一部分基础介绍UML中的类(接口)以及几种类关系的表示方法,以及在visio中一些图示 (一 ) 类、接口的UML表示以及visio图示 以下是visio中类和接口的表示方法,左边的是注释说明 (二)介绍...
  • 上一节介绍了类(接口)以及继承的表示方法,下面我们介绍另外几种类关系的表示 2、聚合、依赖、关联和组合 表示方法: 聚合(一种弱的拥有关系):用空心菱形+实线+箭头,它所体现的思想是A对象可以包含B对象...
  • TP5中Db类与Model类关系

    千次阅读 2017-06-08 21:35:51
    那它们之间是什么关系呢? 花了些时间阅读了源码,整理了一张结构图,以备遗忘。 上图中,Query 查询对象地位特别重要,条条细线通Query,哈哈。 Query 具备数据库操作的所有接口,是对 Connection 的...
  • 如何根据实体类关系建表

    千次阅读 2016-07-15 15:08:02
    经常建表的时候觉得关系混乱,今天看到传智播客教学的是根据实体映射表的方式,总结出来的建表方法。 以上图项目为例,我做的系统管理。系统管理下有三个分支,分别为岗位管理、部门管理、用户管理。 首先...
  • Qt:QML控件类关系

    千次阅读 2016-10-25 17:08:28
    简介花了点时间整理了下QML控件之间的关系图和QML控件和C++的对应关系,基于Qt5.6版本 其他版本可能会有差异图片像素比较大,另存为后放大图片就可以看清楚了工程下载地址QMLClassDiagram
  • idea-mac-查看类关系图-快捷键

    千次阅读 2019-07-03 21:10:00
    1. 看继承关系 快捷键 control + h查看hierarchy,只能查看向上向下继承关系,而不能看实现了哪些接口。 右键选择Diagrams(也可以使用快捷键ctrl... command + alt + B会显示出跟这个接口有关系。 然后加com...
  • 用例关系 用例图使用户 与开发人员交流的一种重要的方式,是对用户需求的一种描述。开发人员从用户的角度整体上理解系统的功能。 1)用例“注册学生信息”和“充值”与用例“用户登陆”之间的关系就是包含关系。b...
  • c#基本图形类关系

    千次阅读 2015-02-05 16:15:15
    c#画图常用总结,
  • 将某东西归纳在一起,可以成为一个有很多种提炼角度,需要根据系统地目标、业务的场景,选取合适的角度对事物进行归纳。 什么是类图? 类图可能是UML中使用的最多的一种图。 和其他图一样,类图的基本...
  • 4.2 类层次结构Visual Studio 2005提供了几个用于描述类层次结构的可视化工具。...类关系图是在Visual Studio 2005中添加的强有力的对象建模工具。4.2.1 类视图窗口类视图窗口提供了对包括在当前解决方案中项目里的
  • [img=https://img-bbs.csdn.net/upload/201705/02/1493705123_1258.png][/img] 如题,在项目,视图里面只能生成一个列表,我想请教下怎么生成那种图形化的类图?
  • UML2.0类关系基本概念与StarUML2操作

    千次阅读 2016-02-25 20:22:19
    介绍了UML中的关系以及在StarUML2中的操作。
  •   在学习C#的过程中,遇到这么一个问题——查看项目中的类图(关系图)。根据网上讲的流程,我在VS2017并没有发现这个功能,然后就在想,这是不是得安装一个东西呢?因为前期在安装VS的时候,我都是选择性的...
  • UML Class Relationships 由于最近看一些java书涉及...Generalization/specialization一般而言是指继承Realization表示一些已定义但是没有任何实现细节的,所以很多情况是指接口和抽象Dependencydependency exists

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,454,743
精华内容 981,897
关键字:

类关系