UML图中聚合、组合、关联、依赖、泛化的强弱关系
一、泛化
1、说明
泛化是一种继承关系,如果一个类A的所有属性和操作能被另一个类B所继承,则类B不仅可以包含自己独有的属性,而且可以包含类A的属性和操作。继承是类与类或者类与接口之间最常见的关系。
2、例图

3、表现
父类 父类实例=new 子类();
4、代码
- <span style="font-family:KaiTi_GB2312;font-size:24px;">class Animal{};
- class Tiger:public Animal{};
- class Dog:public Animal{};
- Animal * pAnimal=new Dog;</span>
泛化中子类直接继承了父类的属性和操作所以它的关系最强
二、关联
1、说明
对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系
2、例图

3、表现
关联关系时使用实例变量来实现的
4.代码
- <span style="font-family:KaiTi_GB2312;font-size:24px;">public class Company
- {
- private Employee employee()
- {
- return employee;
- }
- public void setEmployee(Employee employee)
- {
- this.employee=employee;
- }
- public void run()
- {
- employee.starWorking();
- }
- }
- </span>
三、聚合
1、说明
当对象A被加入到对象B中,成为对象B的组成部分时,对象B和A之间为聚集关系。聚合是关联关系的一种,是较强的关联关系,强调整体与部分之间的关系。
2、例图

3、表现
与关联关系一样,聚合关系也是通过实例变量来实现的。
4、关联与聚合的区别
在语法上是难以区分的,在语义上才能更好的区分两者的区别
区别:关联关系所涉及的两个对象是处在同一个层次上的。比如人和自行车就是一种关联关系,而不是聚合关系,因为人不是自行车的组成部分。
聚合关系涉及的两个对象处于不平等的层次上,一个代表整体,一个代表部分。比如:电脑和它的显示器、键盘、主板和内存就是聚集关系。
5、代码
- <span style="font-family:KaiTi_GB2312;font-size:24px;">public class Computer
- {
- private CPU cpu;
- public CPU getCPU()
- {
- return cpu;
- }
- public void setCPU(CPU cpu)
- {
- this.cpu=cpu;
- }
- //开启电脑
- public void start()
- {
- cpu.run();</span>
- <span style="font-family:KaiTi_GB2312;font-size:24px;"> }
- }</span>
四、组合
1、说明
组合关系也是聚合关系的一种,是比聚合关系更强的关系。组合关系是不能共享的。例如人有四肢、头等
表示类之间整体和部分的关系,组合中部分和整体具有统一的生存周期。一旦整体对象不存在,部分对象也将不存在。部分对象和整体对象之间具有共生死的感觉。
2、例图

4、代码
- <span style="font-family:KaiTi_GB2312;font-size:24px;">class Leg();
- class Arm();
- class Person
- {
- Leg mLeg;
- Arm mArm;
- };</span>
5、聚合和组合的区别
a、聚合和组合都是一种结合关系,只是额外具有整体部分的含义
b、部件的生命周期不同
聚合关系中,整体不会拥有部件的生命周期,所以整体删除时,部件不会被删除。再者,多个整体可以共享同一个部件
组合关系中,整体拥有部分的生命周期,所以整体删除时,部件一定会跟着删除。而且,多个整体不可以同时间共享一个部件。
c、聚合关系是“has-a”关系,组合关系是“contain-a”关系
所以它们的关系是:组合>聚合>关联
五、依赖
1、说明
对于两个相对独立的对象,当一个对象负责构造另一个对象的实例时,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系
与关联关系不同的是,依赖关系是以参数变量的形式传入到依赖类中。
依赖是一种弱关联,只要一个类用到另一个类,但是和另一个类的关系不太明显的时候(可以说是“use”了那个类),可以把这种关系看成是依赖
2、例图

3、表现
依赖关系表现在局部变量,方法的参数,以及对静态方法的调用
4、代码
- <span style="font-family:KaiTi_GB2312;font-size:24px;">class Car();
- class Hourse();
- class Person
- {
- void buy(Car car)
- {
- }
- void buy(House pHouse)
- {
- }
- }
- </span>
六、实现
实现关系和泛化是同等的强度。
综上所述它们之间的耦合度是:泛化=实现>组合>聚合>关联>依赖
UML图中聚合、组合、关联、依赖、泛化的强弱关系的更多相关文章
- UML的类图关系分为: 关联、聚合/组合、依赖、泛化(继承)
		UML的类图关系分为: 关联.聚合/组合.依赖.泛化(继承).而其中关联又分为双向关联.单向关联.自身关联:下面就让我们一起来看看这些关系究竟是什么,以及它们的区别在哪里. 1.关联 双向关联:C1- ... 
- 8.2.1 UML, 组合和聚合、关联和依赖
		类A的属性是另一个类B,那么这两个类是关联的,但不一定是聚合,如果在A类中创建了B类的实例(使用new!),那么B类和A类就是聚合关系,但不一定是组合关系,因为不一定在A类创建的同时去创建B类的实例, ... 
- UML图中经常用到几种的关系图例
		学习这个东西挺奇怪的,时间一长就容易忘记,或者记不清楚.今天看到一些UML图的关系,发现有些出入了,索性就写下来,以后再忘记的时候过来看看. 在UML的类图中,常见的有以下几种关系: 继承(Gener ... 
- 详解UML中的聚合,关联,泛化等关系
		1. Overview UML设计类中,类的关系分为Generalization(泛化),Dependency(依赖关系).Association(关联关系).Aggregation(聚合关系).Co ... 
- UML图中时序图的基本用法
		快速阅读 序列图主要用来更直观的表现各个对象交互的时间顺序,将体现的重点放在 以时间为参照,各个对象发送.接收消息,处理消息,返回消息的 时间流程顺序,也称为时序图. 里面用到的基本元素如下: 角色- ... 
- 异常处理截止和UML图
		0.异常处理机制 0.1.java中异常的作用是:增强程序健壮性. 0.2.java中异常以类和对象的形式存在. 1.java的异常处理机制 1.1.异常在java中以类和对象的形式存在.那么异常的继 ... 
- UML类图关系--继承(泛化)、实现、关联、聚合、组合、依赖
		在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composi ... 
- UML类图几种关系的总结,泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖
		在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Compositi ... 
- 分分钟弄明白UML中泛化 , 实现 , 关联, 聚合, 组合, 依赖
		在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization), 关联(Association), 聚合(Aggregation), 组合(Compo ... 
随机推荐
- BZOJ.1085.[SCOI2005]骑士精神(迭代加深搜索)
			题目链接 最小步数这类,适合用迭代加深搜索. 用空格走代替骑士. 搜索时记录上一步防止来回走. 不需要每次判断是否都在位置,可以计算出不在对应位置的骑士有多少个.而且每次复原一个骑士至少需要一步. 空 ... 
- Gitlab使用QQ企业邮箱发送邮件
			注册QQ企业邮箱 地址 https://exmail.qq.com/signupfree?refer=intro#signup/free 注册完成后解析 编辑/etc/gitlab/gitlab.rb ... 
- 【原】Redis windows下的环境搭建
			下载地址:https://github.com/dmajkic/redis/downloads 下载下来的包里有两个,一个是32位的,一个是64位的.根据自己的实情情况选择,我的是64bit,把这个文 ... 
- 你的java/c/c++程序崩溃了?揭秘段错误(Segmentation fault)(3)
			前言 接上两篇: 你的C/C++程序为什么无法运行?揭秘Segmentation fault (1) 你的C/C++程序为什么无法运行?揭秘Segmentation fault (2) 写到这里,越跟 ... 
- 关于.net core程序的部署
			最近发布.net core程序的时候,发现它是可以独立部署的,它支持如下两种部署方式: 依赖框架的部署FDD.只发布我们的程序,运行前用户需要手动安装.net core runtime. 独立部署SC ... 
- HDU 4498 Function Curve (自适应simpson)
			Function Curve Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)To ... 
- sTM32 使用TIMx_CH1作为 Tx1F_ED 计数器时钟
			环境:iar arm 5.3 stm32f103vbt6 使用PA.8 外部输入10Mhz的方波.可从systick中断得到数据4. 4×5000(预分频值)×1000(tick中断时间)=20MHz ... 
- 从零开始部署CAS服务器
			从0开始部署CAS服务器的操作过程文档,我已经整理完毕,一共分为8步,这8步都是我自己操作实践过的. Setp1:Ubuntu server安装 在virtual box中安装ubuntu serve ... 
- ASP.NET 2.0
			http://www.cnblogs.com/linezero/p/nightlynetcore2.html 
- 使用HTML5和CSS3碎语
			当我们使用HTML5, CSS3,甚至Bootstrap设计网站的时候,有些方面是必须考虑的,比如字体大小,标题大小,行间距,每行字数,字体,颜色,背景图片和文字的搭配,图标,留白和布局......所 ... 
