【设计原则】UML类图概述

news2024/11/26 15:38:15

    类图是14种UML(统一建模语言)中的一种,是面向对象程序的核心建模工具,能够描述接口、类以及他们之间的协同关系,显示项目中这些概念的静态结构。

    本文是我参考多篇博客整理而成,意在帮助自己开发过程中绘制更为清晰和规范的图示,使得整个软件设计有更好的可读性和理解性,降低开发的风险,同时也方便与其他研发同事的沟通交流。

    类图概括起来可以分成两个部分:类之间的关系,接口也是类的一种。这里涉及到两种定义,我们分别来看一下:

1、类

    类的定义分为三部分组成,分别是 类名、类的属性、类的方法。

1.1 类的构成

        - :private 私有的,只有本类可见

        + : public 公共的,外部类可见

        # : protected 受保护的,派生类可见

        ~ : 默认的,本包下的类可见

    以上的符号对类的特征和行为都是适用的。在类的方法中,方法名后面括号中是入参,格式是 形参名1:类型, 形参名2:类型,也可以赋予默认值,括号后面是返回值,无返回值可以不写,有些博客中建议用 void 来表示返回值。

1.2 类的名称

    另外还有类名的定义,如果是接口或者抽象类,可以使用斜体或者<< xxx >>来表示,如下:

2、类之间的关系

    在UML类图中,类与类之间的关系有四种,如下:

        泛化:表示一般与特殊的关系,可以理解为继承;

        实现:表示类与接口/抽象类的关系,类是接口/抽象类的特征和行为的体现。

        关联:表示类之间的一种持有关系,如 A类作为B类的成员变量;

        依赖:表示类之间的一种使用关系,如 A类作为B类某个方法的 局部变量、形参、返回值等。

2.1 泛化关系

【定义】可以理解成是一种继承关系(包含抽象类的继承),表示子类继承父类的所有特征和行为;

【表示】用实线和空心三角表示,比如Son类继承Father类,则Son类指向Father类

2.2 实现关系

【定义】是类的实现关系,表现为类实现接口,能够体现后者的所有特征和行为。

【表示】用虚线和空心三角表示,比如ServiceImpl实现了Service接口,则ServiceImpl指向Service接口

2.3 关联关系

【定义】是类中对象与对象的关系,可以理解为一个对象所有的成员变量

【分类】关联关系是可以分为 “自关联”、“单向关联”、“双向关联”、“聚合关系”、“组合关系”5种,表示方法略有不同

2.3.1 自关联

【定义】一个对象持有自身类型的属性

【表示】用实线和箭头表示,自己指向自己

2.3.2 单向关联

【定义】一个对象持有另一个类型的属性

【表示】用实线和箭头表示,上层指向下层

2.3.3 双向关联

【定义】两个对象互相持有对方类型的属性

【表示】用实线表示,无箭头

2.3.4 聚合关系

【定义】聚合关系是一种比较弱的关联关系,比如大雁和雁群,雁群不在了,大雁还是可以存在的。可以理解为 集合类的成员变量,如 List<大雁>

【表示】用空心菱形、实线、箭头表示

2.3.5 组合关系

【定义】组合关系是一种比较强的关联关系,成员的生命周期取决于聚合的生命周期,比如公司和部门,公司不存在了,部门也就没有存在的意义。

【表示】用实心菱形、实线、箭头表示

2.4 依赖关系

【定义】一个对象在运行期间与用到的对象之间的关系,具体表现为某个对象作为另一个对象方法的形参、局部变量、方法的返回值,或者A类调用了B类的静态方法(下图代码表示了依赖关系中的三种形式)。

【表示】用虚线和箭头表示

3、总结

    使用UML类图,我们没必要纠结比如聚合、组合关系应不应该带箭头这样的问题,更多的应该关注我们呈现出来的类图,能否让别人更好的理解我们的设计思想。

参考博文如下:

1. 《掌握14种UML图,清晰图示》 https://aikysay.blog.csdn.net/article/details/125069834

2. 《UML概述》 UML概述-CSDN博客

3. 《[UML] 类图介绍 —— 程序员(灵魂画手)必备画图技能之一》 [UML] 类图介绍 —— 程序员(灵魂画手)必备画图技能之一_类图怎么画-CSDN博客

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

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

相关文章

「Verilog学习笔记」超前进位加法器

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 超前进位加法器的实质是&#xff1a;对于输出的每一位Si 其实都可以用Si Ai ^ Bi ^ Cin来表示 我们需要做的只是判断加法结果的最高位该取几 例如本题中 输入的两个数A和B…

永久访问minio中的文件(视频、图片)

设置bucket权限 设置对应bucket的权限为public 访问资源 资源地址&#xff1a;http://${ip}:{port}/bucket-name/{resourceid} port: 不是访问控制台页面的端口。如果你是docker启动的服务&#xff0c;port应该是9002 docker run -it --name minio -p 9002:9000 -p 9001:9001 …

年终回顾与展望:CSDN成就之路,2023年AI浪潮展望及2024 Flag

文章目录 2023年在CSDN获得的肯定1&#xff0c;入围2023博客之星2&#xff0c;《有哪些让你目瞪口呆的Bug&#xff1f;》征文获得TOP33&#xff0c;通过创作者身份认证4&#xff0c;多篇文章被城市开发者社区收录5&#xff0c;多篇文章进入全站综合热榜6&#xff0c;积极参与社…

【苏州】买套二手房需要多少钱?

买新房存在一定的交付风险&#xff0c;买二手房毕竟是现货&#xff0c;所以最近二手房购房者越来越多了。 根据住房和城乡建设部副部长董建国在中国国际经济交流中心举行的2023&#xff0d;2024中国经济年会上的发言&#xff0c;今年1到11月&#xff0c;全国二手房交易量占全部…

Ubuntu 18.04搭建RISCV和QEMU环境

前言 因为公司项目代码需要在RISCV环境下测试&#xff0c;因为没有硬件实体&#xff0c;所以在Ubuntu 18.04上搭建了riscv-gnu-toolchain QEMU模拟器环境。 安装riscv-gnu-toolchain riscv-gnu-toolchain可以从GitHub上下载源码编译&#xff0c;地址为&#xff1a;https://…

基于北三短报文+GNSS的水库大坝形变监测方案

水库大坝是国家水资源利用和调度的关键设施&#xff0c;对于防洪、供水、发电等方面具有重要作用。然而&#xff0c;随着社会的发展和气候的变化&#xff0c;水库大坝的安全性和稳定性日益受到关注。大坝可能会发生变形、沉降等问题&#xff0c;威胁到附近居民的生命财产安全。…

流媒体服务器ZLMediaKit与FFmpeg

流媒体服务器ZLMediaKit与FFmpeg overview 关键字&#xff1a;ZLMediaKit、FFmpeg、srt、vlc 如果想快速拥有自己的流媒体服务器&#xff0c;那么可以使用开源项目自己搭建。开源的流媒体服务器&#xff0c;在国内&#xff0c;GitHub star数量比较高的&#xff1a;srs和ZLMe…

116基于matlab的盲源信号分离

基于matlab的盲源信号分离。FASTICA方法&#xff0c;能够很好的将信号解混&#xff0c;可以替换数据进行分析。具有GUI界面&#xff0c;可以很好的进行操作。程序已调通&#xff0c;可直接运行。 116matlab盲源信号分离FASTICA (xiaohongshu.com)

Linux Debian12安装和使用ImageMagick图像处理工具 常见图片png、jpg格式转webp格式

一、ImageMagick简介 ImageMagick是一套功能强大、稳定而且免费的工具集和开发包。可以用来读、写和图像格式转换&#xff0c;可以处理超过100种图像格式&#xff0c;包括流行的TIFF, JPEG, GIF, PNG, PDF以及PhotoCD等格式。对图片的操作&#xff0c;即可以通过命令行进行&am…

uni-app page新建以及page外观配置

锋哥原创的uni-app视频教程&#xff1a; 2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中...共计23条视频&#xff0c;包括&#xff1a;第1讲 uni…

uniapp框架——vue3+uniFilePicker+fastapi实现文件上传(搭建ai项目第二步)

文章目录 ⭐前言&#x1f496; 小程序系列文章 ⭐uni-file-picker 组件&#x1f496; 绑定事件&#x1f496; uploadFile api&#x1f496; 自定义上传 ⭐后端fastapi定义上传接口⭐uniapp开启本地请求代理devServer⭐前后端联调⭐总结⭐结束 ⭐前言 大家好&#xff0c;我是ym…

geemap学习笔记037:分析地理空间数据--坐标格网和渔网

前言 坐标格网&#xff08;Coordinate Grid&#xff09;简称“坐标网”&#xff0c;是按一定纵横坐标间距&#xff0c;在地图上划分的格网&#xff0c;坐标网是任何地图上不可缺少的要素之一。下面将详细介绍一下坐标格网和渔网。 1 导入库并显示地图 import ee import geem…

还在为远程访问一个内网的服务发愁?

下载地址 Windows 64位 (切勿直接在压缩文件中操作,全部解压到一处后再操作,请关闭某60(会胡乱拦截),可用其他任意安全软件)Mac OS X 64位 (给fastnat执行权限 chmod x ./fastnat.. 终端运行二进制,自行百度)Linux 64位 (给fastnat执行权限 chmod x ./fastnat..)Linux/ARM 32位…

Linux操作系统极速入门[常用指令](安装jdk,MySQL,nginx),以及在linux对项目进行部署。

linux概述&#xff1a; Linux是一套免费使用和自由传播的操作系统 我们为什么要学&#xff0c;Linux&#xff1f; 主流操作系统&#xff1a; linux系统版本&#xff1a; 内核版&#xff1a; 由linux核心团队开发&#xff0c;维护 免费&#xff0c;开源 负责控制硬件 发行版&…

【 C语言 】| C程序百例 - 绘制余弦曲线

【 C语言 】| C程序百例 - 绘制余弦曲线 时间&#xff1a;2023年12月29日12:56:29 文章目录 【 C语言 】| C程序百例 - 绘制余弦曲线1.要求2.问题分析与算法设计3.程序3-1.源码3-2.makefile 4.运行 1.要求 在屏幕上用"*"显示0~360的余弦曲线cos(x)曲线。 2.问题分析与…

【C++】vector 基本使用(详解)

目录 一&#xff0c;vector 的介绍 二&#xff0c;vector 的定义 1&#xff0c;vector() 2&#xff0c;vector&#xff08;size_type n, const value_type& val value_type()&#xff09; 3&#xff0c;vector (const vector& x) 4&#xff0c;vector (InputIte…

播放海康摄像头直播流使用笔记

1、将海康摄像头绑定到萤石云平台&#xff0c;并查看直播流 2、项目中使用 1、安装hls cnpm i hls.js 2、封装组件&#xff08;在components文件夹下新建bodyCapture文件夹下index.vue&#xff09; <template><el-dialogtitle"遗体抓拍"class"bo…

git 常用基本命令, reset 回退撤销commit,解决gitignore无效,忽略记录或未记录远程仓库的文件,删除远程仓库文件

git 基本命令 reset 撤销commit https://blog.csdn.net/a704397849/article/details/135220091 idea 中 rest 撤销commit过程如下&#xff1a; Git -> Rest Head… 在To Commit中的HEAD后面加上^&#xff0c;点击Reset即可撤回最近一次的尚未push的commit Reset Type 有三…

Unity 旋转跟随

Unity 使用任意一个局部轴指向目标 效果&#xff1a; 主要用于在编辑器中可视化对象的朝向&#xff0c;同时提供了选择不同轴向的功能。在运行时&#xff0c;物体将根据所选择的轴向朝向目标&#xff0c;并在 Scene 视图中绘制一个带箭头的圆环。 定义轴向枚举&#xff1a;…

学python用哪本书比较好,学python应该买什么书

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;学python用哪本书比较好&#xff0c;学python应该买什么书&#xff0c;今天让我们一起来看看吧&#xff01; 文章目录 一、Python 基础 01-《Python编程&#xff1a;从入门到实践&#xff08;第2版&#xff09;》02-《P…