一、泛化

1、说明

泛化是一种继承关系,如果一个类A的所有属性和操作能被另一个类B所继承,则类B不仅可以包含自己独有的属性,而且可以包含类A的属性和操作。继承是类与类或者类与接口之间最常见的关系。

2、例图

3、表现

父类 父类实例=new 子类();

4、代码

  1. <span style="font-family:KaiTi_GB2312;font-size:24px;">class Animal{};
  2. class Tiger:public Animal{};
  3. class Dog:public Animal{};
  4. Animal * pAnimal=new Dog;</span>

泛化中子类直接继承了父类的属性和操作所以它的关系最强

二、关联

1、说明

对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系

2、例图

3、表现

关联关系时使用实例变量来实现的

4.代码

  1. <span style="font-family:KaiTi_GB2312;font-size:24px;">public class Company
  2. {
  3. private Employee employee()
  4. {
  5. return employee;
  6. }
  7. public void setEmployee(Employee employee)
  8. {
  9. this.employee=employee;
  10. }
  11. public void run()
  12. {
  13. employee.starWorking();
  14. }
  15. }
  16. </span>

三、聚合

1、说明

当对象A被加入到对象B中,成为对象B的组成部分时,对象B和A之间为聚集关系。聚合是关联关系的一种,是较强的关联关系,强调整体与部分之间的关系。

2、例图

3、表现

与关联关系一样,聚合关系也是通过实例变量来实现的。
4、关联与聚合的区别

在语法上是难以区分的,在语义上才能更好的区分两者的区别

区别:关联关系所涉及的两个对象是处在同一个层次上的。比如人和自行车就是一种关联关系,而不是聚合关系,因为人不是自行车的组成部分。

聚合关系涉及的两个对象处于不平等的层次上,一个代表整体,一个代表部分。比如:电脑和它的显示器、键盘、主板和内存就是聚集关系。

5、代码

  1. <span style="font-family:KaiTi_GB2312;font-size:24px;">public class Computer
  2. {
  3. private CPU cpu;
  4. public CPU getCPU()
  5. {
  6. return cpu;
  7. }
  8. public void setCPU(CPU cpu)
  9. {
  10. this.cpu=cpu;
  11. }
  12. //开启电脑
  13. public void start()
  14. {
  15. cpu.run();</span>
  1. <span style="font-family:KaiTi_GB2312;font-size:24px;">   }
  2. }</span>

四、组合

1、说明

组合关系也是聚合关系的一种,是比聚合关系更强的关系。组合关系是不能共享的。例如人有四肢、头等

表示类之间整体和部分的关系,组合中部分和整体具有统一的生存周期。一旦整体对象不存在,部分对象也将不存在。部分对象和整体对象之间具有共生死的感觉。

2、例图

4、代码

  1. <span style="font-family:KaiTi_GB2312;font-size:24px;">class Leg();
  2. class Arm();
  3. class Person
  4. {
  5. Leg mLeg;
  6. Arm mArm;
  7. };</span>

5、聚合和组合的区别

a、聚合和组合都是一种结合关系,只是额外具有整体部分的含义

b、部件的生命周期不同

聚合关系中,整体不会拥有部件的生命周期,所以整体删除时,部件不会被删除。再者,多个整体可以共享同一个部件

组合关系中,整体拥有部分的生命周期,所以整体删除时,部件一定会跟着删除。而且,多个整体不可以同时间共享一个部件。

c、聚合关系是“has-a”关系,组合关系是“contain-a”关系

所以它们的关系是:组合>聚合>关联

五、依赖

1、说明

对于两个相对独立的对象,当一个对象负责构造另一个对象的实例时,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系

与关联关系不同的是,依赖关系是以参数变量的形式传入到依赖类中。

依赖是一种弱关联,只要一个类用到另一个类,但是和另一个类的关系不太明显的时候(可以说是“use”了那个类),可以把这种关系看成是依赖

2、例图

3、表现

依赖关系表现在局部变量,方法的参数,以及对静态方法的调用

4、代码

  1. <span style="font-family:KaiTi_GB2312;font-size:24px;">class Car();
  2. class Hourse();
  3. class Person
  4. {
  5. void buy(Car car)
  6. {
  7. }
  8. void buy(House pHouse)
  9. {
  10. }
  11. }
  12. </span>

六、实现

实现关系和泛化是同等的强度。

综上所述它们之间的耦合度是:泛化=实现>组合>聚合>关联>依赖

UML图中聚合、组合、关联、依赖、泛化的强弱关系的更多相关文章

  1. UML的类图关系分为: 关联、聚合/组合、依赖、泛化(继承)

    UML的类图关系分为: 关联.聚合/组合.依赖.泛化(继承).而其中关联又分为双向关联.单向关联.自身关联:下面就让我们一起来看看这些关系究竟是什么,以及它们的区别在哪里. 1.关联 双向关联:C1- ...

  2. 8.2.1 UML, 组合和聚合、关联和依赖

    类A的属性是另一个类B,那么这两个类是关联的,但不一定是聚合,如果在A类中创建了B类的实例(使用new!),那么B类和A类就是聚合关系,但不一定是组合关系,因为不一定在A类创建的同时去创建B类的实例, ...

  3. UML图中经常用到几种的关系图例

    学习这个东西挺奇怪的,时间一长就容易忘记,或者记不清楚.今天看到一些UML图的关系,发现有些出入了,索性就写下来,以后再忘记的时候过来看看. 在UML的类图中,常见的有以下几种关系: 继承(Gener ...

  4. 详解UML中的聚合,关联,泛化等关系

    1. Overview UML设计类中,类的关系分为Generalization(泛化),Dependency(依赖关系).Association(关联关系).Aggregation(聚合关系).Co ...

  5. UML图中时序图的基本用法

    快速阅读 序列图主要用来更直观的表现各个对象交互的时间顺序,将体现的重点放在 以时间为参照,各个对象发送.接收消息,处理消息,返回消息的 时间流程顺序,也称为时序图. 里面用到的基本元素如下: 角色- ...

  6. 异常处理截止和UML图

    0.异常处理机制 0.1.java中异常的作用是:增强程序健壮性. 0.2.java中异常以类和对象的形式存在. 1.java的异常处理机制 1.1.异常在java中以类和对象的形式存在.那么异常的继 ...

  7. UML类图关系--继承(泛化)、实现、关联、聚合、组合、依赖

    在UML类图中,常见的有以下几种关系:  泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Composi ...

  8. UML类图几种关系的总结,泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖

    在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Compositi ...

  9. 分分钟弄明白UML中泛化 , 实现 , 关联, 聚合, 组合, 依赖

    在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization), 关联(Association), 聚合(Aggregation), 组合(Compo ...

随机推荐

  1. BZOJ.2806.[CTSC2012]Cheat(广义后缀自动机 DP 单调队列)

    题目链接 首先二分答案L.然后就是判断能否将原串划分出一些长度不小于L的子串,这些子串要是给定n个串中的某个串的子串,且满足它们的长度之和不小于原串长度的90%. 贪心多长选一段什么的显然不对.老老实 ...

  2. Western Subregional of NEERC, Minsk, Wednesday, November 4, 2015 Problem F. Turning Grille 暴力

    Problem F. Turning Grille 题目连接: http://opentrains.snarknews.info/~ejudge/team.cgi?SID=c75360ed7f2c70 ...

  3. HDU 5744 Keep On Movin 贪心

    Keep On Movin 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5744 Description Professor Zhang has k ...

  4. iOS9UICollectionView自定义布局modifying attributes returned by UICollectionViewFlowLayout without copying them

    UICollectionViewFlowLayout has cached frame mismatch This is likely occurring because the flow layou ...

  5. ant design table column 设置width不生效解决方案

    当td里的内容超出了width的范围时,会出现width不固定,也就是width不生效 解决方案: 设置scroll的width等于所有列宽之和(scroll={{x: 100%}})

  6. js获取鼠标点击事件的相对位置

    <html><head><title>位置</title><script language="javascript" type ...

  7. svn : Can not Parse lock / entries hashfile错误解决办法

    svn服务器死机重启之后,锁定文件的时候出下面的提示: Malformed file svn: Can't parse lock/entries hashfile '/data/svn/svnroot ...

  8. 关于toString方法的重写工具ToStringBuilder

    原文:https://blog.csdn.net/zhaowen25/article/details/39521899# apache的commons-lang3的工具包里有一个ToStringBui ...

  9. 【Devops】【docker】【CI/CD】3.Jenkins+GitLab+docker+springboot 实现自动化部署

    ==================================================================================================== ...

  10. 【Centos】centos查看磁盘使用情况

    1.查看分区和磁盘 lsblk 查看分区和磁盘 2.查看空间使用情况 df -h 查看空间使用情况 3.分区工具查看分区信息 fdisk -l 分区工具查看分区信息 4.查看分区 cfdisk /de ...