类图

要学懂设计模式,就需要先看得懂类图,类与类之间的关系是学习设计模式的基础,而在软件工程中,类与类之间的关系是通过UML中的类图来体现。

这篇笔记包含的不会是类图的所有东西,包含的只是各个类之间的关系,包括线条,图形,箭头的含义,熟悉了这些基础,对于设计模式的学习的障碍就会大大降低了

通过实例来学习:

上面的类图就体现了所需要了解的类的6个基本关系

该类图中车是一个抽象类

  • 车有两个继承,小汽车和自行车,他们和车之间是实现关系,使用带空心箭头的虚线表示
  • 小汽车与SUV之间也是集成关系,他们之间是泛化关系,使用带空心箭头的实线表示
  • 小汽车与发动机,轮胎间是组合关系,使用带菱形的实线表示
  • 学生与班级之间是聚合关系,使用的是带空心菱形的实线表示
  • 学生与身份证之间是关联关系,使用一根实线表示
  • 学生上学需要使用自行车,与自行车之间是一种依赖关系,使用带箭头的虚线表示

这六种关系的类图需要掌握并熟练的运用,

_ _ _

类的继承在UML中表现为实现(realize)和泛化(generalize)

实现关系

实现关系使用的是一个带空心箭头的虚线表示。

上述类图我们可以说A实现了B,B是一个抽象概念,在现实中无法直接用来定义对象,只有指明具体的子类,才能用来定义对象.

就像车和小汽车、自行车的关系一样,“车”这个类在C++中用抽象类表示,在Java中大部分情况下用接口表示

泛化关系

泛化关系实际上是对类的一个细分,

最终代码中,泛化关系表现为继承非抽象类;

聚合关系

聚合关系中整体与部分之间是若依赖关系,整体不存在了,部分依然可以独立存在,也就是说部分和整体的生命周期是独立的。

聚合关系在UML中使用带空心菱形的实线表示

例如班级不存在了,学生仍然能够单独存在

组合关系

组合关系中的整体与部分之间是强依赖关系,整体不存在了,部分也就不存在了。例如公司与部门之间的关系,部门是公司的下属机构,如果公司不存在了的话

部门也就没办法独立存在。

组合关系在UML中使用实心菱形的实线表示

关联关系

关联关系是用一条直线表示的;它描述不同类的对象之间的结构关系;它是一种静态关系, 通常与运行状态无关,一般由常识等因素决定的。

它一般用来定义对象之间静态的、天然的结构。 所以,关联关系是一种“强关联”的关系;

比如,乘车人和车票之间就是一种关联关系

关联关系默认不强调方向,表示对象间相互知道;如果特别强调方向,如下图,表示A知道B,但 B不知道A,如下图

注:在最终代码中,关联对象通常是以成员变量的形式实现的;

依赖关系

依赖关系是用一套带箭头的虚线表示的

如下图表示A依赖于B;它描述一个对象在运行期间会用到另一个对象的关系;



显然,依赖也有方向,双向依赖是一种非常糟糕的结构,我们总是应该保持单向依赖,杜绝双向依赖的产生.

在最终代码中,依赖关系体现为类构造方法及类方法的传入参数,箭头的指向为调用关系;依赖关系除了临时知道对方外,还“使用”对方的方法和属性.


小结

上述的6中类之间的关系是类图中最基础的部分,总结如下

  • 泛化: 带空心箭头的实线
  • 实现: 带空心箭头的虚线
  • 聚合: 带空心菱形的实线
  • 组合: 带实心菱形的实线
  • 关联: 一条实线(表示二者相互知道)带箭头实线(一方只知道另一方)
  • 依赖: 带箭头的虚线

看懂类图——UML类图基础的更多相关文章

  1. (转)看懂类图——UML类图基础

    类图 要学懂设计模式,就需要先看得懂类图,类与类之间的关系是学习设计模式的基础,而在软件工程中,类与类之间的关系是通过UML中的类图来体现. 这篇笔记包含的不会是类图的所有东西,包含的只是各个类之间的 ...

  2. 五分钟读懂UML类图

    平时阅读一些远吗分析类文章或是设计应用架构时没少与UML类图打交道.实际上,UML类图中最常用到的元素五分钟就能掌握,下面赶紧来一起认识一下它吧: 一.类的属性的表示方式 在UML类图中,类使用包含类 ...

  3. 五分钟读懂UML类图(转)

    平时阅读一些远吗分析类文章或是设计应用架构时没少与UML类图打交道.实际上,UML类图中最常用到的元素五分钟就能掌握,下面赶紧来一起认识一下它吧: 一.类的属性的表示方式 在UML类图中,类使用包含类 ...

  4. 五分钟读懂UML类图(转)

    平时阅读一些远吗分析类文章或是设计应用架构时没少与UML类图打交道.实际上,UML类图中最常用到的元素五分钟就能掌握,下面赶紧来一起认识一下它吧: 一.类的属性的表示方式 在UML类图中,类使用包含类 ...

  5. 读懂UML类图

    平时阅读一些远吗分析类文章或是设计应用架构时没少与UML类图打交道.实际上,UML类图中最常用到的元素五分钟就能掌握,下面赶紧来一起认识一下它吧: 一.类的属性的表示方式 在UML类图中,类使用包含类 ...

  6. 面向对象的照妖镜——UML类图绘制指南

    1.前言 感受 在刚接触软件开发工作的时候,每次接到新需求,在分析需求后的第一件事情,就是火急火燎的打开数据库(DBMS),开始进行数据表的创建工作.然而这种方式,总是会让我在编码过程中出现实体类设计 ...

  7. UML类图的6大关系

    <小酌重构系列>已经完成了大约1/3了,在这些文章中,我使用了一些简单的类图来描述重构策略.在之后的文章中,我可能会借助稍微复杂一些的UML类图来介绍.但是在此之前,我觉得有必要先介绍一下 ...

  8. 转:深入浅出UML类图(具体到代码层次)

    深入浅出UML类图 作者:刘伟 ,发布于:2012-11-23,来源:CSDN   在UML 2.0的13种图形中,类图是使用频率最高的UML图之一.Martin Fowler在其著作<UML ...

  9. UML(一) 类图及类间关系

    原创文章,同步发自作者个人博客,http://www.jasongj.com/uml/class_diagram/ UML类图 UML类图介绍 在UML 2.*的13种图形中,类图是使用频率最高的UM ...

随机推荐

  1. Cache替换算法:LRU与LFU的区别

    LFU(Least Frequently Used)最近最少使用算法.它是基于“如果一个数据在最近一段时间内使用次数很少,那么在将来一段时间内被使用的可能性也很小”的思路.LRU(Least Rece ...

  2. 对lea与mov的理解

    lea不止可以完成mov的功能,他还可以加载存储器的有效地址,即D<-&S 借鉴深度理解计算机系统里: 指令Leal实际上是movl指令的变形.他的指令形式是从存储器读数据到寄存器,但实 ...

  3. css3类选择器之结合元素选择器和多类选择器

    css3类选择器之结合元素选择器和多类选择器用法: <!DOCTYPE html> <html lang="en"> <head> <me ...

  4. 实现Echarts折线图的虚实转换

    需求:医院的体温单,在统计体温时,对于正常情况下统计的体温数据,需要显示实线:对于进行物理降温后统计的体温数据,需要显示虚线. 现有的体温单是运用 Echarts 折线图,统一用实线显示.因此在这基础 ...

  5. Django编写RESTful API(一):序列化

    欢迎访问我的个人网站:www.comingnext.cn 关于RESTful API 现在,在开发的过程中,我们经常会听到前后端分离这个技术名词,顾名思义,就是前台的开发和后台的开发分离开.这个技术方 ...

  6. 原创:路由配置实践 两个局域网主机的互连 VM linux

    又开始齐天大圣讲课的时间了 我相信网络是每个运维人员和开发人员必不可少要接触的   今天我们要讲的是在VM虚拟机中 我们三台虚拟机划分两个局域网 实现不同局域网的互联 也就是下面图中的AC通过B主机的 ...

  7. 【Ubuntu16]】ufw

    Usage: ufw COMMAND Commands: enable enables the firewall 开启ufw防火墙 disable disables the firewall 禁用防火 ...

  8. Windows界面设计标准

    Windows界面设计标准..- Windows界面设计标准 Windows 界面设计标准 1. 易用性 界面元素的名称.标签应该易懂,用词准确,避免使用模楞两可的字眼,要与同一界面上的其他元素易于区 ...

  9. Oracle教程之学习笔记

    Oracle教程之学习笔记... ----------------------------------- Oracle教程:---学习笔记: ============================= ...

  10. vue-cli脚手架npm相关文件解读(2)webpack.prod.conf.js

    系列文章传送门: 1.build/webpack.base.conf.js 2.build/webpack.prod.conf.js 3.build/webpack.dev.conf.js 4.bui ...