UML类图(二)

news2024/11/19 19:41:46

相信希望,相信自己

上一章简单介绍了 设计模式的原则(一), 如果没有看过,请观看上一章

本文参考文章: 常见UML符号详解

UML (Unified modeling language) 统一建模语言,是一种用于软件系统分析和设计的语言工具,
它用于帮助软件开发人员进行思考和记录思路的结果。

一. UML 类图描述

如:

image-20230613102133200

一.一. 修饰符

修饰符有 public private protected

其中,

public 用 + 号表示 (sex属性)

private 用 - 号表示 (name属性)

protected 用 # 表示 (age 属性)

一.二 类

单个类图,一般分三层,第一层表示类的名称;第二层表示类的特性,通常就是字段和属性;第三层是类的操作,通常是方法或行为

image-20230613102133200

一.三 接口

接口类似单个类图也分三层,第一层表示接口的名称;第二层表示接口的特性,通常就是字段;第三层是接口的操作,通常是方法或行为。

接口表示方式有两种

  • 顶部有 <>显示:如IFly接口
  • 棒棒糖表示法:如Swim接口

image-20230613102643744

一.四 字段

表示方式:修饰符 字段名:字段类型

例如:

  • - name:String
  • + sex:String
  • # age:int

一.五 方法

表示方式:修饰符 方法名(参数类型 参数):返回值类型

例如:

  • - think():void
  • # work(int type): void
  • + playGame(int type): String

二. 相互关系

UML 本身是一套符号的支付宝, 就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和他们之间的关系,
比如, 类,接口,实现,泛化,依赖,组合,聚合等。

继承(extends),实现(implement),关联(Association),聚合(Aggregation),合成(Composition),依赖(Dependency)。

image-20230613102914135

二.一 依赖(Dependency)

定义:

  • 依赖是单向的,通常以方法参数的形式、局部变量的形式,及对静态方法调用的形式出现

代码体现:方法参数,局部变量,静态方法

表示方式:

虚线箭头来表示

image-20230613104827738

public class PersonServiceBean {
    private PersonDao personDao;

    public void save(Person person) {

    }

    public IDCard getIdCard(Integer personId){
        return new IDCard();
    }

    public Dept getDept() {
        Dept dept = new Dept();
        return dept;
    }
}

依赖,是只要两个类有联系, 成员变量,方法参数, 方法返回值, 方法内变量(不遵守 迪米特法则时) 都属于 依赖

image-20230613103713588

二.二 继承 (extends)

继承有的文章使用泛化(Generalization)来表示。

定义:

  • 接口与接口之间的继承关系
  • 类与类之间的继承关系

表示方式:
带三角箭头的实线空心三角形,箭头指向父类

image-20230613104850200

如果 A extends B, 那么就说 A 和 B 之间存在泛化关系。

@Data
public class Student extends Person{

}

image-20230613103230431

二.三 实现(implement)

定义:

  • 类对接口的实现关系

表示方式:
带三角箭头的虚线,箭头指向接口

image-20230613104905073

如果 A 类 implements B 接口, 那么就是实现

public interface PersonService {
    
}


public class PersonServiceBean  implements PersonService{

}


image-20230613103454945

二.四 关联关系(Association)

定义:

  • 是一种拥有的关系,它使一个类知道另一个类的属性和方法,当一个类‘知道’另一个类时,我们可以说它们之间相互关联;
  • 双向关联:可以有两个箭头或者没有箭头(不推荐);
  • 单向关联:有一个箭头,且箭头方向指向被关联的对象;

代码体现:成员变量

表示方式:
实线箭头,且箭头指向被拥有者

image-20230613104923208

关联关系实际上就是类与类之间的联系,是依赖关系的特例。
相比于依赖关系, 它具有导航性: 有双向关系 或者单向关系
关系有多重性: 1 (有且只有1个) 0 (0个或者多个) 0,1 (0个或者1个) n…m (n到m个都可以) m…* (至少m个)

@Data
public class IDCard {
    private Person person;
}

@Data
public class Person {
    private IDCard idCard;
}

image-20230613104005402

二.四.一 聚合关系 (Aggregation)

定义:

  • 一种弱的‘拥有’关系,体现的是 A 对象可以包含 B 对象,但 B 对象不是 A 对象的一部分;
  • 整体与部分的关系,如文学俱乐部全体成员与文学俱乐部成员

代码体现:成员变量

表示方式:
带空心菱形的实心线,菱形指向整体

image-20230613104938073

聚合关系 表示的是整体和部分的关系, 整体与部分可以分开。
聚合关系是关联关系的特例, 所以他具有关联的导航性和多重性。

public class Computer {
    private Mouse mouse;
    private Monitor monitor;

    public void setMouse(Mouse mouse) {
        this.mouse = mouse;
    }

    public void setMonitor(Monitor monitor) {
        this.monitor = monitor;
    }
}

image-20230613104214648

二.四.二 合成关系(Composition)

定义:

  • 一种强的‘拥有’关系,体现了部分与整体的关系,它们拥有相同的生命周期

代码体现:成员变量

表示方式:
带实心菱形的实线,菱形指向整体

image-20230613104957272

如: 人 和头

@Data
public class Person {
   private IDCard idCard;
   
   // 不可以分割,在成员变量时,直接构造。
   private Head head = new Head();
}

image-20230613104445735

二.五 关系图

强弱顺序:

继承=实现>组合>聚合>关联>依赖

这些之间的关系图大概是这样:

image-20230613104528844


本章节的代码放置在 github 上:

https://github.com/yuejianli/DesignPattern/tree/develop/UML


谢谢您的观看,如果喜欢,请关注我,再次感谢 !!!

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

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

相关文章

强烈推荐协同办公的三个小工具

强烈推荐协同办公的三个小工具 这里给大家推荐三个可以用于协同办公的小软件工具。那么&#xff0c;什么是协同办公呢&#xff1f;直接下定义给个概念那就不好玩了&#xff0c;所以我直接推荐这么几个协同软件大家就懂了。 ONLYOFFICE办公软件 具体的软件截图我这里就不贴了&…

【Android】Frida Hook 文件读写操作

前言 在挖掘客户端漏洞的时候&#xff0c;通常会关注应用对什么文件进行了读写操作&#xff0c;当我们能控制被读的文件或观测到敏感写入的文件&#xff0c;通常可以造成一定危害。本文详细介绍了如何通过frida监控文件读写操作。 相关知识 1. 读写相关调用api 在Linux系统…

有哪些自媒体平台有播放量就会有收益?

自媒体是近年来兴起的一种新型媒体&#xff0c;指的是由个人或小团体通过互联网自行发布内容&#xff0c;通过社交媒体等渠道传播和推广的媒体形态。自媒体平台的出现&#xff0c;让更多人能够自由发表意见和观点&#xff0c;实现了信息的自由传播。同时&#xff0c;随着互联网…

跨平台.NET应用UI组件DevExpress XAF v22.2亮点 - 支持.NET 7

DevExpress XAF是一款强大的现代应用程序框架&#xff0c;允许同时开发ASP.NET和WinForms。DevExpress XAF采用模块化设计&#xff0c;开发人员可以选择内建模块&#xff0c;也可以自行创建&#xff0c;从而以更快的速度和比开发人员当前更强有力的方式创建应用程序。 在新版中…

数据结构——二叉树基础结构篇(C语言)

引言 现在是北京时间2023年6月13日9点11分。从决定要开始减脂之后&#xff0c;饥饿总是伴随着我。一觉起来肚子咕咕叫&#xff0c;我还是想先把文章发了再吃第一餐。燕麦加蛋白粉几乎伴随了我大学的第一年早饭。昨天练了一个小时背&#xff0c;练背后还做了45分钟有氧。空腹训…

BeautifulPrompt:PAI推出自研Prompt美化器,赋能AIGC一键出美图

作者&#xff1a;曹庭锋、汪诚愚、吴梓恒、黄俊 背景 Stable Diffusion&#xff08;SD&#xff09;是一种流行的AI生成内容&#xff08;AI Generated Content&#xff0c;AIGC&#xff09;模型&#xff0c;能在文字输入的基础上生成各种风格多样的图像。在目前的AIGC方向&…

十五周算法训练营——普通动态规划(上)

今天是十五周算法训练营的第十一周&#xff0c;主要讲普通动态规划&#xff08;上&#xff09;专题。&#xff08;欢迎加入十五周算法训练营&#xff0c;与小伙伴一起卷算法&#xff09; 斐波那契数 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那…

设计模式——适配器模式

1.定义 将一个类的接口转换成客户所希望的另一个接口&#xff0c;Adapter模式使得那些原本因为接口不兼容而不能一起工作的那些类可以一起工作。 2.使用场景 一般来说&#xff0c;适配器模式可以看作一种“补偿模式”&#xff0c;用来补救设计上的缺陷。应用这种模式算是“无…

驱动开发:内核LoadLibrary实现DLL注入

远程线程注入是最常用的一种注入技术&#xff0c;在应用层注入是通过CreateRemoteThread这个函数实现的&#xff0c;该函数通过创建线程并调用 LoadLibrary 动态载入指定的DLL来实现注入&#xff0c;而在内核层同样存在一个类似的内核函数RtlCreateUserThread&#xff0c;但需要…

【模型评估】AP 和他们的兄弟们:mAP、AP50、APs、APm、APl

AP是在目标检测任务中&#xff0c;尝尝被用于评估模型预测能力的指标。那AP是什么&#xff1f;为什么能够充当不同模型综合对比评测的公认指标呢&#xff1f; 在学习下文之前&#xff0c;混淆矩阵和ROC可以先了解下&#xff1a; 【模型评估】混淆矩阵&#xff08;confusion_m…

世界中西医结合医学研究院一行莅临万民健康交流指导

为进一步发展中医药产业&#xff0c;深入挖掘中医药文化&#xff0c;坚持中西医并重&#xff0c;传承精华&#xff0c;守正创新&#xff0c;助力乡村振兴、促进乡村医疗产业发展。6 月 10 日 &#xff0c; 世界中西医结合医学研究院医学工程院院士罗先义 、谈家桢生命基金会主任…

测试左移及其相关实践

本文首发于个人网站「BY林子」&#xff0c;转载请参考版权声明。 之前在《敏捷测试的核心》、《构建测试的体系化思维&#xff08;进阶篇&#xff09;》和《一页纸测试策略》等文章中提到过测试左移&#xff0c;但是没有专门针对这个主题做过系统的介绍&#xff0c;但又总是被社…

M4内核的FPU/DSP使用总结

FPU简介 近年&#xff0c;在Cortex-M3之后ARM公司又推出Cortex-M4内核&#xff0c;ARM Cortex-M4处理器是由ARM专门开发的最新嵌入式处理器&#xff0c;在M3的基础上强化了运算能力&#xff0c;新加了浮点、DSP、并行计算等。Cortex-M4处理器的最大亮点之一&#xff0c;也是本文…

dom-to-image分享多张异步图片遇到的坑

dom-to-image库 存在的问题 github-issue地址 问题&#xff1a;当超过一张图片时&#xff0c;ios/safari首次会出现某张图片空白&#xff0c;再次生成canvas才正常。 之前有一张图片时通过执行2次domtoimage.toJpeg&#xff08;魔法&#xff09;&#xff0c;当超过1张图片时&a…

JavaWeb笔记(一)

Java网络编程 在JavaSE阶段&#xff0c;我们学习了I/O流&#xff0c;既然I/O流如此强大&#xff0c;那么能否跨越不同的主机进行I/O操作呢&#xff1f;这就要提到Java的网络编程了。 **注意&#xff1a;**本章会涉及到计算机网络相关内容&#xff08;只会讲解大致内容&#x…

PyTorch 深度学习 || 专题八:PyTorch 全连接网络分类

PyTorch 全连接网络分类 文章目录 PyTorch 全连接网络分类1. 非线性二分类2. 泰坦尼克号数据分类2.1 数据的准备工作2.2 全连接网络的搭建2.3 结果的可视化 1. 非线性二分类 import sklearn.datasets #数据集 import numpy as np import matplotlib.pyplot as plt from sklear…

Java企业级信息系统开发学习笔记(4.2)Spring Boot项目单元测试、热部署与原理分析

该文章主要为完成实训任务&#xff0c;详细实现过程及结果见【http://t.csdn.cn/pG623】 文章目录 一、Spring Boot单元测试概述1.1 对项目HelloWorld01进行单元测试1. 添加测试依赖启动器和单元测试2. 创建测试类与测试方法 1.2 对项目HelloWorld02进行单元测试1. 添加单元测试…

C++冷知识:构造函数初始化时,为什么使用 : 而不是使用作用域内初始化对象?

:是什么&#xff1f; 这样的行为被称之为初始化列表。具体展示如下&#xff1a; 直接初始化对象。 以一个线程池类为例&#xff1a; class ThreadPool { public:// 构造函数&#xff0c;创建指定数量的线程ThreadPool(size_t num_threads) : stop(false){....}// 析构函数&…

【计算摄影学】总目录

1.数码相机 《数码相机中的图像传感器和信号处理》和《光与赢的魔幻乐园有趣的透镜》 1.1 数码相机概览 1.2 数码相机中光学系统 2.图像传感器 《数码相机中的图像传感器和信号处理》和《智能cmos图像传感器与应用》 2.1 图像传感器基础知识 2.2 CCD图像传感器 2.3 CMOS图像…

RankNet方法在移动终端的应用

RankNet方法在移动终端的应用 RankNet代码示例pythonJava 移动终端的应用 RankNet RankNet 是一种排序学习方法&#xff0c;由 Microsoft Research 提出&#xff0c;用于解决排序问题。它基于神经网络&#xff0c;并使用一对比较的方式来训练和优化模型。 在 RankNet 中&…