如何看懂类图

1、类图简介

  描述类的内部结构和类与类之间的关系,是一种静态结构图。 在UML类图中,常见的有以下几种关系: 泛化(Generalization),  实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)。

2、各种关系的强弱顺序

  泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖

3、类图关系

3.1、泛化

  1. 表示继承关系, 表示类/接口对父类/接口的功能扩展。
  2. java语法中的extends, 用来扩展父类或父接口的功能。
  3. 图形表示: 空心三角箭头+实线, 箭头指向父类或父接口。
  4. A继承B。

  

3.2、实现  

  1. 表示类实现接口定义的行为或功能。
  2. java语法中的implements
  3. 图形表示:空心三角箭头+虚线, 箭头指向接口。
  4. A实现B的接口。

  

3.3、依赖

  1. 可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数、属性被类A在某个method方法中使用。
  2. java的语法中, 被依赖的对象/类, 以方法参数, 局部变量和静态方法调用的形式出现。
  3. 图形表示: 因为依赖和被依赖关系比较弱, 所以使用虚线+箭头. 箭头指向被依赖者.而且一般是单向关系。
  4. A依赖B,B是被依赖者。

  

3.4、关联

  1. 关联关系表示类与类之间的连接,它使得一个类知道另外一个类的属性和方法。比如现实生活中的夫妻, 师生等关系. 长期存在并且是相互的关系. 此外关联可以表示一对一,一对多, 多对一, 多对多等各种关系。
  2. java语法中, 被拥有者作为拥有者的成员变量存在。
  3. 图形表示: 因为比依赖关系更强, 所以是实线+箭头.双向关联可以省略箭头。

  关联有两个端点,每个端点可以有一个基数,表示这个关联的类可以有几个实例。

    0..1 表示可以有0个或者1个实例

    0..* 表示对实例的数目没有限制

    1     表示只能有一个实例

    1..* 表示至少有一个实例

  关联关系体现的是两个类,或者类与接口之间的强依赖关系,这种关系很强烈,比依赖更强,不是偶然性的,也不是临时性的,而是一种长期性,相对平等的关系,表现在代码层面,为被关联的类B以类属性的形式出现在类A中,也可能是关联类A引用了被关联类B的全局变量。

  

3.5、聚合

  1. 聚合是关联关系的特例,是强的关联关系,聚合是整个与个体的关系,此时整体和部分是可以分离的,他们具有各自的生命周期,部分可以属于多个对象,也可以被多个对象共享;比如计算机和CPU的关系;在代码层面聚合与关联是一致的,只能从语义上来区分。
  2. 聚合关系也是使用实例变量来实现的,在java语法上区分不出关联和聚合,关联关系中类出于一个层次,而聚合则明显的在两个不同的层次。
  3. 图形表示: 空心菱形+实线+箭头, 箭头指向部分, 菱形指向整体.

  

3.6、组合

  1. 组合也是关联关系的一种特例,比聚合更强,是一种强聚合关系。它同样体现整体与部分的关系,但此时整体与部分是不可分的,整体生命周期的结束也意味着部分生命周期的结束,反之亦然。如大脑和人类。
  2. 体现在代码层面与关联时一致的,只能从语义来区分。
  3. 组合与聚合几乎完全相同,唯一区别就是对于组合,“部分”不同脱离“整体”单独存在,其生命周期应该是一致的。
  4. 图形表示: 实心菱形+ 实线+ 箭头, 菱形指向整体, 箭头指向部分

  

  

UML简单介绍—类图这么看就懂了的更多相关文章

  1. UML简单介绍—类图详解

    类图详解 阅读本文前请先阅读:UML简单介绍—类图这么看就懂了 1.泛化关系 一个动物类: /** * 动物类 */ public class Animal { public String name; ...

  2. UML简单梳理类图

    依赖 Dependency Class Car{} Class Person{ int a; static int b public void buy(Car c){ int c; .... } } ...

  3. 3.UML中的类图及类图之间的关系

    统一建模语言简介 统一建模语言(Unified Modeling Language,UML)是用来设计软件蓝图的可视化建模语言,1997 年被国际对象管理组织(OMG)采纳为面向对象的建模语言的国际标 ...

  4. GOF 的23种JAVA常用设计模式总结 02 UML中的类图与类图之间的关系

    统一建模语言UML 统一建模语言(Unified Modeling Language,UML)是用来设计软件蓝图的可视化建模语言,1997 年被国际对象管理组织(OMG)采纳为面向对象的建模语言的国际 ...

  5. UML中的类图及类图之间的关系

    统一建模语言简介 统一建模语言(Unified Modeling Language,UML)是用来设计软件蓝图的可视化建模语言,1997 年被国际对象管理组织(OMG)采纳为面向对象的建模语言的国际标 ...

  6. 【软件设计】UML类图怎么看

    前言 无论使用哪种语言,都离不开面向过程与面向对象两个流派,而类图是面向对象程序设计中至关重要的一种软件表达形式,如何看懂类图,并设计好的软件架构,是我们作为软件工程师必不可少的技能之一. 今天小黑把 ...

  7. UML简单介绍-如何看懂UML(一)

      在计算复杂的数学题时,我们必然会打草稿计算 在绘画课中,我们可以素描出来看到的事物 那么在程序设计中呢? 如何描绘传达你脑海中的关于这个程序 ,设计的蓝图草稿?   OOP的程序设计中,最多的自然 ...

  8. 【UML 建模】类图介绍

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

  9. UML精粹3 - 类图,序列图,CRC

    类图Class diagram 类图描述系统中的对象类型,以及它们之间的各种静态关系.类图也展示类的性质和操作,以及应用于对象连接方式的约束.UML中的特性feature,涵盖了性质property和 ...

随机推荐

  1. 常用torch代码片段合集

    PyTorch常用代码段整理合集 本文代码基于 PyTorch 1.0 版本,需要用到以下包 import collections import os import shutil import tqd ...

  2. RocketMq在SparkStreaming中的总结

    其实Rocketmq的给第三方的插件已经全了,如果大家有兴趣的话请移步https://github.com/apache/rocketmq-externals.本文主要是结合笔者已有的rmq在spar ...

  3. POJ 3281 Dining(网络流-拆点)

    Cows are such finicky eaters. Each cow has a preference for certain foods and drinks, and she will c ...

  4. Koa - 使用koa-multer上传文件(上传限制、错误处理)

    前言 上传文件在开发中是很常见的操作,今天我选择使用koa-multer中间件来实现这一功能,除了上传文件外,我还会对文件上传进行限制,以及发生上传错误时的处理. 由于原来的 koa-multer 已 ...

  5. Spring面试题总结及答案

    Spring面试总结 Spring是什么? Spring框架是一个java平台,提供全面基础设施支持开发java应用程序. Spring的主要模块有哪些? Spring Code:基础模块,主要提供I ...

  6. cl创建opencv程序

    环境 win8 VS2017或VS2013 opencv 3.2.0 配制环境变量 解压opencv到某个目录,比如D:\Program\Uninstall,把设置OPENCV_HOME为D:\Pro ...

  7. Win32_DiskDrive 硬盘 参数说明

    Availability  --设备的状态. BytesPerSector  --在每个扇区的物理磁盘驱动器的字节数. Capabilities  --媒体访问设备的能力阵列. CapabilityD ...

  8. Fusion360_Generative Design 入门学习笔记

    2019.12.17更新 初次见到衍生式设计的时候感觉非常惊艳,现在觉得这个功能就是个弟弟,只能做一些中看不中用的东西.这个方法的理论基础是拓扑优化,想做research的同学可参阅"如何入 ...

  9. django----orm查询优化 MTV与MVC模型 choice参数 ajax serializers

    目录 orm查询优化 only defer select_related 与 prefetch_related MTV 与 MVC 模型 choice参数 Ajax 前端代码 后端代码 前后端传输数据 ...

  10. 爬取https://www.parenting.com/baby-names/boys/earl网站top10男女生名字及相关信息

    爬取源代码如下: import requests import bs4 from bs4 import BeautifulSoup import re import pandas as pd impo ...