UML静态图-类图

news2024/9/19 10:42:05

概述

静态图包含类图、对象图和包图的主要目的是在系统详细设计阶段,帮助系统设计人员以一种可视化的方式来理解系统的内部结构和代码结构,包括类的细节、类的属性和操作、类的依赖关系和调用关系、类的包和包的依赖关系。

一、类图的表示法

类图(Class Diagram)是描述类、接口、协作及它们之间关系的图,用来显示系统中各个类的静态结构。类图是定义其他图的基础,在类图基础上,可以使用序列图、协作图、组件图和部署图等进一步描述系统其他方面的特性。
类图包括6个元素:类(Class)、接口(Interface)、泛化关系(Generalization)、关联关系(Association)、依赖关系(Dependency)及实现关系(Realization)。

1.类图的表示法
类的名称是每个类中所必有的构成元素,用来区分其他的类。类名是一个字符串,称为简单名字。路径名字是在类名前加包含类的包名为前缀。例如 User、java::uti::List 都是合法的类名。
类的 UML表示为一个长方形垂直地分为3个区。顶部区域显示类的名字,中间区域列出类的属性变量,底部区域列出类的操作函数。当在一个类图上画一个类元素时,必须要有顶端的区域,下面的两个区域是可选择的(当图描述仅仅用于显示分类期间关系的高层细节时,下面的两个区域是不必要的)。
在这里插入图片描述
对应代码为:

public class User{
}

2.类图属性的表示法

类的属性(中部区域)在分隔线上列出每一个类的属性,类可以有任意多个属性,也可以没有属性。按照 UML的约定,单字的属性名需要小写。如果属性名包含多个单词,这些单词要合并,且除了第一个单词外其余单词的首字母要大写。在类图中属性只要写上名字就可以了,如图3-2所示。

对于属性,还需要了解以下3个方面。
1)属性类型
也可以在属性名后通过冒号来执行属性的类型,如图3-3所示
在这里插入图片描述
对应的类代码为:

public class User {
	private String username;
	private String password:
}

2)属性默认值
也可以在属性名后跟上类型甚至默认值,如图3-4所示:
在这里插入图片描述
对应的类代码为:

public class User {
	private String username = "admin';
	private String password = "123";
}

3)属性的可见性
类中属性的可见性主要包括:

  • 公有,使用关键字 public。
  • 受保护,使用关键字 protected.
  • 私有,使用关键字 private。
  • 默认,不使用关键字。

4种可见性如图 3-5 所示。

在这里插入图片描述
3.类图操作的表示法
类的任意一个实例对象都可以调用操作,并可能影响该对象行为的实现。类操作记录在类图长方形的第3个(最低的)区域中,它也是可选择的。与属性一样,类的操作以列表格式显示,如3-6 所示。
在这里插入图片描述
操作的命名与属性类似,第一个单词的首字母小写,后续每一个单词的首字母要大写。操作也拥有不同的可见性,默认的可见性为public的,与属性相似,它也可以设置如下4种可见性:

  • 公有,使用关键字public。
  • 受保护,使用关键字 protected。
  • 私有,使用关键字 private。
  • 默认,不使用关键字。

4种可见性显示的图标分别为如图3-7所示的 getUsername()、setUsername()、getPassword()和setPassword()前的图标。
在这里插入图片描述

二、接口的表示法

接口与类相似,它仅仅包含操作但不包含属性,且它没有对外界可见的关联。它直接对应于 Java中的一个接口类型。接口可用如图3-8所示的两种图来表示,两条竖线的上方为接口名,下方为接口的操作列表。
在这里插入图片描述
以上对应的 Java 类代码如下:

public interface MyInterface {
	public void insertUser();
}

接口除了没有属性外,其他的定义都与类相同,这里就不再重复介绍。

三、类图之间的 4 种关系

类之间存在4种关系:

  • 泛化关系(Generalization)表示类的继承。
  • 关联关系(Association)表示类的变量,还包括聚合和组合
  • 依赖关系(Dependency)表示局部变量。
  • 实现关系(Realization)–表示接口的实现。

1. 泛化关系(Generalization)–表示类的继承
泛化关系表示类与类之间的继承关系,接口与接口之间的继承关系。泛化关系是从子类指向父类的,或从实现接口的类指向被实现的接口,与继承的方向相反,如图3-10所示。
在这里插入图片描述
泛化关系在 Java 语言中可以直接使用关键字 extends 表示,描述类与类、接口与接口之间的泛化。以上的泛化可以表示为如下的代码:

public class ClassA extends ParemtClass {}
public class ClassB extends ParemtClass {}

2.关联关系(Association)-表示类的变量
关联关系是类与类之间的连接,它使一个类知道另一个类的属性和方法。关联可以是双向的,也可以是单向的。

  • 双向的关联可以有两个箭头或者没有箭头,通常不鼓励使用双向的关联。
  • 单向的关联有一个箭头,表示关联的方向,单向的关联使用更为普遍。

每一个关联都有一个名字,如图3-11所示。
在这里插入图片描述
在Java 代码中,关联关系是表示变量的引用。例如上面的例子中,类 User 拥有一个 Book 类型的变量 book,这个变量实现了这两个类之间的关联关系。以上的关联可以用下面的代码表示:

public class User {
	...
	private Book book;
	...
}

在关联的两端可以使用一个数字表明该端可以有几个实例,数字可以有以下4种用法:

  • 0…1–表示零个或一个实例。
  • 0…或者–表示对实例的数目没有限制。
  • 1–表示只有一个实例。
  • ] *_-表示至少有一个实例。

如图 3-12所示,它表示每一个User 实例可以拥有任意数量的 Book 实例。
在这里插入图片描述
一个关联关系往往可以进一步确定为聚合关系或者合成关系。

1)聚合关系(Aggregation)
聚合关系表示整体和部分关系的关联,聚合关系描述了“hasa”的关系。聚合暗示着整体在概念上处于比局部更高的一个级别,而关联暗示两个类在概念上位于相同的级别。聚合也转换成 Java中的一个实例作用域变量。聚合是一种单向关系,聚合与关联的区别在于聚合的两个类之间的关系在概念层次上不是一个级别的,一般来说聚合中的类关系总是一个类比另一个类要高级一些,而关联基本上是平级的。例如电脑是 CPU、主板、机箱的聚合。

2)组合关系(Compostion)
组合关系是聚合关系中的一种特殊情况,是更强形式的聚合,又被称为强聚合。在组合中,成员对象的生命周期取决于聚合的生命周期。组合也是非共享的,所以,虽然局部不一定要随整体的销毁而被销毁,但整体要么负责保持局部的存活状态,要么负责将其销毁。局部不可与其他整体共享。但是,整体可将所有权转交给另一个对象,后者随即将承担生存期职责。例如,人是大脑、四肢、躯干的组合。

3.依赖关系(Dependency)-表示局部变量
依赖关系也是类与类之间的连接,它是单向的关系。依赖关系表示一个类依赖于另一个类。例如 User 需要办理图书证 BookCard,则它就依赖于类 BookCard,其表示关系如图 3-13 所示。
在这里插入图片描述
以上的关联可以用下面的代码表示:

public class User {
	...
	public void handleBookCard(BookCard bookcard) {
		...
	}
	...
}

在 Java 中依赖关系体现为局部变量、方法的参数,以及对静态方法的调用,也就是说,如果类A的某一个局部变量类型是类 B,那么类A就依赖于类 B。如果类A的一个方法包含有B类型的参数,或A调用了B中的一个静态方法,那么A都应该依赖于B。
如果B出现在A的实例变量中,那么依赖关系就会扩大为关联关系,因此,泛化关系>关联关系>依赖关系。

4.实现关系(Realization)–表示接口的实现
实现关系表示类对接口的实现关系。实现关系是从子类指向接口类的,实现的方向相反,如3-14 所示。
在这里插入图片描述
实现关系在 Java 语言中可以直接使用关键字 implements 表示,描述类与接口之间的实现。以上的实现可以表示为如下的代码:

public class ClassC implements Paremtlnterface {}
public class ClassD implements ParemtInterface {}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1794354.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024年计算机、信息工程与大数据应用国际会议(CIEBDA 2024)

2024 International Conference on Computer, Information Engineering, and Big Data Applications 【1】大会信息 会议简称:CIEBDA 2024 大会地点:中国青岛 审稿通知:投稿后2-3日内通知 投稿邮箱:ciebdasub-paper.com 【2】会…

eNSP学习——配置RIP的版本兼容、定时器和协议优先级

目录 主要命令 原理概述 实验内容 实验拓扑 实验目的 实验编址 实验步骤 1、基本配置 2、配置RIP协议的版本兼容 3、配置RIP的定时器 4.配置RIP协议优先级 需要eNSP各种配置命令的点击链接自取:华为eNSP各种设备配置命令大全PDF版…

【YOLOv8改进[CONV]】SPDConv助力YOLOv8目标检测效果 + 含全部代码和详细修改方式 + 手撕结构图

本文将使用SPDConv助力YOLOv8目标检测效果的实践,文中含全部代码、详细修改方式以及手撕结构图。助您轻松理解改进的方法。 改进前和改进后的参数对比: 目录 一 SPDConv 二 SPDConv助力YOLOv8目标检测效果 1 整体修改 ① 添加SPDConv.py文件 ② 修改ultralytics/nn/tas…

【图像处理与机器视觉】灰度变化与空间滤波

基础 空间域与变换域 空间域:认为是图像本身,对于空间域的操作就是对图像中的像素直接进行修改 变换域:变换系数处理,不直接对于图像的像素进行处理 邻域 图像中某点的邻域被认为是包含该点的小区域,也被称为窗口 …

ai智能写作app有分享吗?4个专业的软件!

在数字化浪潮席卷全球的今天,内容创作的需求日益旺盛,而AI智能写作app的出现,无疑为内容创作者们带来了一股清新的风。它们凭借强大的自然语言处理能力和海量的数据资源,帮助创作者们快速生成高质量、有吸引力的文章,让…

目标检测-AnyLabeling标注格式转换成YOLO格式

Anylabel可以极大的增加数据的标注效率,但是其标注格式如何能转换成YOLO标注格式,具体内容如下所示。 关于AnyLabeling的其它详细介绍如下链接所示 https://blog.csdn.net/u011775793/article/details/134918861 Github链接 https://github.com/vietanhd…

五大PS插件推荐,让你的设计效率翻倍!

前言 PS插件可以在繁忙的设计工作中,帮助设计师们快速高效地完成任务,是每个设计师都渴望解决的问题。这些插件不仅能够提升设计效率,还能让设计师的创意得到更好的展现。接下来,就为大家推荐五款必备的PS插件,让你的…

Vue3_Vuex

目录 一、安装 二、创建实例 三、main.js引入 四、组件内使用 1.查询vuex里面的数据值 2.更改vuex里面的数据值 3.调用vuex里Actions的异步请求方法 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 库。它采用集中式存储管理应用的所有组件的状态,并以相…

虚拟机Ubuntu扩展磁盘大小

虚拟机Ubuntu扩展磁盘大小 1. 选择硬盘,并点击扩展,如果扩展选项是灰色的,请考虑是否开机或者留有快照 2. 虚拟机Ubuntu扩展磁盘大小 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/2aea6670d42940f68d0f53c87810ac2b.png 3. 完成后开机,此时,我们的系统是还没…

DevOps后时代,构建基于价值流的平台化工程

本文来自腾讯蓝鲸智云社区用户: CanWay 平台化工程涉及双重核心意义。一方面,是类似利用IDE等工具提高工程师效率的平台化工程,如GitOps或命令行调度般便捷。然而,本文重点探讨的是基于价值流的平台化工程,尤其针对传统金融行业&a…

ClickHouse如何整合数据源:MySQL、HDFS...

一、ClickHouse数据源 ClickHouse 作为一个强大的列式数据库管理系统,支持多种数据源,使得用户能够方便地将数据导入 ClickHouse 进行存储和分析。以下是常见的 ClickHouse 数据源: 外部数据源 HDFS: 支持从 Hadoop 分布式文件系…

Unity协程详解

什么是协程 协程,即Coroutine(协同程序),就是开启一段和主程序异步执行的逻辑处理,什么是异步执行,异步执行是指程序的执行并不是按照从上往下执行。如果我们学过c语言,我们应该知道&#xff0…

【Python数据预处理系列】掌握数据清洗技巧:如何高效使用drop()函数去除不需要的列

目录 一、准备数据 二、使用drop函数去除掉指定列 在数据分析和预处理的过程中,经常会遇到需要从数据集中移除某些列的情况。本文将引导您了解如何使用drop函数高效地去除不需要的列,帮助您提升数据处理技能,确保您的数据集只包含对分析有价…

基于SSM框架的垃圾分类系统的设计与实现(含源码+sql+开题报告+论文+论文答辩模板)

图1 前台首页截图 首页展示:首页展示法律法规、公示公告、用户交流论坛、分类指南、垃圾站点、以及个人中心; 法律法规:展示我国《城市生活垃圾分类及其评价标准》以及《生活垃圾分类标志》等最新法律法规; 公示公告&#xff1…

机器视觉——多图颜色检测

今天我们实现将一组图片导入,然后对它们进行颜色检测分类。 比如下面一组图片: 首先我们需要导入这组图片 之后会在编辑器里面生成这样一段代码 之后再继续相应代码编写 ,我的思路是利用颜色空间转换 RGB转到HSV trans_from_rgb(R, G, B,…

docker镜像深入理解

大家好,本篇文章和大家聊下docker相关的话题~~ 工作中经常有关于docker镜像的问题,让人百思不解 docker镜像加载到系统中到哪里去了?docker load 加载镜像的流程是怎样的?为什么容器修改内容后,删除容器后再次开启容…

小公司的软件开发IT工具箱

目录 工具链困境 难题的解决 达到的效果 资源要求低 工具箱一览 1、代码管理工具 2、自动化发版(测试)工具 3、依赖库(制品包)管理 4、镜像管理 5、授权管理(可选) 待讨论:为什么不是…

1.音视频开篇

目录 音视频播放的原理 音视频数据格式YUV YUV数据存储比 ​编辑 YUV空间格式 RGB与YUV转换 音视频播放的原理 主要分为:解协议->解封装->解码->音视频同步->播放。当然,如果是本地播放,没有解协议这一步骤。 采集数据其实…

hutool工具实践-缓存

简介 依赖引入 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-cache</artifactId><version>5.8.17</version></dependency> hutool工具既可以像上一章hutool工具实践-验证码-CSDN博客所说直接全部引入&#x…

uniapp app与mini program相互跳转

app跳微信小程序 方法1&#xff1a;通过URL Schema跳转 参考文档获取 URL Scheme | 微信开放文档 方法2: 通过URL Link跳转 参考文档获取加密 URL Link | 微信开放文档 注意点&#xff1a; 上述两个方法生成的url&#xff0c;需要先通过浏览器打开链接&#xff0c;再自动跳…