一、泛化

1、说明

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

2、例图

3、表现

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

4、代码

[csharp] view plaincopy print?
  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.代码

[csharp] view plaincopy print?
  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、代码

[csharp] view plaincopy print?
  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>
[csharp] view plaincopy print?
  1. <span style="font-family:KaiTi_GB2312;font-size:24px;">   }
  2. }</span>

四、组合

1、说明

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

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

2、例图

4、代码

[csharp] view plaincopy print?
  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、代码

[csharp] view plaincopy print?
  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 UML 1.1 UML UML(Unified Modeling Language)是统一建模语言,1997年11月UML1.1版本提交给OMG并正式通过,成为建模语言的个那个也标准.2003年6 ...

  2. UML图中的关系符号解释

    UML图中的关系符号解释 UML图是程序设计最基本的操作,可以很好地梳理各个类之间的关系,方便我们对代码框架的理解和实现思路的形成: 在面向对象程序设计时,类与类之间的关系主要分为 继承,实现,依赖, ...

  3. UML 图中 包含关系和扩展关系的联系和区别

    最近在写毕业论文,对于UML图中的包含和扩展的联系和区别一直不是太了解. 一篇博主是这样描述的 联系:都是从现有的用例中抽取出公共的那部分信息,作为一个单独的用例,然后通后过不同的方法来重用这个公共的 ...

  4. 5 在UML图中,( )图用于建模系统的动态行为,它描述活动的顺序,展现从一个活动到另一个活动的控制流

    标签: 软考初级程序员易错题,计算机基础, 面向对象基础,统一建模语言 (UML) 5 在UML图中,( )图用于建模系统的动态行为,它描述活动的顺序,展现从一个活动到另一个活动的控制流. 问题1选项 ...

  5. 4 UML 图中,一张交互图显示一个交互,由一组对象及其之间的关系组成,包含它 们之间可能传递的消息,以下不是交互图的是( )

    标签: 软考初级程序员易错题,计算机基础, 面向对象基础,统一建模语言 (UML) UML 图中,一张交互图显示一个交互,由一组对象及其之间的关系组成,包含它们之间可能传递的消息,以下不是交互图的是( ...

  6. uml图六种箭头的含义(泛化、实现、依赖、关联、聚合、组合)

    泛化 概念:泛化是一种一般与特殊.一般与具体之间关系的描述,具体描述建立在一般描述的基础之上,并对其进行了扩展.在java中用来表示继承的关系. 表示方法:用实线空心三角箭头表示. 实现 概念:实现是 ...

  7. java uml图中的关系_UML类图中的关系

    UML类图中的关系分为四种:泛化.依赖.关联.实现:关联关系又可以细化为聚合和组合. 1. 泛化(Generalization) 泛化是父类和子类之间的关系,子类继承父类的所有结构和行为.在子类中可以 ...

  8. uml图中的各种箭头_一次搞懂建模语言UML

    Unified Modeling Language (UML)又称统一建模语言或标准建模语言,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到 ...

  9. UML图中6种箭头的含义

    在看一些技术博客的时候,经常会见到博客里画上很多uml图.因为经常会被这几种表达关系的箭头搞混,这里我就把常见的6种箭头表达的含义理一下. 泛化 概念:泛化是一种一般与特殊.一般与具体之间关系的描述, ...

最新文章

  1. OSPF协议学习笔记(一)
  2. 化工原理第四版课后习题答案
  3. 自定义View之onMeasure()
  4. leetcode-7-整数翻转
  5. WPF实现环(圆)形进度条
  6. LYNC解决方案巡展
  7. ALEXA之数据包:基于套接字发送伪造IP包
  8. Linux从入门到入土①(Linux概述、文件系统、VIM编辑器)
  9. python实现DBSCAN(密度聚类)算法
  10. 迅为4412开发平台Zigbee模块在物联网智能家居中的应用
  11. java如何重命名class_java – 如何重命名XStream列表元素?
  12. 简历模版|简历在线制作|分享几个免费在线简历模版的网站
  13. 怎么知道云服务器cpu型号,云服务器cpu怎么查看
  14. 原版win7 install.wim在哪?
  15. JavaScript高级程序设计(第4版)学习随笔【第六章】
  16. 【今日CV 计算机视觉论文速览 第128期】Mon, 10 Jun 2019
  17. 将QQ书签导入到IE收藏夹
  18. 小生云服务器,HobitLab#2--云服务器的有效利用之搭建tiny tiny RSS
  19. Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspectivewith Transformers
  20. C++到底还能做什么? ----感觉说的还是很有道理的,共勉!

热门文章

  1. JAVA反射系列之Method,java.lang.reflect.Method的使用。
  2. 虚拟系统管理VSM提高服务器整合率
  3. 任务计划中的结果代码
  4. 广电+央视能否有力量横扫运营商+互联网?
  5. 一个让我瞠目结舌的电脑高手!(转自叁哥博客)
  6. Git 代码管理常用命令
  7. iOS提交TestFlight测试显示缺少合规证明
  8. lenovo Win10 安装 Androd Studio 新版本编程开发的软件
  9. Android入门学习4
  10. 如何使keystone更有效率