文章目录

    • 基本概念:
    • 1. 泛化(Generalization)
    • 2. 实现(Realization)
    • 3. 关联(Association)
    • 4. 聚合(Aggregation)
    • 5. 组合(Composition)
    • 6. 依赖(Dependency)
  • UML实例分析

基本概念:

类图(Class Diagram): 类图是面向对象系统建模中最常用和最重要的图,是定义其它图的基础。类图主要是用来显示系统中的类、接口以及它们之间的静态结构和关系的一种静态模型。

类图的3个基本组件:类名、属性、方法

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

1. 泛化(Generalization)

【泛化关系】:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为。例如:老虎是动物的一种,即有老虎的特性也有动物的共性。
【箭头指向】:带三角箭头的实线,箭头指向父类

2. 实现(Realization)

【实现关系】:是一种类与接口的关系,表示类是接口所有特征和行为的实现.
【箭头指向】:带三角箭头的虚线,箭头指向接口

3. 关联(Association)

【关联关系】:是一种拥有的关系,它使一个类知道另一个类的属性和方法;如:老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头。
【代码体现】:成员变量
【箭头及指向】:带普通箭头的实心线,指向被拥有者

上图中,老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。但学生与某课程间的关系为单向关联,一名学生可能要上多门课程,课程是个抽象的东西他不拥有学生。

下图为自身关联:

4. 聚合(Aggregation)

【聚合关系】:是整体与部分的关系,且部分可以离开整体而单独存在。如车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。

聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。

【代码体现】:成员变量
【箭头及指向】:带空心菱形的实心线,菱形指向整体

5. 组合(Composition)

【组合关系】:是整体与部分的关系,但部分不能离开整体而单独存在。如公司和部门是整体和部分的关系,没有公司就不存在部门。

组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期。

【代码体现】:成员变量

【箭头及指向】:带实心菱形的实线,菱形指向整体

6. 依赖(Dependency)

【依赖关系】:是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖.
【代码表现】:局部变量、方法的参数或者对静态方法的调用
【箭头及指向】:带箭头的虚线,指向被使用者

各种关系的强弱顺序:
泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖

下面这张UML图,比较形象地展示了各种类图关系:

多重性(Multiplicity) : 通常在关联、聚合、组合中使用。就是代表有多少个关联对象存在。使用数字…星号(数字)表示。如下图,一个割接通知可以关联0个到N个故障单。

UML实例分析

联通客户响应OSS。系统有故障单、业务开通、资源核查、割接、业务重保、网络品质性能等功能模块。现在我们抽出部分需求做为例子讲解。

大家可以参照着类图,好好理解。

  1. 通知分为一般通知、割接通知、重保通知。这个是继承关系。
  2. NoticeService和实现类NoticeServiceImpl是实现关系。
  3. NoticeServiceImpl通过save方法的参数引用Notice,是依赖关系。同时调用了BaseDao完成功能,也是依赖关系。
  4. 割接通知和故障单之间通过中间类(通知电路)关联,是一般关联。
  5. 重保通知和预案库间是聚合关系。因为预案库可以事先录入,和重保通知没有必然联系,可以独立存在。在系统中是手工从列表中选择。删除重保通知,不影响预案。
  6. 割接通知和需求单之间是聚合关系。同理,需求单可以独立于割接通知存在。也就是说删除割接通知,不影响需求单。
  7. 通知和回复是组合关系。因为回复不能独立于通知存在。也就是说删除通知,该条通知对应的回复也要级联删除。
    经过以上的分析,相信大家对类的关系已经有比较好的理解了。大家有什么其它想法或好的见解,欢迎拍砖。

PS:还是那句话:以上类图用Enterprise Architect 7.5所画,在此推荐一下EA,非常不错。可以替代Visio和Rose了。Visio功能不够强大,Rose太重。唯有EA比较合适。

重点讲一下聚合和组合的关系:

聚合关系图:

组合关系图:

从代码上看这两种关系的区别在于:

构造函数不同

雁群类:

   public  class GooseGroup  {  public Goose goose;  public GooseGroup(Goose goose)  {  this.goose = goose;  }}

大雁类:

public class Goose
{  public Wings wings;  public Goose()  {  wings=new Wings();  }
}

聚合关系的类里含有另一个类作为参数

**雁群类(GooseGroup)**的构造函数中要用到大雁(Goose)作为参数把值传进来 大雁类(Goose)可以脱离雁群类而独立存在

组合关系的类里含有另一个类的实例化

大雁类(Goose)在实例化之前 一定要先实例化翅膀类(Wings) 两个类紧密耦合在一起 它们有相同的生命周期 翅膀类(Wings)不可以脱离大雁类(Goose)而独立存在
信息的封装性不同
在聚合关系中,客户端可以同时了解雁群类和大雁类,因为他们都是独立的
而在组合关系中,客户端只认识大雁类,根本就不知道翅膀类的存在,因为翅膀类被严密的封装在大雁类中。

如果觉得博主写的还不错,就请博主喝杯咖啡☕吧!!!

C++ UML类图详解相关推荐

  1. java uml类图教程_Java利器之UML类图详解

    原标题:Java利器之UML类图详解 (点击上方公众号,可快速关注) 来源:伯乐在线专栏作者- Code4Android 如需转载,发送「转载」二字查看说明 前言 UML(Unified Modeli ...

  2. UML类图详解_泛化关系

    泛化其实就是继承关系,还是比较简单的,那么我们就把之前有些问题的博客UML类图重新来实现一次. 依旧是这个图 下面我们来看一个例子 Account.h 1 #include <cstdlib&g ...

  3. 软件设计-UML类图详解说明

    一. UML类图思维导图 二. 详细分析和介绍 下面就从上面的思维导图开始,详细的介绍UML类图! 1. 什么是UML,概念是什么? UML(Unified Modeling Language)中文统 ...

  4. Java利器之UML类图详解

    前言 UML(Unified Modeling Language)中文统一建模语言,是一种开放的方法,用于说明.可视化.构建和编写一个正在开发的.面向对象的.软件密集系统的制品的开放方法.UML展现了 ...

  5. 00 C++ UML类图详解

    一.基本概念: 类图(Class Diagram): 类图是面向对象系统建模中最常用和最重要的图,是定义其它图的基础.类图主要是用来显示系统中的类.接口以及它们之间的静态结构和关系的一种静态模型. 类 ...

  6. 【Java】UML类图详解-详细易懂

    基本介绍 统一建模语言(Unified Modeling Language,UML)是用来设计软件的可视化建模语言.它的特点是简单.统一.图形化.能表达软件设计中的动态与静态信息. UML 从目标系统 ...

  7. UML概述及UML类图详解

    引言 UML图有很多种,但是并非必须掌握所有的UML图,才能完整系统分析和设计工作.一般说来,在UML图中,只要掌握类图.用例图.时序图的使用,就能完成大部分的工作.也就是说,掌握UML的20%,就能 ...

  8. 【UML】UML类图详解

    文章目录 1. 类的UML图示 2 类与类之间的关系 2.1 关联关系 2.1.1 单向关联 2.1.2 双向关联 2.1.3 自关联 2.1.4 多重性关联 2.1.5 聚合关系 2.1.6 组合关 ...

  9. idea uml图各符号含义_java利器之UML类图详解(IDEA)

    一.概述 类图(Class Diagram)是面向对象系统建模中最常用和最重要的图,是定义其它图的基础. 类图主要是用来显示系统中的类.接口以及它们之间的静态结构和关系的一种静态模型. 类图不仅用于可 ...

最新文章

  1. ios bug 分析
  2. android wear升级方法,LG G Watch官方工具包刷Android wear5.1.1教程(附刷机包)
  3. Maven web项目创建
  4. Android开发之Base64与bitmap互转的工具类
  5. 测试如何学python_学习Python:如何测试函数和类,快学,与
  6. php生产随机字符的代码
  7. 使用STS临时访问凭证访问OSS
  8. 怎样写 Linux LCD 驱动程序
  9. java代表预设一个SQL_java-io基础-3-压缩和解压
  10. 计算机等级考试网络工程师题库,计算机等级考试4级网络工程师习题库要点
  11. 哨兵1号(sentinel 1)数据各参数介绍
  12. Hive Hsql 常用命令
  13. Game.Physics.Engine.Development(游戏物理引擎开发)
  14. 【汇编】DOS系统功能调用(INT 21H)
  15. POI导出换行和水平居中
  16. isb 汇编_DSB,ISB,DMB指令 | 学步园
  17. 去中心化自治组织DAO——Steemit社区介绍
  18. java在深圳找工作_[深圳java求职]没经验 找工作 求指点
  19. LTSPICE使用教程:导入第三方库模型进行仿真
  20. 线下沙龙 | EOS入门及最新技术解读

热门文章

  1. xadmin的一些自定义
  2. CF1131F Asya And Kittens
  3. 怎样用matlab把视频转gif动画,Matlab制作视频并转换成gif动态图的两种方法
  4. chrome浏览器被360流氓捆绑,如何解决?
  5. 基于javaMail发送邮件的实现
  6. 王道学习笔记,计算机网络
  7. OKR 结果思维:你如何变得以结果为导向?(第三部分)
  8. 分布式下载方式(二)DHT分布式网络
  9. 单向和双向沟通带来启发
  10. 【解决阿里云服务器提示挖矿程序风险2022】