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 ...
随机推荐
- [USACO08OCT]Watering Hole
[USACO08OCT]Watering Hole 题目大意: Farmer John 有\(n(n\le300)\)个牧场,他希望灌溉他的所有牧场.牧场编号为\(1\sim n\),要灌溉一个牧场有 ...
- ==与equals与hashCode的区别联系。
前言:对于引用类型的变量,它涉及到两块内存,一块是堆中的内存,用于存放new出来的对象(就是对象的具体内容):另一块是栈内存,用来存放变量在堆内存中的地址. 1,“==” 判断两个变量是否是同一个变量 ...
- ant design select 坑总结
1.保持Option的value和select绑定的value一致,这样在select框中显示的才是Option中的节点文本label 2.labelInValue属性可以使选中项的文本label包装 ...
- AxonFramework
AxonFramework
- 解决Android LogCat 输出乱码的问题(转)
Android日志系统提供了记录和查看系统调试信息的功能.日志都是从各种软件和一些系统的缓冲区中记录下来的. 可以使用adb的logcat 命令来查看系统日志缓冲区的内容,但是在实际操作时,会发现在C ...
- PL/SQL Developer中调试oracle的存储过程
作者:iamlaosong 唉,真土,曾经用Toad.一直用dbms_output.put_line调试存储过程,仅仅认为不方便,用上PL/SQL Developer后,习惯性的还是用这种方法.人都是 ...
- 《Go语言实战》摘录:6.2 并发 - goroutine
6.2 goroutine
- CAD扩展属性的提取--FME方式
一.CAD的扩展属性 了解一下CAD的扩展属性方式,CAD的扩展属性包括二类: 基于CAD二次开发的软件产品(例如南方cass),其扩展属性是附属在图形(点.多段线.注记.面)上面的,它是以XReco ...
- libxml2.dylb 罗致<libxml/tree.h> 老是找不到头文件
libxml2.dylb 导致<libxml/tree.h> 老是找不到头文件 添加了libxml2.dylb的framework ,结果还是引用不了<libxml/tree.h&g ...
- 浅析iOS程序设计模式(基于MVC)
接触iOS手机开发有一段时间了.总体来说,苹果公司设计的开发环境还是非常人性化的.很容易上手,也方便深入. 在组织大型项目的代码文件时,我们常用MVC的思想.MVC的概念讲起来非常简单,就和对象(ob ...