『UML类图入门与实战』一文读懂并灵活运用UML类图的实用方法-程序员宅基地

技术标签: uml  # 『架构设计图』  软件工程  类图  

请添加图片描述

请添加图片描述
读完这篇文章里你能收获到

  • 快速看懂UML类图
  • 了解类图中各个对象的表示方式
  • 学会6种类图中的关系画法
  • 提供各个关系的实际示例
  • 博主实际项目中所画的类图供参考

请添加图片描述

请添加图片描述

UML类图模板.png

请添加图片描述

一、类图概述

类图(Class diagram)是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等。类图不显示暂时性的信息。类图是面向对象建模的主要组成部分

请添加图片描述

二、类图的作用

  • 在软件工程中,类图是一种静态的结构图,描述了系统的类的集合,类的属性和类之间的关系,可以简化了人们对系统的理解
  • 类图是系统分析和设计阶段的重要产物,是系统编码和测试的重要模型

请添加图片描述

三、 类图中的对象

1 具体类的表示方式

  • 类使用包含类名、属性(field) 和方法(method) 且带有分割线的矩形来表示
  • 属性/方法名称前加的加号和减号表示了这个属性/方法的可见性
UML类图中表示可见性的符号有三种:
+:表示public 
-:表示private 
#:表示protected 

属性的完整表示方式是: 可见性 名称 :类型 [ = 缺省值]
方法的完整表示方式是: 可见性 名称(参数列表) [ : 返回类型]

注意:
1、中括号中的内容表示是可选的
2、也有将类型放在变量名前面,返回值类型放在方法名前面

image.png

2 抽象类的表示方式

抽象类在UML类图中同样用矩形框表示,但是抽象类的类名以及抽象方法的名字都用斜体字表示

image.png

3 接口的表示方式

接口在类图中也是用矩形框表示,但是与类的表示法不同的是,接口在类图中的第一层顶端用构造型 <>表示,下面是接口的名字,第二层是方法

image.png

请添加图片描述

四、类图中的关系

1 关联关系

概念

  • 关联关系(Association)是指对象和对象之间的连接,它使一个对象知道另一个对象的属性和方法
  • 如果一个对象的类代码中,包含有另一个对象的引用,那么这两个对象之间就是关联关系
  • 关联关系有单向关联和双向关联。如果两个对象都知道(即可以调用)对方的公共属性和操作,那么二者就是双向关联。如果只有一个对象知道(即可以调用)另一个对象的公共属性和操作,那么就是单向关联

表示方式

  • 双向关联关系用带双箭头的实线或者无箭头的实线双线表示
  • 单向关联用一个带箭头的实线表示,箭头指向被关联的对象,这就是导航性(Navigatity)
  • 一个对象可以持有其它对象的数组或者集合。在UML中,通过放置多重性(multipicity)表达式在关联线的末端来表示。多重性表达式可以是一个数字、一段范围或者是它们的组合。多重性允许的表达式示例如下:
数字:精确的数量
*或者0..*:表示0到多个
0..1:表示0或者1个
1..*:表示1到多个

单向关联

  • 在UML类图中单向关联用一个带箭头的实线表示
  • 下图表示一个员工可以有多个地址

在这里插入图片描述

双向关联

  • 在UML类图中,双向关联用一个不带箭头的直线表示
  • 所谓的双向关联就是双方各自持有对方类型的成员变量
  • 下图表示一个老师可以有多个学生,一个学生也可以有多个老师

image.png

2 聚合关系

概念

  • 聚合(Aggregation)是关联关系的一种特例,它体现的是整体与部分的拥有关系,即 “has a” 的关系
  • 此时整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享,所以聚合关系也常称为共享关系
  • 聚合关系也是通过成员对象来实现的,其中成员对象是整体对象的一部分,但是成员对象可以脱离整体对象而独立存在。

表达方式

  • 在UML图中,聚合关系用空心菱形加实线箭头表示,空心菱形在整体一方,箭头指向部分一方
  • 下图所示是大学和教师的关系图:

学校与老师的关系,学校包含老师,但如果学校停办了,老师依然存在。

image.png

3 组合关系

概念

  • 组合(Composition)也是关联关系的一种特例,它同样体现整体与部分间的包含关系,即 “contains a” 的关系
  • 但此时整体与部分是不可分的,部分也不能给其它整体共享,作为整体的对象负责部分的对象的生命周期。
  • 这种关系比聚合更强,也称为强聚合
  • 如果A组合B,则A需要知道B的生存周期,即可能A负责生成或者释放B,或者A通过某种途径知道B的生成和释放
  • 在组合关系中,整体对象可以控制部分对象的生命周期,一旦整体对象不存在,部分对象也将不存在,部分对象不能脱离整体对象而存在

表达方式

  • 在UML图中,组合关系用实心菱形加实线箭头表示,实心菱形在整体一方,箭头指向部分一方

例如,头和嘴的关系,没有了头,嘴也就不存在了

image.png

4 依赖关系

概念

  • 依赖(Dependency)关系是一种弱关联关系
  • 如果对象A用到对象B,但是和B的关系不是太明显的时候,就可以把这种关系看作是依赖关系
  • 如果对象A依赖于对象B,则 A “use a” B

表达方式

  • 在UML类图中,依赖关系用一个带虚线的箭头表示,由使用方指向被使用方,表示使用方对象持有被使用方对象的引用

下图所示是司机和汽车的关系图,司机驾驶汽车:

image.png

5 泛化(继承)关系

概念

  • 泛化关系(Generalization)是指对象与对象之间的继承关系
  • 如果对象A和对象B之间的“is a”关系成立,那么二者之间就存在继承关系,对象B是父对象,对象A是子对象
  • 泛化(继承)关系是对象之间耦合度最大的一种关系,表示一般与特殊的关系,是父类与子类之间的关系,是一种继承关系

表达方式

  • 在UML类图中,泛化关系用空心三角和实线组成的箭头表示,从子类指向父类

例如,Student 类和 Teacher 类都是 Person 类的子类,其类图如下图所示:

image.png

6 实现关系

概念

  • 实现关系是指接口及其实现类之间的关系

表达方式

  • 在UML类图中,实现关系用空心三角和虚线组成的箭头来表示,从实现类指向接口

image.png
请添加图片描述

五、实际项目中的类图

在这里插入图片描述

请添加图片描述

『架构设计图』系列博客文章,欢迎关注上面的专栏

请添加图片描述

请添加图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_34202873/article/details/127590016

智能推荐

nvm安装nodejs 运行use命令时报错exit status 1: ��û���㹻��Ȩ��ִ�д˲�����...-程序员宅基地

文章浏览阅读482次。这是因为权限不够,将任务管理器使用管理员身份打开即可:_nvm exit status 1:

Vue+Element UI中Select下拉框搜索使用_element ui的下拉框搜索如何实现-程序员宅基地

文章浏览阅读4k次,点赞2次,收藏14次。根据官网总结:<el-select v-model="form.formVal" clearable filterable remote @change="changeVal($event)" :remote-method="getFormList" placeholder="请选择表单"> <el-option v-for="item in formList" :key="item.id" :label="item.formName" .._element ui的下拉框搜索如何实现

oracle 12c service之cdb和pdb-程序员宅基地

文章浏览阅读726次。srvctl add service参数如下:-s:服务名-r:首选实例名-a:备用实例名-p:TAF策略,有none,basic,preconnect三个值可选-d-pdbsrvctl add service -help 查看各个参数的含义这里如果未指定-pdb,则连到cdb上,这在远程克隆pdb,设置tns的时候需要srvctl add service -s lych_srv -d x..._srvctl -p taf策略 none basic preconnect

计算机关闭地址栏历史,删除win10地址栏历史记录方法-程序员宅基地

文章浏览阅读3k次。有用户问小编删除win10地址栏历史记录方法,其实在Win7系统下进行搜索操作经常会留下浏览记录,这样很容易暴露用户的操作痕迹,所以用户在使用完后可以清楚这些任务栏中的浏览记录。那怎么删除win10地址栏历史记录方法呢?下面就让小编给大家介绍一下关于怎么删除win10地址栏历史记录方法的方法吧!1、如图所示我们的任务栏中的地址会自动留下我们的浏览痕迹,怎么去掉这些痕迹呢?删除win10地址栏历史记..._如何删除"我的电脑"路径栏上的记录?

网络丢包率-程序员宅基地

文章浏览阅读370次。数据在网络中是被分成一个个数据包传输的,每个数据包中有表示数据信息和提供数据路由的帧。而数据包在一般介质中传播是总有一小部分由于两个终端的距离过大会丢失,而大部分数据包会到达目的终端。 在cmd 中键入ping [网址],显示最后一行(x% loss)就是对目标地址ping包的丢包率。 ..._网络丢包率

二次上传图片onchange不生效问题_el-upload重新上传文件不触发on-change-程序员宅基地

文章浏览阅读660次。这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar_el-upload重新上传文件不触发on-change

随便推点

FAT32文件系统介绍-程序员宅基地

文章浏览阅读1.7w次,点赞23次,收藏191次。FAT32文件系统(一)为什么要有文件系统(二)FAT32文件系统组成(三)分步介绍各部分(1) 首先介绍一下MBR(2)DBR介绍(3)FAT表介绍(4) 数据区(一)为什么要有文件系统文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构,即在存储设备上组织文件的方法。如果没有文件系统,那我们想找到在硬盘上保存的数据会是一件很麻烦的事情,文件系统的作用是,它负责为用户建立文件、读出、修改,控制文件的读取,我们常说的格式化硬盘就是写入文件系统。文件系统的种类有很多,而且有各自的特点,本文主要_fat32

adb 命令启动、关闭 app_adb 关闭当前activity-程序员宅基地

文章浏览阅读1.9w次,点赞2次,收藏5次。今年我的目标是【个体崛起】,年初写下自己的目标,希望年终会有收获! adb 命令敲黑板的知识点启动app,在终端输入:#adb shell am start -n 包名/启动的activity关闭app,在终端输入#adb shell am force-stop 包名..._adb 关闭当前activity

JavaWeb(入门之环境的搭建)-程序员宅基地

文章浏览阅读368次。01-WEB环境搭建 一、JavaWEB概述 常用软件体系结构 C/S C/S结构即客户端/服务器(Client/Server),例如QQ; 需要编写服务器端程序,以及客户端程序,例如我们安装的就是QQ的客户端程序; 缺点:软件更新时需要同时更新客户端和服务器端两端,比较麻烦; 优点:安全性比较好。 ..._javaweb

爱奇艺轮播图滚动_爱奇艺轮播图代码-程序员宅基地

文章浏览阅读503次。实例:实例代码:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>视频标签栏切换</title> <style> * {_爱奇艺轮播图代码

完美解决JS点击一次却触发了两次的解决办法_javascrip点击事件执行两次 js-程序员宅基地

文章浏览阅读777次,点赞8次,收藏8次。【代码】完美解决JS点击一次却触发了两次的解决办法。_javascrip点击事件执行两次 js

controller的异常处理以及service层的事务控制___controller层 trycatch不影响service层抛出的异常_controller层吃掉异常-程序员宅基地

文章浏览阅读7.4k次,点赞7次,收藏28次。controller的异常处理以及service层的事务控制最近写代码涉及到一些事务,上午终于把代码给理顺了,之前不太清楚在哪里做异常处理,导致代码遍地try-catch,相当难看。还是基于controller-service-dao三层来写代码,从入口开始,controller层的方法对应的是某个url,面向的是应用人员,应该返回他们能读懂的信息,所以controller必须做异常处理,一般来说会有统一的异常处理方法;service层面向的是controller,service层中的某些方法,必须保_controller层吃掉异常

推荐文章

热门文章

相关标签