设计模式前置了解uml图

news2024/12/23 11:05:29

在开发前,会进行系统的设计,而数据模型的设计大多通过 UML 类图实现。为了在 UML 类图中清晰地表达类之间的关系,需要对类之间的关系有一定的认识,并且了解相关的表达符号。

类之间的关系有以下几种:

组合
聚合
关联
泛化
依赖

组合
什么是组合?
表示类之间整体和部分的关系,但是组合关系中部分和整体具有统一的生存期。一旦整体对象不存在,部分对象也将不存在。

举例
比如人和人的大脑,人是整体,大脑是部分,二者具有统一的生存期,整体不存在,部分也将不存在。

UML类图中符号如何表示
先忽略图中数字含义,实体菱形与整体端相连,箭头与部分连接。

在这里插入图片描述

聚合
什么是聚合?
聚合表示整体与部分的关系,并非同生共死,部分实例可以添加到聚合整体,也可以从聚合整体中移出。此时整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享。

相较于组合,聚合中整体与部分的关系更弱,更接近于"has a"。

举例
比如计算机与CPU、公司与员工的关系等,比如一个航母编队包括海空母舰、驱护舰艇、舰载飞机及核动力攻击潜艇等。

UML类图中符号如何表示
在UML类图设计中,聚合关系以空心菱形加实线箭头表示。 空心菱形与整体连接,箭头与部分连接。
在这里插入图片描述
关联
什么是关联?
是类之间的一种很弱的联系。关联可以有方向,可以是单向关联,也可以是双向关联。

分为单向关联(只是班级中增加了学生)、双向关联(在学生中也添加班级属性)
分为一对一(学生和学生证)、一对多(班级和学生)、多对多关联(学生和课程)
有两个类的关联(客户和订单、订单和商品)、还有一个类和自身关联(领导也是员工)

public class Teacher{
    //老师不会只有一个学生,得有多个。
    private Lsit<Student> student;
}
public class Student{
    //学生不会只有一个老师,得有多个。
    private Lsit<Teacher> teacher;
    //学生不会只有一门课程,得有多个。
    private Lsit<Course> course;
}
public class Course{
   
}

UML类图中符号如何表示
【箭头及指向】: 带普通箭头的实心线,指向被拥有者
在这里插入图片描述

泛化
什么是泛化?
泛化定义了一般元素和特殊元素之间的分类关系,类之间的这种泛化关系也就是继承关系。泛化关系是“a-kind-of”关系,定义一般元素和特殊元素之间的分类关系。

例如:老虎是动物的一种, 即有老虎的特性也有动物的共性。

public class Animal{
 
}
public class Tiger extends Animal{
    //继承Animal类
}

UML类图中符号如何表示
【箭头指向】:带三角箭头的实线,箭头指向父类

在这里插入图片描述
类似泛化的实现:
在这里插入图片描述
依赖
什么是依赖?
表现为函数中的参数(use a),是类与类之间的连接,表示一个类依赖于另一个类的定义,其中一个类的变化将影响另外一个类。例如如果 A 依赖于 B,则 B 体现为局部变量,方法的参数、或静态方法的调用。常见的依赖关系如下:
(1)类B以参数的形式传入类A的方法。我个人将它就取名为“参数依赖”。
(2)类B以局部变量的形式存在于类A的方法中。我个人将它就取名为“局部依赖”。
(3)类A调用类B的静态属性或方法。我个人将它就取名为“静态依赖”。

局部变量(Local Variable),是 Java 编程语言中位于代码块内的一种变量。如同对象将其状态存储在字段中那样,代码块将其临时状态存储在局部变量中。局部变量始终被归类为“变量”(而不是“字段”)。
提示:类中的方法体、构造方法体和语句中的块,都是用一对大括号 {} 括起来的零个或多个语句组,故在本文中统称为“代码块”。

UML类图中符号如何表示
UML图中实现使用一条带有箭头的虚线指向被依赖的类,如下:

在这里插入图片描述
下面这张UML图,比较形象地展示了各种类图关系:
在这里插入图片描述

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

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

相关文章

IPC:管道

一、管道的概念 1.原理 在进程3G~4G的内核空间中&#xff0c;创建一个特殊的文件&#xff08;管道&#xff09;&#xff0c;管道的数据直接保存在内存中。 2.特性 1&#xff09;管道可以看成是一个特殊的文件&#xff0c;一般的文件存储在外存中&#xff0c;而管道内容是存储…

“光谱视界革新:ChatGPT在成像光谱遥感中的智能革命“

遥感技术主要通过卫星和飞机从远处观察和测量我们的环境&#xff0c;是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型&#xff0c;在理解和生成人类语言方面表现出了非凡的能力。本文重点介绍ChatGPT在遥感中的应用&#xff0c;人工智能…

docker——启动各种服务

1.Mysql 2.Redis 3.nginx 4.ES 注意&#xff1a;ES7之后环境为 -e ELASTICSEARCH_HOSTS http://ip地址:9200

双场板功率型GaN HEMT中用于精确开关行为的电容建模

来源:Capacitance Modeling in Dual Field-Plate Power GaN HEMT for Accurate Switching Behavior (TED 16年) 摘要 本文提出了一种基于表面电势的紧凑模型&#xff0c;用于描述具有栅极和源极场板&#xff08;FP&#xff09;结构的AlGaN/GaN高电子迁移率晶体管&#xff08;…

在OpenStack架构中,Controller节点的配置(基础)

虚拟机的安装 新建虚拟机&#xff0c;选择自定义 默认选择即可 操作系统的镜像稍后选择 客户及操作系统选择Linux&#xff0c;注意选择centos 7 64位 给虚拟机命名 处理器的配置建议1&#xff1a;2 内存大小选择建议为&#xff1a;4GB 网络连接选择为&#xff1a;NAT 默认即可…

Redis底层核心对象RedisObject源码分析

文章目录 1. redis底层数据结构2. 插入KV底层源码流程分析 1. redis底层数据结构 redis 6数据结构和底层数据结构的关系 String类型本质是SDS动态字符串&#xff0c;即redis层面的数据结构底层会有对应的数据结构实现&#xff0c;上面是redis 6之前的实现 redis 7数据结构和底…

如何保证消息的顺序性

先看看顺序会错乱的场景&#xff1a;RabbitMQ&#xff1a;一个 queue&#xff0c;多个 consumer&#xff0c;这不明显乱了&#xff1a; 解决方案&#xff1a;

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的番茄新鲜程度检测系统(深度学习+UI界面+训练数据集)

摘要&#xff1a;本研究详述了一种采用深度学习技术的番茄新鲜程度检测系统&#xff0c;该系统集成了最新的YOLOv8算法&#xff0c;并与YOLOv7、YOLOv6、YOLOv5等早期算法进行了性能评估对比。该系统能够在各种媒介——包括图像、视频文件、实时视频流及批量文件中——准确地识…

智能泵站智能运维系统

在现代化城市建设和工农业发展中&#xff0c;泵站作为关键的水利设施&#xff0c;其运行效率和稳定性至关重要。然而&#xff0c;传统的泵站运维方式往往依赖于人工巡检和定期维护&#xff0c;这种方式不仅效率低下&#xff0c;而且难以应对突发状况。随着物联网技术的飞速发展…

支小蜜校园防欺凌系统真的能有效遏制欺凌现象吗?

随着社会的快速发展&#xff0c;校园欺凌问题逐渐浮出水面&#xff0c;引起了广泛关注。为了应对这一问题&#xff0c;校园防欺凌系统应运而生&#xff0c;旨在通过一系列措施&#xff0c;有效遏制欺凌现象的发生。然而&#xff0c;这一系统是否真的能够如预期般发挥作用&#…

软考高项(信息系统项目管理师)备考一、介绍

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

Cassandra 安装部署

文章目录 一、概述1.官方文档2. 克隆服务器3.安装准备3.1.安装 JDK 113.2.安装 Python3.3.下载文件 二、安装部署1.配置 Cassandra2.启动 Cassandra3.关闭Cassandra4.查看状态5.客户端连接服务器6.服务运行脚本 开源中间件 # Cassandrahttps://iothub.org.cn/docs/middleware/…

干货!不懂Python的math模块和random模块操作还不赶紧来学!

1.导入math模块 import math 2.向上取整&#xff1a;math.ceil() num 9.12print(math.ceil(num)) # 10 3.向下取整&#xff1a;math.floor() num1 9.99print(math.floor(num1)) # 9 4.开平方&#xff1a;math.sqrt()​​​​​​​ num2 16print(math.sqrt(num…

Python程序控制

一、程序的描述方式 1.1自然语言 &#xff08;1&#xff09;概念&#xff1a;自然语言就是使用人类语言、直接描述程序 &#xff08;2&#xff09;比如&#xff1a;之前提过的Input&#xff08;输入&#xff09;、Process&#xff08;处理&#xff09;、Output&#xff08;输…

RabbitMQ - 02 - 基本消息模型

目录 部署demo项目 什么是基本消息模型 实现基本消息模型 部署demo项目 首先配置好一个mq的练习demo,并配置好相关依赖 链接&#xff1a;https://pan.baidu.com/s/1oXAqgoz9Y_5V7YxC_rLa-Q?pwdv2sg 提取码&#xff1a;v2sg 如图 父xml文件已经配置好了 AMQP依赖了 什么…

1.Python是什么?——跟老吕学Python编程

1.Python是什么&#xff1f;——跟老吕学Python编程 Python是一种什么样的语言&#xff1f;Python的优点Python的缺点 Python发展历史Python的起源Python版本发展史 Python的价值学Python可以做什么职业&#xff1f;Python可以做什么应用&#xff1f; Python是一种什么样的语言…

【Java从入门到精通】Java异常处理

异常是程序中的一些错误&#xff0c;但并不是所有的错误都是异常&#xff0c;并且错误有时候是可以避免的。 比如说&#xff0c;你的代码少了一个分号&#xff0c;那么运行出来结果是提示是错误 java.lang.Error&#xff1b;如果你用System.out.println(11/0)&#xff0c;那么…

Linux 安装Nginx (Nginx-1.25.4)

一、下载Nginx安装包 1.服务器联网的情况下&#xff0c;使用wget命令把Nginx安装包下载到/usr/local/目录中&#xff0c;如果没有wget命令&#xff0c;需要先安装&#xff1a;yum install -y wget cd /usr/local wget -c https://nginx.org/download/nginx-1.25.4.tar.gz ng…

AndroidStudio设计登录页源码(音悦app)

目录 一、代码 二、效果 一、代码 1.在activity_main.xml里的代码 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent&quo…

elementUi中表格超出一行省略,鼠标放入显示完整提示

一、想要的效果 二、代码&#xff0c;加入show-overflow-tooltip即可 <el-table-column min-width"220" prop"content" show-overflow-tooltip> </el-table-column>