UML类图
Posted 春风十里骚的起
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UML类图相关的知识,希望对你有一定的参考价值。
当前浏览器不支持播放音乐或语音,请在微信或其他浏览器中播放
白话图解设计模式专栏
白话图解设计模式专栏主要分享基于Java语言之上软件开发常见的23种设计模式,也就是GoF 的 23 种设计模式,该专栏会对这23种设计模式分多篇文章进行详细描述,结合UML类图和实际代码,分享力求简单易懂,让读者能有实际收获!
UML类图
在讲解设计模式之前,首先有必要了解一下理解设计模式的辅助工具UML类图,
类图是用于描述类与类之间的关系的
,是UML图中最核心的部分。
在讲解设计模式时,我们必然会使用类图,为了让读者更容易理解和掌握设计模式的思想,需要先给大家讲解类图的基本使用方法。
当然,我们不会将UML涉及的元素全部讲解一遍,我们只对涉及设计模式的元素进行简要讲解,让读者更容易理解设计模式。以下图为例:
在上图示例中,
类之间的关系
是我们需要重点关注的,主要有以下几种关系,我们先进行简要说明,后面再进行详细解释:
实现关系:
手机的类图结构,表示手机是一个接口。
它有两个继承类:华为手机和苹果手机。
华为手机和苹果手机与手机之间的关系为实现关系(Implement),因为华为手机和苹果手机都实现了手机接口,
实现关系使用带实心三角形的虚线表示
。
继承关系:
华为手机与荣耀X之间、苹果手机与苹果X之间是继承关系(Extends),也称为泛化关系(Generalization),
使用带空心三角形的实线表示
。
组合关系:
华为手机与处理器和屏幕之间是组合关系,
使用带实心菱形的实线表示
。
聚合关系:
小明与班级之间是聚合关系,
使用带空心菱形的实线表示
。
关联关系:
小明与学生卡之间为关联关系,
使用一根实线表示
。
依赖关系:
小明玩游戏需要用到苹果手机,与苹果手机是一种依赖关系,没有依赖(苹果手机),小明无法玩游戏,
使用带箭头的虚线表示
。
以上关系的理解以实际需求为准,比如,从小明需要学生卡才能进入学校这个角度来说,也可以认为小明是依赖于学生卡的。
对关系的判断应该以实际需求为准,以上的关系分析仅供参考!
类之间的关系
在软件系统中,类与类之间存在着各种各样的关系。根据类与类之间的耦合度的强弱来对关系进行排列,大概是这样:
泛化关系和实现关系>组合关系>聚合关系>关联关系>依赖关系
。其中我们认为泛化和实现的耦合度相等,且是最强的。
实现关系使用带空心三角形的虚线表示,被实现的对象是接口(Interface),在代码中表现为implement xInterface。
比如在以上的手机类中,手机只是一个抽象的概念,并没有具体的对象与之对应,而手机的实现类华为手机和苹果手机则是具体的一类对象。
继承关系即泛化关系使用带空心三角形的实线表示,
被继承的对象是类或者抽象类
(Abstract Class),在代码中表现为extends xclass。
比如在以上的华为手机类中,华为手机只是一个类概念,代表一类对象,而华为手机的继承类荣耀X手机则是更加具体的一类对象。
组合关系使用带实心菱形的实线表示,实心菱形靠近组合对象,组合关系也称为整体与部分的关系,
且整体与部分不可分割,部分不可脱离整体而存在
。
组合关系是一种极度强烈的关联关系。
比如华为手机没有了处理器和屏幕等硬件就不成为手机了,组合关系在代码中表现为组合类(华为手机)包含被组合类(处理器、屏幕等),被组合类一般以成员变量的形式出现。
聚合关系使用带空心菱形的实线表示,空心菱形靠近聚合对象,聚合关系也是整体与部分的关系,但是
整体与部分可以分割,部分可以脱离整体而存在
。
聚合关系是一种强关联关系
。
比如班级解散了,但是小明还在,聚合关系在代码中表现为聚合类(班级)包含被聚合类(小明、其他同学等),
被聚合类一般以成员变量的形式出现
。
关联关系使用一根实线表示,描述不同类的对象之间的结构关系,它是一种
静态关系
。关联关系是类与类之间最常见的关系,一般包括关联关系、聚合关系和组合关系。
关联关系通常
与运行状态无关
,一般由常识等因素决定,关联关系是一种“强关联”的关系。可认为关联关系是一种
引用关系
。
关联关系具有方向性,即双向关联和单向关联,一般不强调方向,表示对象间相互知道。
如果特别强调方向,则需要在实线上加一个箭头,如下图,表示ClassA知道ClassB,但 ClassB不知道ClassA。关联关系在代码中表现为类中的成员变量。
依赖关系使用带箭头的虚线
表示
,被依赖的对象靠近箭头,
依赖对象在运行期间会用到被依赖对象,没有被依赖对象则无法运行
(小明在玩游戏期间依赖苹果手机,没有苹果手机小明无法玩游戏)。可认为依赖关系是一种
使用关系
。
与关联关系不同的是,依赖关系是一种
临时性
的关系,通常
在运行期间产生
(玩游戏需要手机,吃饭不用手机),并且随着运行过程不断发生变化, 依赖关系也可能发生变化。
与关联关系类似,依赖也有方向,但是我们总是应该
保持单向依赖
,应该尽可能
杜绝双向依赖
的产生(可能产生死循环等等问题)。
依赖关系在代码中表现为
类构造方法及类方法的传入参数
,也就是说被依赖对象通常作为依赖对象类构造方法及类方法的传入参数实现依赖关系。
总结一下^_^
类与类之间的关系分析是学习设计模式的基础,设计模式在整体上可认为是对类与类关系的精巧设计和总结提炼。类之间的关系会因使用场景的不同而发生变化,在分析类之间的关系时应该从实际情景和需求出发。
如果对文章有疑问的小伙伴欢迎在评论区提问,如果问题集中的话作者会根据实际情况考虑另开文章进行答疑分享,谢谢合作!
以上是关于UML类图的主要内容,如果未能解决你的问题,请参考以下文章
类图在UML中有何重要作用
idea不显示uml类图
UML设计:类图说明及一步一步制作UML类图
深入浅出UML类图
身为程序员还看不懂UML类图? 一文带你零基础学会看UML类图!
002期彻底掌握UML类图