类图

要学懂设计模式,就需要先看得懂类图,类与类之间的关系是学习设计模式的基础,而在软件工程中,类与类之间的关系是通过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. Mark Compact GC (Part two :Two-Finger)

    目录 Two-Finger算法 前提 概要 步骤一:移动对象 步骤二:更新指针 优缺点 表格算法 概要 步骤一:移动对象群 和 构筑间隙表格 移动对象群 构筑间隙表格 步骤二:更新指针 优缺点 Two ...

  2. STM32CUBEF4 实现USB 虚拟串口

    一.stm32cubemx 生成工程后USB转串口出现黄色感叹号的问题 如下图所示,在stm32cubemx工程中选择usb转串口功能Communication Device Class (Virtu ...

  3. VC、IE、ASP环境下打印、预备的完美解决方式

    一种基于XML的报表开发工具,它支持从设计报表.调用API打印.预览,能支持分布式报表.方便报表的存储.转发. 在报表中能嵌入VBScript,能方便地訪问VB,VC的变量,能訪问COM组件.ADO等 ...

  4. Oracle定义变量、常量

    1 定义变量 declare var_countryname varchar2(50):='中国'; 2 定义常量 con_day constant integer:=365;

  5. 压状态bfs

    一般地图很小,状态不多,可以装压或者hash,构造压缩或hash的函数,构造还原地图的函数,然后就无脑bfs(感觉就是SPFA) 题目: 1.玩具游戏:二进制压缩状态 #include<cstd ...

  6. ping---测试主机之间网络的连通性

    ping命令用来测试主机之间网络的连通性.执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常. 选项 -d:使用Socke ...

  7. codeforces 688D

    题意: 给你n和k,表示有n个数,c1到cn,然后让你求一个数x,可以告诉你x%ci的值,问你是否可以唯一确定一个x%k的值 题解: 反证: 假设有两个x1,x2同时是解,则对于所有ci,x1%ci= ...

  8. [React Native] Animate the Scale of a React Native Button using Animated.spring

    In this lesson we will use Animated.spring and TouchableWithoutFeedback to animate the scale of a bu ...

  9. UVA - 10674-Tangents

     题意:给出两个圆,求它们的公切线,并依照一定格式输出 做法:模拟 代码: #include<iostream> #include<map> #include<str ...

  10. Java遍历目录下全部文件并替换指定字符串

    应用场景:比方有一个深层次的文件目录结构,如:javaAPI 每一个文件中面都有同样的内容,而我们要统一改动为其它内容.上千个文件假设一个个改动显得太不明智. import java.io.Buffe ...