类图

要学懂设计模式,就需要先看得懂类图,类与类之间的关系是学习设计模式的基础,而在软件工程中,类与类之间的关系是通过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 Sweep GC

    目录 标记清除算法 标记阶段 深度优先于广度优先 清除阶段 分配 First-fit.Best-fit.Worst-fit三种分配策略 合并 优点 实现简单 与保守式GC算法兼容 缺点 碎片化 分配速 ...

  2. Python, Django 性能分析工具的使用

    最近接手的 Apache HUE 项目性能出现了问题,线上经常出现响应时间过长或因为时间过长而无法服务等问题.老大让我准备弄个性能分析工具,便于追踪和分析平台当前的瓶颈出现在哪里. 那就搞起吧!先从代 ...

  3. 紫书 习题 10-21 UVa 1649 (组合数)

    C(n, k) = m, 固定k,枚举k 这里用到了组合数的一个性质 当k固定的时候,C(2 * k, k) 最小 C(m, k)最大(对于这道题而言是这样,因为大于m 就最终答案不可能为m了) 所以 ...

  4. struts2的字符串参数

    一定要熟记一个东西,一层引号的是变量,两层引号的是字符串 如"蓝"/'蓝'是变量,而" '蓝' "/ ' "蓝" '是字符串 打代码时要警惕 ...

  5. PostgreSQL递归查询实现树状结构查询

    在Postgresql的使用过程中发现了一个非常有意思的功能,就是对于须要相似于树状结构的结果能够使用递归查询实现.比方说我们经常使用的公司部门这样的数据结构.一般我们设计表结构的时候都是相似以下的S ...

  6. Redisclient连接方式Hiredis简单封装使用,连接池、屏蔽连接细节

    工作须要对Hiredis进行了简单封装,实现功能: 1.API进行统一,对外仅仅提供一个接口. 2.屏蔽上层应用对连接的细节处理: 3.底层採用队列的方式保持连接池,保存连接会话. 4.重连时採用时间 ...

  7. Java程序猿的JavaScript学习笔记(6——面向对象模拟)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  8. CentOS6.5下的Nagios安装配置详解(图文)

    最近因为,科研需要,接触上了Nagios,这里,我将安装笔记做个详解.为自己后续需要和博友们学习! VMware workstation 11 的下载 VMWare Workstation 11的安装 ...

  9. sql创建外键

    建立外键关系:先建主表再见从表:主表:create table zhu(code int parimary key,name varchar(20)) ;从表:create table cong(co ...

  10. C/C++(数据结构栈的实现)

    栈的实现 特点FILO(先进后出) 假设栈的空间为8 top == 0 不能出栈,已到栈底 top == 8 不能入栈,已到栈顶 top始终指向一个待插入的位置 push操作,1.写入数据,2.top ...