【UML】详解UML类图

目录

1.概述

2.权限

3.关系

3.1.连线关系

3.2.依赖

3.3.泛化(继承)

3.4.实现

3.5.关联

3.6.聚合

3.7.组合


1.概述

UML是什么?书面化一点的说法是:

UML(Unified Modeling Language),统一建模语言,是一种用于软件工程和系统设计的标准图形化建模语言。它旨在帮助开发人员、设计师和分析师在软件开发过程中更好地理解、设计、交流和文档化系统。UML提供了一组图形符号和规则,可以用于表示软件系统的各个方面,从需求分析到系统设计、实现和测试。

直白点说人话就是:

UML用图形和符号的方式来帮助描述软件系统,让人更加容易看懂整个系统是什么样子的。

正如我们知道的,软件系统是很庞大且复杂的一个东西,想要描述清楚,肯定不可能是一个维度就能描述的很准确,所以UML从几种维度,每个维度提出了一系列的图来用于描述软件系统,包括:

  1. 用例图
  2. 静态结构
    1. 类图
    2. 组件图
    3. 部署图
  3. 动态行为
    1. 状态图
    2. 活动图
    3. 时序图

以上的图在各类型的软件系统的规范化描述中用到的频率都很高,但是不一定都会用到,选取其中需要的图来描述清楚系统即可。这其中UML的类图,是最为常用的,因为描述类关系就是描述好实体间的关系,在当今面向对象的设计和编程为主的系统开发中,这是基础中的基础。本文将先讲UML类图,下一篇文章会一起讲其它的图。

UML类图总结起来就是,提供了一套图形和符号的标准,用来描述系统中各个类之间的关系,以及它们的属性和方法。

2.权限

UML类图中以符号的方式来描述访问权限,有以下权限:

权限符号说明
public+公用的,该属性对所有类可见

protected

#

受保护的,对该类的子孙可见

private 

-私有的,只对该类本身可见

package

~

包的,只对同一包声明的其他类可见

3.关系

3.1.连线关系

3.2.依赖

A类中使用到了B类,A和B就产生了依赖关系,下面以一个常见的service中调用dao为例:

public class UserServiceImpl{private UserDao userDao;public User queryById(int id) {return null;}
}

3.3.泛化(继承)

泛化其实指的是is a的关系,A is a B,A和B之间就是泛化关系,在面向对象的编程里,只有继承才能实现这种效果,所以泛化可以理解为就是继承。

public class BaseDao {protected void insert(User user){};protected void delete(User user){};protected void update(User user){};protected void query(User user){};
}
public class UserDao extends BaseDao{User queryById(int id){return null;}
}

3.4.实现

实现是继承的特例:

接口:

public interface UserService {User queryById(int id);
}

 实现类:

public class UserServiceImpl implements UserService{private UserDao userDao;@Overridepublic User queryById(int id) {return userDao.queryById(id);}
}

3.5.关联

关联关系,即类与类之间的联系,是依赖关系的特例。

这就是一种关联关系:

 为什么说是依赖关系的特例喃,是因为要实现一个driver驾驶一辆car,那么肯定是要driver类持有一个car对象,也就是依赖一个car。其实关联关系也可以用依赖关系的箭头来替代,只是用关联关系表示,能将实体在业务上的关系描述的更清楚,所以到底是用依赖关系表示还是关联关系表示,这个具体情况具体抉择。

3.6.聚合

 聚合关系是依赖关系的特例,依赖之间可以分开,即被依赖的类和依赖它的类不同生共死,也就是说被依赖的类的实体需要从外界传入。

3.7.组合

组合关系是依赖关系的特例,依赖之间不可以分开,即被依赖的类和依赖它的类同生共死,也就是说被依赖的类的实体就在依赖它的实体内部生老病死,不需要从外界传入。

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MaxKey对接一】对接gitlab的oauth登录

MaxKey的Oauth过程 引导进入 GET http://{{maxKey_host}}/sign/authz/oauth/v20/authorize?client_idYOUR_CLIENT_ID&response_typecode&redirect_uriYOUR_REGISTERED_REDIRECT_URI 登录后回调地址 YOUR_REGISTERED_REDIRECT_URI/?code{{code}} 换取Access Token GET…

简单认识镜像底层原理详解和基于Docker file创建镜像

文章目录 一、镜像底层原理1.联合文件系统(UnionFS)2.镜像加载原理3.为什么Docker里的centos的大小才200M? 二、Dockerfile1.简介2.Dockerfile操作常用命令 三、创建Docker镜像1.基于已有镜像创建2.基于本地模板创建3.基于Dockerfile创建4.Dockerfile多阶段构建镜像 一、镜像底…

Leetcode Top 100 Liked Questions(序号53~74)

53. Maximum Subarray 题意:一个数组,找到和最大的子串 我的思路 我记得好像On的动态规划来做的?但是想不起来了,先死做,用的前缀和——TLE超时 那就只能想想dp怎么做了 假设dp[i]表示的是以 i 为右端点的最大的…

【数据结构入门指南】二叉树顺序结构: 堆及实现(全程配图,非常经典)

【数据结构入门指南】二叉树顺序结构: 堆及实现(全程配图,非常经典) 一、前言:二叉树的顺序结构二、堆的概念及结构三、堆的实现(本篇博客以实现小堆为例)3.1 准备工作3.2 初始化3.3 堆的插入3.3.1 向上调…

prometheus blackbox_exporter安装

目录 一、准备工作1.1 安装或关闭以下服务1.2 本次安装环境 二、安装blackbox_exporter2.1 下载并解压2.2配置2.3测试 三、配置blackbox_exporter3.1配置blackbox.yml3.2 开启blackbox_exporter3.3配置prometheus.yml 四、其他4.1server returned HTTP status 400 Bad Request …

webpack 和 ts 简单配置及使用

如何使用webpack 与 ts结合使用 新建项目 ,执行项目初始化 npm init -y会生成 {"name": "tsdemo01","version": "1.0.0","description": "","main": "index.js","scripts&…

基于飞蛾扑火算法优化的BP神经网络(预测应用) - 附代码

基于飞蛾扑火算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于飞蛾扑火算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.飞蛾扑火优化BP神经网络2.1 BP神经网络参数设置2.2 飞蛾扑火算法应用 4.测试结果:5…

【docker】基于dockerfile编写LNMP

目录 一、基础环境准备 二、部署nginx(容器IP为172.18.0.10) 1、整个Dockerfile文件内容 2、配置nginx.conf文件 3、构建镜像 ​编辑 三、部署mysql 1、整个Docker文件内容 2、准备my.conf文件 3、生成镜像 4、启动镜像容器 5、验证mysql 四、PH…

应用层读取wfp防火墙阻断记录

前言 之前的文档中,描写了如何对WFP防火墙进行操作[链接在此],这篇文档中,描述如何获取WFP防火墙进行阻断的操作记录。 需要注意的坑点 使用FWPM_NET_EVENT_TYPE获取防火墙日志时,需要注意,只有丢弃和内核丢弃&…

Php“牵手”淘宝商品详情页数据采集方法,淘宝API接口申请指南

淘宝天猫详情接口 API 是开放平台提供的一种 API 接口,它可以帮助开发者获取商品的详细信息,包括商品的标题、描述、图片等信息。在电商平台的开发中,详情接口API是非常常用的 API,因此本文将详细介绍详情接口 API 的使用。 一、…

Linux Kernel 4.12 或将新增优化分析工具

到 7 月初,Linux Kernel 4.12 预计将为修复所有安全漏洞而奠定基础,另外新增的是一个分析工具,对于开发者优化启动时间时会有所帮助。 新的「个别任务统一模型」(Per-Task Consistency Model)为主要核心实时修补&#…

js简介以及在html中的2种使用方式(hello world)

简介 javascript :是一个跨平台的脚本语言;是一种轻量级的编程语言。 JavaScript 是 Web 的编程语言。所有现代的 HTML 页面都使用 JavaScript。 HTML: 结构 css: 表现 JS: 行为 HTMLCSS 只能称之为静态网页&#xff0…

【腾讯云 TDSQL-C Serverless 产品测评】全面测评TDSQL-C Mysql Serverless

全面测评TDSQL-C Mysql Serverless 文章目录 全面测评TDSQL-C Mysql Serverless前言什么是TDSQL-C Mysql Serverless初始化 TDSQL-C Mysql Serverless新建数据库建立数据表开启外网访问 兼容性SQL文件 导入导出navicat 直接在线传输 构建测试环境准备Python测试脚本准备 Jmeter…

微信小程序 蓝牙设备连接,控制开关灯

1.前言 微信小程序中连接蓝牙设备,信息写入流程 1、检测当前使用设备(如自己的手机)是否支持蓝牙/蓝牙开启状态 wx:openBluetoothAdapter({}) 2、如蓝牙已开启状态,检查蓝牙适配器的状态 wx.getBluetoothAdapterState({}) 3、添加…

web基础与http协议

web基础 dns与域名: 网络是基于tcp/ip协议进行通信和连接的 应用层----传输层-----网络层-----数据链路层----物理层 IP地址,我们每一台主机都有一个唯一的地址标识(固定的IP地址),区分用户和计算机 通信。 IP地址&am…

React 调试开发插件 React devtools 的使用

可以在谷歌扩展应用商店里获取这个插件。如果不能访问谷歌应用商店,可以点此下载最新版 安装插件后,控制台出现 “Components” 跟 “Profiler” 菜单选项。 查看版本,步骤: 下面介绍 react devtools 的使用方式。 在 Component…

unity之Input.GetKeyDown与Input.GetKey区别

文章目录 Input.GetKeyDown与Input.GetKey区别 Input.GetKeyDown与Input.GetKey区别 Input.GetKey 和 Input.GetKeyDown 是 Unity 中用于检测按键状态的两个不同函数。它们之间的区别在于何时触发。 Input.GetKey(KeyCode key): 这个函数会在用户按住指定的键时触发&#xff0…

【Java转Go】快速上手学习笔记(三)之基础篇二

【Java转Go】快速上手学习笔记(二)之基础篇一 了解了基本语法、基本数据类型这些使用,接下来我们来讲数组、切片、值传递、引用传递、指针类型、函数、map、结构体。 目录 数组和切片值传递、引用传递指针类型defer延迟执行函数map结构体匿名…

【gitkraken】gitkraken自动更新问题

GitKraken 会自动升级&#xff01;一旦自动升级&#xff0c;你的 GitKraken 自然就不再是最后一个免费版 6.5.1 了。 在安装 GitKraken 之后&#xff0c;在你的安装目录&#xff08;C:\Users\<用户名>\AppData\Local\gitkraken&#xff09;下会有一个名为 Update.exe 的…

K8s+Docker+KubeSphere+DevOps笔记

K8sDockerKubeSphereDevOps 前言一、阿里云服务器开通二、docker基本概念1.一次构建、到处运行2、docker基础命令操作3、docker进阶操作1.部署redis中间件2.打包docker镜像 三、kubernetes 大规模容器编排系统1、基础概念&#xff1a;1、服务发现和负载均衡2、存储编排3、自动部…