UML静态图-类图

概述

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

一、类图的表示法

类图(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.rhkb.cn/news/338861.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024系统架构师软考考题考点回忆版

2024年5月25日系统架构师软考试题/考点梳理 选择题 (75道单选题) 软件测试(P205) 静态测试:是被测程序不运行,只依靠分析和检查源程序的语句、结构、过程来检查程序是否有错误。动态测试:运行被测试程序,对得到的结果与预期的结果进行比较分析,同时分析运行效率和健壮…

(1) 初识QT5

文章目录 Qt Quickdemo信号的命名方式 qml语言一个很重要的概念 qt 模块 Qt Quick Qt Quick是Qt5中⽤户界⾯技术的涵盖。Qt Quick⾃⾝包含了以下⼏种技术: QML-使⽤于⽤户界⾯的标识语⾔JavaScript-动态脚本语⾔Qt C具有⾼度可移植性的C库. 类似HTML语⾔&#xf…

Docker(Centos7+)

先确定是否 Centos 7 及以上的版本 查看是否 ping 通外网 linux centos7运行下面的代码,基本上都可以正常安装 # 删除之前的docker残留 yum -y remove docker*yum install -y yum-utilsyum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/…

Docker最新超详细版教程通俗易懂

文章目录 一、Docker 概述1. Docker 为什么出现2. Docker 的历史3. Docker 能做什么 二、Docker 安装1. Docker 的基本组成2. 安装 Docker3. 阿里云镜像加速4. 回顾 hello-world 流程5. 底层原理 三、Docker 的常用命令1. 帮助命令2. 镜像命令dokcer imagesdocker searchdocker…

反向配置教程

注意,Openai、Gemini、claude和pika接口在国内直连不通,都需要配置反向 一、配置openai反向 1、在海外宝塔添加反向 将海外宝塔升级到最新 在海外宝塔添加一个新站点(可以解析一个域名来用,也可以用ip端口形式) 打开…

全国水系数据(更新到2024年5月)

上海市水系数据地图可视化 水系数据线图层(小河/溪流、江/河、运河、下水道/排水管) 水系数据面数据(水域、水库、河岸、湿地) 水系数据字段说明 可视化预览 北京市水系可视化 上海市水系可视化 广州市水系可视化 深圳市水系可视化…

部署Envoy

Envoy常用术语 envoy文档官网 Life of a Request — envoy 1.31.0-dev-e543e1 documentationhttps://www.envoyproxy.io/docs/envoy/latest/intro/life_of_a_request#terminology 基础总结 (1)Envoy Envoy自己本身是工作在L7层的一个proxy&#xff…

如何让大模型更聪明?

【导读】 6月20日下午,163期文汇讲堂“数字强国”系列启动,首期《AIGC驱动生产力跃升与良好世界塑造》,在涌动着毕业季青春气息的华东师大樱桃河畔成功举办。北京智源人工智能研究院副院长兼总工程师林咏华应邀作主讲,华东师大学者…

Whisper-AT:抗噪语音识别模型(Whisper)实现通用音频事件标记(Audio Tagger)

本文介绍一个统一音频标记(Audio Tagger)和语音识别(ASR)的模型:Whisper-AT,通过冻结Whisper的主干,并在其之上训练一个轻量级的音频标记模型。Whisper-AT在额外计算成本不到1%的情况下&#xf…

第三届大湾区算力大会丨暴雨开启数字未来新篇

5月30-31日,韶关市迎来主题为“算启新篇智创未来”的第三届粤港澳大湾区(广东)算力产业大会暨第二届中国算力网大会,活动由广东省人民政府主办,广东省政数局、韶关市人民政府共同承办。暴雨信息作为算力产业发展的重要构建者受邀赴会&#xf…

vue-2

vue-cli的安装 vue-cli是一个脚手架工具,它集成了诸多前端技术,包括但不仅限于: webpack、 babel、eslint、http-proxy-middleware、typescript、css pre-prosessor、css module、… 这些工具,他们大部分都要依赖两个东西&…

用例篇03

正交表 因素:存在的条件 水平:因素的取值 最简单的正交表:L4(2) 应用 allpairs 来实现正交表。 步骤: 1.根据需求找出因素和水平 2.将因素和水平写入到excel表格中(表格不需要保存)(推荐用…

WP All Import插件

使用 WP All Imports 插件并将亚马逊产品集成到 WooCommerce 网站中。在您的网站上,他们可以添加到购物车...然后一旦他们按下结帐,他们就会被发送到亚马逊进行付款 WP All Import 是一个强大的WordPress插件,它允许用户从XML或CSV文件中导入…

区块链--Ubuntu上搭建以太坊私有链

1、搭建私链所需环境 操作系统:ubuntu16.04,开虚拟机的话要至少4G,否则会影响测试挖矿时的速度 软件: geth客户端 Mist和Ethereum Wallet:Releases ethereum/mist GitHub 2、安装geth客户端 sudo apt-get update …

day20

第一题 23. 合并 K 个升序链表 本题是已经知道有多个链表,需要我们将这些链表按照升序排列的规则组合到一起,同时这些链表都是升序排列的; 解法一: 利用优先级队列 步骤一:利用优先级队列床架一个小根堆; …

事务报错没有显示回滚导致DDL阻塞引发的问题

在业务开发过程中,显示的开启事务并且在事务处理过程中对不同的情况进行显示的COMMIT或ROLLBACK,这是一个完整数据库事务处理的闭环过程。 这种在应用开发逻辑层面去handle的事务执行的结果,既确保了事务操作的数据完整性,又遵循了…

Jenkins流水线pipeline--基于上一章的工作流程

1流水线部署 1.流水线文本名Jenkinsfile,将流水线放入gitlab远程仓库代码里面 2构建参数 2pipeline脚本 Jenkinsfile文件内容 pipeline {agent anyenvironment {key"value"}stages {stage("拉取git仓库代码") {steps {deleteDir()checkout scmGit(branc…

kafka-生产者发送消息消费者消费消息

文章目录 1、生产者发送消息&消费者消费消息1.1、获取 kafka-console-producer.sh 的帮助信息1.2、生产者发送消息到某个主题1.3、消费主题数据 1、生产者发送消息&消费者消费消息 1.1、获取 kafka-console-producer.sh 的帮助信息 [rootlocalhost ~]# kafka-console…

CISCN 2022 初赛 ez_usb

还是从第一个 URB向后看 发现 同时 存在 2.8.1 2.10.1 2.4.1 但是显然 2.4.1 是7个字节 不满足 usb流量要求 只考虑 2.8.1 和 2.10.1 tshark -r ez_usb.pcapng -T json -Y "usb.src \"2.8.1\"" -e usbhid.data > 281.json 正常取数据即可 import js…

Vue3 - Mac系统用文本编辑写html不显示效果的坑

平时在win系统下,可以直接对文本进行编辑,非常的舒服。 在mac系统中,也有类似的功能,就是文本编辑,没想到居然还有坑。 这是我mac系统中创建的html文件,想着没有几行代码,就没有开编辑器了&am…