一、泛化

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. curl请求指定host ip(指定域名解析的内网某ip)

    域名www.test.com解析内部多台ip $httpHeader = array('Host: www.test.com');$url = "10.17.2.245/xxx/xxx/t. ...

  2. [USACO3.2]Sweet Butter

    题目大意: 给定一张$k$个结点,$m$条边的无向图,其中有$n$个点被标记,在这$k$个点中找出一个点使得这个点到那$n$个点的最短距离之和最小,求出这个距离和. 思路: 对于每个标记结点跑最短路, ...

  3. linux 下安装 RZ SZ命令 以及使用

    对于经常使用Linux系统的人员来说,少不了将本地的文件上传到服务器或者从服务器上下载文件到本地,rz / sz命令很方便的帮我们实现了这个功能,rz是把win的文件上传到linux上    sz是吧 ...

  4. CentOS增加用户到sudo用户组

    1.直接增加到wheel用户组 usermod -a -G wheel username 2.编辑/etc/sudoers文件增加 echo "username ALL=(ALL) ALL& ...

  5. VIM简单配置(windows)

    set number set history=1000000 set tabstop=4 set shiftwidth=4 set smarttab set nocp filetype plugin ...

  6. STM32 GPIO 配置之ODR, BSRR, BRR 详解

    STM32 GPIO 配置之ODR, BSRR, BRR 详解 用stm32 的配置GPIO 来控制LED 显示状态,可用ODR,BSRR,BRR 直接来控制引脚输出状态. ODR寄存器可读可写:既能 ...

  7. C# 对WinForm应用程序的App.config的使用及加密

    原文地址:http://blog.163.com/zhou_zzq/blog/static/1019622120137621739874/   我们在写C#应用程序时,在工程文件中放置一个app.co ...

  8. Android笔记之 网络http通信

    0.在认识HTTP前先认识URL 在我们认识HTTP之前,有必要先弄清楚URL的组成,比如: http://www.******.com/china/index.htm 它的含义例如以下: 1. ht ...

  9. 改进架构,实现动态数据源,减少java维护

    怎样不用写java代码来完毕开发? 对于大部分的产品和项目来说.页面变化是很头痛的事情.每次小功能上线,新客户到来,都须要进行定制改造,不断的开发维护.每次开发一方面要修改页面,一方面要修改serve ...

  10. Embarcadero RAD Studio XE5

    英巴卡迪诺 RAD Studio XE是终极应用程序开发套件,能以最快速方式为Windows.Mac OS X. .NET. PHP. Web和移动设备可视化开发数据丰富.界面美观的跨平台应用程序.R ...