【UML】类图Class Diagram

news2025/1/16 0:03:03

1、面向对象

面向对象分析:OOA(Object-Oriented Analysis)
面向对象设计:OOD(Object-Oriented design)

面向对象分析和面向对象设计的核心问题是怎么抽象对象。类图就是用来表示对象,可以表示对象的属性、行为以及对象之间的关系。

Inheritance继承
Composition组合
Aggregation聚合
Association关联
Link(Solid)实线直连
Dependency依赖
Realization实现
Link(Dashed)虚线直连
classA
classB
classC
classD
classE
classF
classG
classH
classI
classJ
classK
classL
classM
classN
classO
classP

2、类之间的关系

2.1 关联

最简单关联关系如下图,类图之间是一条直线连接,也可以称为“直线”关系。在需求分析时,暂时不知道两个类之间是啥关系,就先画条直线,等对项目进一步了解后,再添加箭头、一对一或一对多的信心。

classA
classB

“箭头”关系:classA可以找到classB,比如classA(a)的一个成员变量b是classB的引用,a.b

Association关联
classA
classB

2.2 包含

包含关系分两种,弱包含和强包含,分别用空心的菱形和实心的菱形表示,菱形靠近主体这边。标准叫法是聚合(弱包含)和组合(强包含)。

Composition组合
Aggregation聚合
classA主体
classB子体
classE主体
classF子体

“弱”体现在如果主体没有了,子体还能继续存在,比如人和衣钵,人没了,衣钵还能给别人。
“强”体现在如果主体没有了,子体也不能存在了,比如人和器官,人没了,器官也就没了。
如果处于医学的角度考虑到器官移植,那么人和器官也就成了“弱”包含的关系。
一般画UML图时,先视为弱包含,等确定为强关系后,再将菱形涂黑即可。

2.3 继承

继承关系好理解,龙生龙凤生凤老鼠的孩子会打洞,都体现了继承关系。如下图,classB继承了classA,classB将具有classA的非私有的属性和方法。也可以反过来理解,classB抽象(泛化)为classA。

Inheritance继承
classA
classB

标准UML中,继承是空心的三角箭头,但是在Markdown中使用语法创建的继承图显示的是实心的三角箭头。

2.4 依赖

酒鬼依赖酒、烟民依赖烟,依赖关系使用虚线箭头表示。

Dependency依赖
酒鬼

2.5 关联类

当两个类的关键属性有相同的,并且无论单独放到某一个类中都不太合适,可以考虑使用关联类。即将某些属性抽象到关联类中。

class1
class2
AssociationClass

在这里插入图片描述

2.6 实现

类和对象的关系,可以使用下图表示,但是一般不使用。

Realization实现
对象

3、博客中绘制UML

参考网址:https://mermaid-js.github.io/mermaid/#/classDiagram

3.1 语法:

//```mermaid
classDiagram
classA --|> classB : Inheritance继承
classC --* classD : Composition组合
classE --o classF : Aggregation聚合
classG --> classH : Association关联
classI – classJ : Link(Solid)实线直连
classK …> classL : Dependency依赖
classM …|> classN : Realization实现
classO … classP : Link(Dashed)虚线直连

3.2 示例

Cool
Where am i?
«interface»
Class01
int chimp
int gorilla
size()
AveryLongClass
Class09
C2
C3
Class07
Object[] elementData
equals()
Class10
>>service>>
int id
size()
Animal
+int age
+String gender
+isMammal()
+mate()
Duck
+String beakColor
+swim()
+quack()
Fish
-int sizeInFeet
-canEat()
Zebra
+bool is_wild
+run()

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

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

相关文章

JavaScript 基础1:变量与数据类型及其转换

JavaScript 基础1:变量与数据类型及其转换 Date: September 17, 2022 了解变量、数据类型、运算符等基础概念,能够实现数据类型的转换,结合四则运算体会如何编程。 体会现实世界中的事物与计算机的关系理解什么是数据并知道数据的分类理解变…

Path.Combine的坑

最近在写一个自动生成代码到指定文件夹的代码需要让玩家指定文件夹紧接着就遇到问题了 可以看到两个路径并没有合并。我查了一下,原来问题是出在总之就是有很多坑。不要用

【USB】macOS usb内核驱动开发入门

文章目录一、环境准备1、背景说明2、SIP是什么?为啥要关闭SI?P3、关闭SIP(intel处理器)4、样例代码下载二、编译运行三、参考资料一、环境准备 不想我啰哩啰嗦的直接跳到第3点开始执行!!! 1、…

维格云轮播组件入门教程

功能简介 维格云轮播组件是对内传达核心价值观、重要通知,对外宣传广告、推广信息的工具。 维格云轮播组件借助在图片中镶嵌链接,并将多张图片循环播放的方式,可让企业的信息更加突出、有效、快捷地传达。 设置步骤 功能入口 【选择任意应用】——【编辑门户】——【轮播…

基于Kubernetes与云原生的存储测试基准CNSBench

CNSBench A Cloud Native Storage Benchmark基础知识CNSBench的摘要与介绍Kubernetes BackgroundKubernetes的工作流程CNSBench提出的需求分析CNSBench设计与实现CNSBench的示意图CNSBench的基准自定义资源基准自定义资源定义基准自定义资源实例基准测试控制器性能测试与实验测…

gcc编译选项

gcc编译步骤 有下面一个源程序 main.c: #include "stdio.h"int main(void) {printf("Hello World !");return 0; }在使用gcc 将 源文件 main.c编译成 可执行目标程序 总共需要4步: 1、源文件 main.c 预处理后,生成mai…

OpenCV-Python小应用(四):红绿灯检测

OpenCV-Python小应用(四):红绿灯检测前言前提条件实验环境红绿灯检测参考文献前言 本文是个人使用OpenCV-Python的应用案例,由于水平有限,难免出现错漏,敬请批评改正。更多精彩内容,可点击进入 …

血氧仪方案组成结构设计分析

任何产品都需要外部结构作为载体,将产品使用化的,血氧仪一样。 在血氧仪方案开发中,我们发现,血氧仪仅仅做好电子功能设计,其实根本就不够,没有好的结构件配合,其实要实现功能,那是天…

Nginx入门笔记

目录 Nginx 快速入门 1. 启动,停止和重新加载 Nginx 配置 2. 配置文件的结构 3. 提供静态内容服务(静态网站) 4. 设置简单的代理服务器 5. 设置 FastCGI 代理 Nginx 进程和运行时控制 1. 主进程和工作进程 2. 控制 Nginx Nginx 配置文件 Nginx 配置 Web 服…

Jenkins 构建maven项目时提示:No compiler is provided in this environment.

在确保虚拟机中的maven已经安装且可以正常执行mvn install 的情况下,Jenkins构建时执行maven编译仍然提示 No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK? 首先请确保你的虚拟机上安装了JDK以及Maven&#…

MPU进化,多核异构处理器有多强?A核与M核通信过程解析

内容来源:www.forlinx.com随着市场对嵌入式设备功能需求的提高,市面上出现了集成嵌入式处理器和单片机的主控方案,以兼顾性能和效率。 在实际应用中,嵌入式处理器和单片机之间需要进行大量且频繁的数据交换,如果采用低…

医学图像处理——DeepDrr工具CT生成DRR

医学图像处理——DeepDrr工具CT生成DRR一、DeepDrr工具介绍二、DeepDRR工具使用三、测试DeepDRR工具3.1 测试数据集3.1.1 阿里云数据3.1.2 LIDC-IDRI肺结节dicom数据集3.1.3 LIDC-IDRI肺结节dicom数据集3.2 测试代码四、总结一、DeepDrr工具介绍 它可以将CT数据模拟X射线投影生…

[附源码]SSM计算机毕业设计政府公用车辆管理系统JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

VUE全家桶 (Vue-cli、Vue-route、Vuex)学习笔记

Es6 let 是变量2.const 1. 是常量不能修改 创建的时候一定要赋值 要不报错定义的类 里面的属性值可以修改3.对象创建 1.可以先定义const name1; Const a{name}; 输出a的话就是{“name”:1}; 可以直接放进去函数 Const a{ Run(){ }, Set(){ } } 4. 遍历 遍…

【附源码】计算机毕业设计JAVA校园餐厅管理

项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: Springboot mybatis Maven Vue 等等组成,B/…

haproxy软件的日志输出到指定文件

默认haproxy的日志是输出到系统syslog中,查看起来不是非常方便,为了更好的管理haproxy的日志,我们在生产环境中一般单独定义出来。需要将haproxy的info及notice日志分别记录到不同的日志文件中。 需要修改rsyslog配置,为了便于管…

java包以及权限修饰符

Java包和权限修饰符Java包什么是包?如何导包?IDEA如何自动化导包?Java权限修饰符什么是权限修饰符?权限修饰符的分类和具体作用范围:Java包 什么是包? 1.包是用来分门别类的管理各种不同类的,…

Vue【实战三件套】如何封装网络请求、如何解决跨域问题,如何使用mock模拟后端数据,快来一起来看看吧~

一、如何封装网络请求 1.新建项目 vue create item_12.src下新建文件config.js 什么是开发环境 在一个产品的前端开发过程中,一般来说会经历本地开发、测试脚本、开发自测、测试环境、预上线环境,然后才能正式的发布。对应每一个环境可能都会有所差异&…

IPD-全面认识IPD流程

一、商业实现角度透视IPD流程 基于IPD的商业实现过程包括商业机会—商业计划—商业开发—商业兑现。这个过程适用于所有行业,适用于所有创新型市场化企业,包括贸易型企业、外包解决方案型企业、投资型企业等。 商业机会包括市场管理过程中的市场洞察和机会分析,以及需…

[MQ] MQ的应用场景及Docker安装RabbitMQ

✨✨个人主页:沫洺的主页 📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏 📖MyBatis专栏📖Spring专栏📖SpringMVC专栏📖SpringBoot专…