一、泛化

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. springmvc学习总结(二) -- maven+springmvc+spring+mybatis+mysql详细搭建整合过程讲解

    @_@ 写在最前 之前分享过下面这几篇: mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(上)(附demo和搭建过程遇到的问题解决方法) myba ...

  2. vs 2010 :类型化数据集DataSet应用

    1.启动服务器资源管理器,建立数据库连接 2.在项目中创建数据集 3.为数据集添加表对象 4.为表适配器tableAdapter添加参数化查询 5.修改表适配器的主查询,或添加其他查询 Update: ...

  3. ROS知识(21)----ROS C++代码格式化

    这里提供两种方法. 第一种方法:clang_format 1.安装clang format sudo apt-get install -y clang-format-3.6 2.从github的ros ...

  4. 关于eclipse的indigo版中文注释时字体太小的问题(转)

    eclipse目前最新版代号indigo, 在win7上使用时中文注释时字体太小的问题. 为什么会这样? 首先我们应该知道, 在win7系统中, font是有"显示"和" ...

  5. android依据区域高度切割文本问题

    android字体显示涉及例如以下參数:1. 基准点是baseline:2. Ascent是baseline之上至字符最高处的距离:3. Descent是baseline之下至字符最低处的距离.4.  ...

  6. UVA 11732 - strcmp() Anyone?(Trie)

    UVA 11732 - strcmp() Anyone? 题目链接 题意:给定一些字符串,要求两两比較,须要比較的总次数(注意.假设一个字符同样.实际上要还要和'\0'比一次,相当比2次) 思路:建T ...

  7. CMSIS-DAP for STLink V2.1 and STLink v2.1 mini adapter

    CMSIS-DAP V1 V2

  8. STM32 F4 GPIO Modes

    STM32 F4 GPIO Modes Goal: creating a visual summary of GPIO configuration modes. The summary at the ...

  9. 汽车之家店铺数据抓取 DotnetSpider实战

    一.背景 春节也不能闲着,一直想学一下爬虫怎么玩,网上搜了一大堆,大多都是Python的,大家也比较活跃,文章也比较多,找了一圈,发现园子里面有个大神开发了一个DotNetSpider的开源库,很值得 ...

  10. .NET轻量级DBHelpers数据访问组件

    一.摘要 一说到ADO.NET大家可能立刻想到的就是增.删.改.查(CRUD)操作,然后再接就想到项目中的SQLHelper.没错本课分享课阿笨给大家带来的是来源于github上开源的DAO数据库访问 ...