UML类图(二)
相信希望,相信自己
上一章简单介绍了 设计模式的原则(一), 如果没有看过,请观看上一章
本文参考文章: 常见UML符号详解
UML (Unified modeling language) 统一建模语言,是一种用于软件系统分析和设计的语言工具,
它用于帮助软件开发人员进行思考和记录思路的结果。
一. UML 类图描述
如:
一.一. 修饰符
修饰符有 public private protected
其中,
public 用 + 号表示 (sex属性)
private 用 - 号表示 (name属性)
protected 用 # 表示 (age 属性)
一.二 类
单个类图,一般分三层,第一层表示类的名称;第二层表示类的特性,通常就是字段和属性;第三层是类的操作,通常是方法或行为
一.三 接口
接口类似单个类图也分三层,第一层表示接口的名称;第二层表示接口的特性,通常就是字段;第三层是接口的操作,通常是方法或行为。
接口表示方式有两种
- 顶部有 <>显示:如IFly接口
- 棒棒糖表示法:如Swim接口
一.四 字段
表示方式:修饰符 字段名:字段类型
例如:
- - name:String
- + sex:String
- # age:int
一.五 方法
表示方式:修饰符 方法名(参数类型 参数):返回值类型
例如:
- - think():void
- # work(int type): void
- + playGame(int type): String
二. 相互关系
UML 本身是一套符号的支付宝, 就像数学符号和化学符号一样,这些符号用于描述软件模型中的各个元素和他们之间的关系,
比如, 类,接口,实现,泛化,依赖,组合,聚合等。
继承(extends),实现(implement),关联(Association),聚合(Aggregation),合成(Composition),依赖(Dependency)。
二.一 依赖(Dependency)
定义:
- 依赖是单向的,通常以方法参数的形式、局部变量的形式,及对静态方法调用的形式出现
代码体现:方法参数,局部变量,静态方法
表示方式:
虚线箭头来表示
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;}
}
依赖,是只要两个类有联系, 成员变量,方法参数, 方法返回值, 方法内变量(不遵守 迪米特法则时) 都属于 依赖
二.二 继承 (extends)
继承有的文章使用泛化(Generalization)来表示。
定义:
- 接口与接口之间的继承关系
- 类与类之间的继承关系
表示方式:
带三角箭头的实线空心三角形,箭头指向父类
如果 A extends B, 那么就说 A 和 B 之间存在泛化关系。
@Data
public class Student extends Person{}
二.三 实现(implement)
定义:
- 类对接口的实现关系
表示方式:
带三角箭头的虚线,箭头指向接口
如果 A 类 implements B 接口, 那么就是实现
public interface PersonService {}public class PersonServiceBean implements PersonService{}
二.四 关联关系(Association)
定义:
- 是一种拥有的关系,它使一个类知道另一个类的属性和方法,当一个类‘知道’另一个类时,我们可以说它们之间相互关联;
- 双向关联:可以有两个箭头或者没有箭头(不推荐);
- 单向关联:有一个箭头,且箭头方向指向被关联的对象;
代码体现:成员变量
表示方式:
实线箭头,且箭头指向被拥有者
关联关系实际上就是类与类之间的联系,是依赖关系的特例。
相比于依赖关系, 它具有导航性: 有双向关系 或者单向关系
关系有多重性: 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;
}
二.四.一 聚合关系 (Aggregation)
定义:
- 一种弱的‘拥有’关系,体现的是 A 对象可以包含 B 对象,但 B 对象不是 A 对象的一部分;
- 整体与部分的关系,如文学俱乐部全体成员与文学俱乐部成员
代码体现:成员变量
表示方式:
带空心菱形的实心线,菱形指向整体
聚合关系 表示的是整体和部分的关系, 整体与部分可以分开。
聚合关系是关联关系的特例, 所以他具有关联的导航性和多重性。
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;}
}
二.四.二 合成关系(Composition)
定义:
- 一种强的‘拥有’关系,体现了部分与整体的关系,它们拥有相同的生命周期
代码体现:成员变量
表示方式:
带实心菱形的实线,菱形指向整体
如: 人 和头
@Data
public class Person {private IDCard idCard;// 不可以分割,在成员变量时,直接构造。private Head head = new Head();
}
二.五 关系图
强弱顺序:
继承=实现>组合>聚合>关联>依赖
这些之间的关系图大概是这样:
本章节的代码放置在 github 上:
https://github.com/yuejianli/DesignPattern/tree/develop/UML
谢谢您的观看,如果喜欢,请关注我,再次感谢 !!!
相关文章:
UML类图(二)
相信希望,相信自己 上一章简单介绍了 设计模式的原则(一), 如果没有看过,请观看上一章 本文参考文章: 常见UML符号详解 UML (Unified modeling language) 统一建模语言,是一种用于软件系统分析和设计的语言工具, 它用于帮助软件开发人员进行…...
【IoU全总结】GIoU, DIoU, CIoU, EIoUFocal, αIoU, SIoU,WIoU【基础收藏】
🥑 Welcome to Aedream同学 s blog! 🥑 并不存在效果一定优秀的IoU,需要结合自己的网络、数据集试验。 不想深究原理可直接跳转总结。文内公式均为手打,非图片,方便查看 文章目录 L1 Loss,L2Loss࿰…...
docker 安装 mysql
第一步,安装docker ,确保centos环境符合要求,有网 yum install docker -y 第二步:拉取mysql 首先可以先查询支持的mysql: search # 拉取镜像 docker pull mysql # 或者 docker pull mysql:latest # 以上两个命令是一致的&…...
Java 流程控制之 for 循环
Java语言中的for循环是一种常用的循环结构,用于重复执行一段代码,直到指定的条件不再成立。在本篇博客中,我们将深入探讨Java中的for循环,包括其语法、用法和示例。 一、for循环的基本语法 for循环的基本语法如下: …...
Kubernetes那点事儿——暴露服务之Ingress
Kubernetes那点事儿——暴露服务之Ingress 前言一、ingress负载均衡器Ingress Controller路由规则Ingress 二、Ingress Controller三、案例 前言 在 k8s 集群中,如果我们将服务暴露出来,提供访问,可以使用Nodeport方式,但是Nodepo…...
八股文总结
文章目录 项目介绍1.不动产项目项目难点机器学习算法调研图像提取算法调研数据集-ImageNetXceptionVGGInceptionDensenetMobilenet 系统流程图 2.图书项目技术栈ShiroMybatisMyBatis:Mybatis Plus: 面试问题 Java基础基本数据类型反射接口和抽象类异常代理模式1. 静态代理2. 动…...
【浅学 MyBatis 】
MyBatis 笔记记录 一、MyBatis基础1. MyBatis介绍及快速入门2. 相关API介绍2.1 Resources2.2 SqlSessionFactory&&SqlSessionFactoryBuilder2.3 SqlSession 3. 映射配置文件4. 核心配置文件4.1 规范写法4.2 参数和返回类型_起别名 5. 引入Log4j 二、MyBatis进阶1. 接口…...
Windows版Redis安装
最近电脑重装了系统,很多常用的软件、应用都没有了,所以需要重新装,所以想借此机会把一些安装比较复杂的应用的安装过程,重新记录一下,方便后续, 安装 Redis默认只有Linux的版本,但是微软为了更…...
Flume面试题二十道
什么是Apache Flume? 参考答案:Apache Flume是一个可靠、分布式、可扩展的日志收集和聚合系统。它用于将大量的日志数据从不同的源(如Web服务器、应用程序日志)传输到目标(如Hadoop、HBase)中进行存储和分析…...
单链表OJ题:LeetCode--138.复制带随即指针的链表
朋友们、伙计们,我们又见面了,本期来给大家解读一下LeetCode中第138道单链表OJ题,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! 数据结构与算法专栏:数据结构与算法 个 人…...
Chapter7: SpringBoot与数据访问
尚硅谷SpringBoot顶尖教程 1. JDBC 1.1 依赖及配置 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency><groupId>mysql</groupId…...
【Sqlite3】maraidb和sqlite3部分命令操作区别
maraidb和sqlite3部分命令操作区别记录 1.安装sqlite3 在实现我的视频点播系统项目时,我尝试封装了两种数据库的调用逻辑 mysql(maraidb)sqlite3 这里封装sqlite3的原因是,sqlite3主要针对的就是嵌入式数据库,其性能…...
Linux中新建用户使用sudo问题
文章目录 sudo问题 sudo问题 sudo:权限提示指令,当使用sudo这条指令时,会将普通用户的权限提升为root权限 但是在命令行新建用户,这个用户使用sudo指令对一条指令提权是用不了的 这个用户没有在sudoers file这个文件中ÿ…...
Sentinel源码分析-ProceesorSlotChain调用链及树状资源节点
Sentinel 实现流控,隔离,降级等功能,本质要做两件事: 数据统计: 统计某个资源的访问数据(QPS,RT(响应时间),异常比例)等信息规则判断: 判断流控规…...
springboot 连接 kafka集群(kafka版本 2.13-3.4.0)
springboot 连接 kafka集群 一、环境搭建1.1 springboot 环境1.2 kafka 依赖 二、 kafka 配置类2.1 发布者2.1.1 配置2.1.2 构建发布者类2.1.3 发布消息 2.2 消费者2.2.1 配置2.2.2 构建消费者类2.2.3 进行消息消费 一、环境搭建 1.1 springboot 环境 JDK 11 Maven 3.8.x spr…...
Nacos配置中心使用(Spring Cloud版)
目标 向项目中集成Nacos配置。原项目是一个SpringBoot项目。这里假设我们无法修改原有项目的SpringBoot版本。 注意 在不动SpringBoot版本的前提下,根据SpringBoot的版本,确定Spring Cloud和Nacos版本。Nacos版本其实就是Spring Cloud Alibaba版本。在…...
STM32F407硬件I2C实现MPU6050通讯(CUBEIDE)
STM32F407硬件I2C实现MPU6050通讯 文章目录 STM32F407硬件I2C实现MPU6050通讯cubeide设置写操作与读操作函数实现复位,读取温度,角度等函数封装mpu6050.cmpu6050.h代码分析 DMP移植1.修改头文件路径为自己的头文件路径2.修改I2C读写函数为自己mcu平台的读…...
HTML5 语义元素(一)页面结构
本篇主要介绍HTML5增加的语义元素中关于页面结构方面的,包含: <article>、<aside>、<figure>、<figcaption>、<footer>、<header>、<main>、<nav>、<section>等元素。 目录 1. 语义元素介绍 1.…...
嵌套滚动实践:onInterceptTouchEvent与NestedScrolling【实用为准】
嵌套滚动:内外两层均可滚动,比如上半部分是一个有限的列表,下半部分是WebView,在内层上半部分展示到底的时候,外部父布局整体滚动内部View,将底部WevView拉起来,滚动到顶部之后再将滚动交给内部…...
Redis入门 - 5种基本数据类型
原文首更地址,阅读效果更佳! Redis入门 - 5种基本数据类型 | CoderMast编程桅杆https://www.codermast.com/database/redis/five-base-datatype.html 说明 在我们平常的业务中基本只会使用到Redis的基本数据类型(String、List、Hash、Set、…...
mybatis-plus用法(一)
MyBatis-plus 是一款 Mybatis 增强工具,用于简化开发,提高效率。下文使用缩写 mp来简化表示 MyBatis-plus,本文主要介绍 mp 整合 Spring Boot 的使用。 (5条消息) mybatis-plus用法(二)_渣娃工程师的博客-CSDN博客 1…...
源码安装包管理
1. 源码包基本概述 在linux环境下面安装源码包是比较常见的, 早期运维管理工作中,大部分软件都是通过源码安装的。那么安装一个源码包,是需要我们自己把源代码编译成二进制的可执行文件。 源码包的编译用到了linux系统里的编译器,通常源码包…...
Vue|获取表单数据
在Vue中获取表单数据有多种方式,具体取决于你使用的是哪种表单元素和你的需求。 1. 单个表单元素: 如果你只需要获取单个表单元素的值,可以使用v-model指令将表单元素的值绑定到Vue实例的一个属性上。例如: <input type&quo…...
微信小程序入门学习02-TDesign中的自定义组件
目录 1 显示文本2 自定义组件3 变量定义4 值绑定总结 我们上一篇讲解了TDesign模板的基本用法,如何开始阅读模板。本篇我们讲解一下自定义组件的用法。 1 显示文本 官方模板在顶部除了显示图片外,还显示了一段文字介绍。文字是嵌套在容器组件里…...
【linux kernel】linux media子系统分析之media控制器设备
文章目录 一、抽象媒体设备模型二、媒体设备三、Entity四、Interfaces五、Pad六、Link七、Media图遍历八、使用计数和电源处理九、link设置十、Pipeline和Media流十一、链接验证十二、媒体控制器设备的分配器API 本文基于linux内核 4.19.4,抽象媒体设备模型框架的相…...
Scala--03
第6章 面向对象 Scala 的面向对象思想和Java 的面向对象思想和概念是一致的。 Scala 中语法和 Java 不同,补充了更多的功能。 6.1类和对象详解 6.1.1组成结构 构造函数: 在创建对象的时候给属性赋值 成员变量: 成员方法(函数) 局部变量 代码块 6.1.2构造器…...
【MongoDB】--MongoDB高级功能
目录 一、前言二、聚合管道aggregate1、示例说明2、具体代码实现一、前言 这里主要记录mongodb一些高级功能使用,如聚合。 二、聚合管道aggregate 聚合操作将来自多个文档的值组合在一起,并且可以对分组数据执行各种操作以返回单个结果,主要用于处理数据(诸如统计平均值,…...
C# new与malloc
目录 C# new与malloc C# new与malloc的区别 C# new关键字底层做的操作 C# new与malloc new关键字: new关键字在C#中用于实例化对象,并为其分配内存。它是面向对象编程的基本操作之一。使用new关键字可以在托管堆上分配内存,同时调用对象的构…...
微软MFC技术简明介绍
我是荔园微风,作为一名在IT界整整25年的老兵,今天来看一下微软MFC技术简明介绍 Visual C 与 MFC 微软公司于1992年上半年推出了C/C 7.0 产品时初次向世人介绍了MFC 1.0,这个产品包含了20,000行C原始代码,60个以上的Windows相关类…...
汽车电子Autosar之车载以太网
前言 近些年来,随着为了让汽车更加安全、智能、环保等,一系列的高级辅助驾驶功能喷涌而出。未来满足这些需求,就对传统的电子电器架构带来了严峻的考验,需要越来越多的电子部件参与信息交互,导致对网络传输速率&#x…...
网络营销外包公司招聘/网站关键字排名优化
M1相二氧化钒VO2单晶薄膜 钒氧化物高质量外延单晶薄膜 钒氧化物是一种极其复杂的金属氧化物,且具有丰富的相结构,每一种相都有其独特的用途,如VO2高温R相到低温M相之间发生结构转变同时伴随着4-5量级的电阻率变化,高温下的VO2薄膜…...
做网站外包的公司好干嘛/免费seo排名软件
1.查看是否已经安装过mysql数据库 命令:rpm -qa|grep -i mysql可以看到现在环境下已经安装了mysq5.1.13的版本2、停止mysql服务、删除之前安装的mysql 删除命令:rpm -e -nodeps 包名如果提示依赖包错误,则使用以下命令尝试rpm -ev 包名 --nod…...
网站开发学哪种语言/今日最新消息新闻报道
用CSS的expression判断表达式设置input样式,简单,轻量级。缺点在于expression判断表达式FireFox是不支持的。致命的是只能区分出一个(例如例子中就只能区分出text文本框),不要试图设置多个…代码:复制代码代码如下:www.52CSS.comi…...
用html5做的网站源码/十大经典口碑营销案例
微软推出了两个新的Windows API,以帮助驱动程序开发人员创建更安全的软件。微软已经详细说明了其消除未初始化内存问题的下一步,这次针对的是为Windows构建硬件驱动程序的开发人员使用的未初始化内核池内存。据微软安全响应中心(MSRC)的安全工程师Joe Bi…...
o2o网站建设行业现状/四川seo多少钱
系统要求及安装前的说明 Oracle GoldenGate可以在Oracle不同版本间移动数据,也可以在Oracle和其它类型数据库之间移动数据。Oracle GoldenGate支持数据的过滤、映射和转换。Oracle还能在相似的Oracle数据库之间复制DDL操作。注意下面一句:当DDL支持被激…...
高大上的自助建站网站/tool站长工具
目录一、本地运行模式1. 主要项目结构:2. 配置pom.xml引入需要的jar包3. Map过程4. Reduce过程5. 核心类Driver:二、集群运行模式:1. 打包项目为jar包2. 上传打包的项目jar包到data目录下3. 运行项目jar包一、本地运行模式 1. 主要项目结构&…...